用友NC反射到rce

漏洞原理

网上已公开的用友NC的反序列化漏洞一大堆,ActionHandlerServlet便是其中一个,常规上一般是利用该接口来触发cc链,毕竟用友导入的commons-collections.jar是存在漏洞的版本,若是升级了该包,反序列化也就成了无米的巧妇,

最初漏洞利用

原始的漏洞利用方式是通过反序列化去调用cc链,直接执行命令,为了不要重复造轮子,直接使用github上的工具ysoserial,生成cc6的字节流
blockchain

压缩字节流转换一下利用py发送请求,成功弹出计算器
blockchain
blockchain

Wireshark数据包
blockchain

最新漏洞利用

若是升级了cc包,或是限制序列化对象,那么最初的利用方式就行不通了,但是即使不利用该请求的反序列化去调用cc链,他依旧是存在漏洞的,跟进ActionExecutor的exec方法

blockchain

主要是利用actionName(类名)、methodName(方法名)、paramter(参数值)这三个变量来反射方法,而且该三个变量的值是可控的,所以可以实现任意方法的访问,如访问一下危险方法(上传文件、修改管理员密码、执行命令等)
blockchain

这里主要利用rce来演示一下漏洞的利用过程,首先找到一个现成的代码执行类Interpreter,该类的eval方法可以执行系统命令(用友NC的/servlet/~ic/bsh.servlet.BshServlet任意命令执行漏洞就是利用了该方法执行)成功弹出计算器
blockchain

依次序列化actionName(类名)、methodName(方法名)、paramter(参数值)
blockchain

该请求接受数据流后做了一次解压操作,所以数据包需要进行一次压缩
blockchain

通过以下函数对字节流进行压缩
blockchain

压缩之后发送数据包
blockchain

发送数据包,成功弹出计算器
blockchain

Wireshark数据包内容
blockchain

扫描一下网络资产,抽查了4个,执行ping命令,返回这种字节流数据就表明执行成功了
blockchain

dnslog收到了,没有把我的%USERNAME%解析出来有点尴尬哈
blockchain

二次更新对漏洞进行了回显操作
blockchain

总结

没有总结,自己的博客任性,POC和工具暂不公开

版权声明:
作者:ucpeo
链接: Blog
来源:Blog
文章版权归作者所有,未经允许请勿转载。

THE END
< < 上一篇
下一篇>>