无回显命令执行PoC编写方法(Apache Shiro Java反序列化)

admin 2022年5月7日09:12:36评论273 views字数 1343阅读4分28秒阅读模式

无回显



漏洞存在与否,无法从web获取到标志性的信息,Java反序列化漏洞即属于该类型。



验证方法



针对无回显的命令执行漏洞,让目标机执行wgetnc或者curl等命令,然后在公网主机监听对应的端口,通过日志来判断命令是否被执行。


该方法可行,不过缺陷有以下几点:

  • 修改了目标机的文件系统

  • 不具有通用性,如windows没有nc、linux没有wget的情况。

  • 涉及到TCP数据传输,执行速度慢


一种更好的方式是使用dns日志来判断命令是否执行,流程如下:

  1. 生成一个特殊的域名,如 1dsa3r3.shiro.server.com

  2. 构造payload让目标机执行 ping 1dsa3r3.shiro.server.com

  3. 登录dns服务后台,如果后台记录了该域名的dns查询记录,即证明目标存在命令执行。


这种方法首先适应了win/unix系统,二者均自带ping命令。而且执行DNS的速度要快于TCP。



tips



  • 使用ping命令的时候有个坑,大部分linux系统执行ping xxxx时候会一直ping下去,而不是win里面执行4次之后退出。
    解决方案:使用 ping -n 3 xxx.com || ping -c 3 xxx.com 可以解决该问题并保证兼容性。

  • 实际情况中会遇到很多入口与出口不同的情况,即我们向主机A发送payload,但是主机B执行了我们的ping命令。这时我们dns日志中的IP与A的IP无法匹配,就会造成漏报。
    解决方案:为每次验证生成独立、随机的域名,如[random].shiro.xxx.com,在[random]处使用10位随机字符或者递增的数字。这样只要以该域名为准查找日志,即可同时匹配到入口和出口主机IP。



PoC示例



以Apache Shiro Java反序列化远程命令执行漏洞为例。


昨日Knownsec 404发出的分析文章:
https://www.seebug.org/vuldb/ssvid-92180


完整PoC代码

https://github.com/Xyntax/POC-T/blob/master/script/shiro-deserial-rce.py


主函数

  • 调用cloudeye接口,设置一个以shiro 为特征组的随机域名,即:[random].shiro.user.dnslog.info

  • 将该域名加入目标机执行的ping命令

  • 使用ping命令生成反序列化payload

  • requests以GET请求的Cookie字段发送payload

  • 调用Cloudeye接口查看dns日志,在日志中匹配之前构造的域名

  • 如果访问记录存在,在记录中匹配出口IP

  • 返回入口IP和出口IP


无回显命令执行PoC编写方法(Apache Shiro Java反序列化)


Payload生成

生成payload的原理在上面链接文章有分析和相应代码,稍加修改,需传入要目标机执行的命令和本地jar的位置:


无回显命令执行PoC编写方法(Apache Shiro Java反序列化)


CloudEye接口

简单写了个CloudEye功能接口,用于生成域名和获取dns/Apache日志,整合在PoC框架中,使用前需要配置。
https://github.com/Xyntax/POC-T/blob/master/plugin/cloudeye.py



效果



批量验证:


无回显命令执行PoC编写方法(Apache Shiro Java反序列化)


CloudEye日志:


无回显命令执行PoC编写方法(Apache Shiro Java反序列化)


原文始发于微信公众号(乐枕迭代日志):无回显命令执行PoC编写方法(Apache Shiro Java反序列化)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月7日09:12:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   无回显命令执行PoC编写方法(Apache Shiro Java反序列化)http://cn-sec.com/archives/943636.html

发表评论

匿名网友 填写信息