Shiro反序列化漏洞提权渗透实战:原理+复现(CVE-2016-4437)
目录
一、Shiro反序列化漏洞(CVE-2016-4437)
二、漏洞探测
三、漏洞渗透
1、ShiroAttack2 工具下载
2、ShiroAttack2 工具安装
3、Shiro漏洞检测
4、注入哥斯拉木马
5、哥斯拉木马连接
本文详细分析了Apache Shiro框架的反序列化漏洞(CVE-2016-4437),该漏洞因硬编码密钥导致攻击者可通过rememberMe Cookie执行任意代码。文章介绍了漏洞检测方法(通过Burp Suite抓包识别特征)和利用工具ShiroAttack2的实战过程,包括密钥爆破、命令执行和内存马注入。最后演示了使用哥斯拉木马连接被控服务器的完整流程,包含URL配置、密码设置和命令执行等步骤。防御建议包括升级版本、更换密钥和限制反序列化类等。
一、Shiro反序列化漏洞(CVE-2016-4437)
Shiro 反序列化漏洞(CVE-2016-4437)是 Apache Shiro 框架的严重安全漏洞,主要因加密密钥硬编码导致。由于Shiro 使用固定密钥对 rememberMe Cookie 加密,攻击者可构造恶意反序列化数据,经该密钥加密后作为 Cookie 发送,服务器解密并反序列化时触发代码执行。
-
漏洞名称:Apache Shiro 反序列化远程代码执行漏洞
-
CVE编号:CVE-2016-4437
-
影响版本:Apache Shiro ≤ 1.2.4
-
漏洞类型:反序列化漏洞(通过恶意Cookie执行任意代码)
-
风险等级:高危(可导致服务器被完全控制)
-
攻击流程:
- 收集目标应用使用 Shiro 的证据(如响应头含
rememberMe=deleteMe) - 生成携带恶意命令的反序列化 payload(如利用 CommonsCollections 等 gadget)
- 用默认密钥加密 payload 并设置为 rememberMe Cookie 发送
- 服务器解密并执行 payload,获取 shell 或敏感信息
- 收集目标应用使用 Shiro 的证据(如响应头含
-
防御措施:
- 升级 Shiro 至 1.2.5 及以上版本
- 更换默认加密密钥,使用强随机密钥
- 限制反序列化类白名单,禁用危险 gadget 库
- 对 rememberMe Cookie 设置严格的安全属性(HttpOnly、Secure 等)
二、漏洞探测
在登录页面勾选 “记住密码” 选项并点击登录,同时使用 Burp Suite(BP)抓取请求包与响应包。若请求包中包含rememberme字段,且响应包的Set-Cookie头中出现rememberMe=deleteMe字段,则可初步判定该应用使用了 Shiro 框架。如下所示,登录页面勾选remember,随机填写用户名和密码,如下图红框所示。

如下图红框内所示,响应报文中包含rememberMe=deleteMe字段,说明应用使用 Shiro 框架。

三、漏洞渗透
本文使用shiro反序列化漏洞综合利用工具来进行渗透实战。
1、ShiroAttack2 工具下载
ShiroAttack2 是一款功能强大、图形化的 Apache Shiro 漏洞综合利用工具,由 SummerSec 开发。它集成了检测、漏洞利用和密钥爆破于一体,大大简化了渗透测试过程中对 Shiro 框架的测试工作。访问项目的 GitHub Release 页面,下载地址如下所示。
https://github.com/SummerSec/ShiroAttack2/releases

从项目的 Release 页面下载最新的 Jar 包,软件下载后,解压后如下所示。

2、ShiroAttack2 工具安装
在存放 ShiroAttack2.jar 的目录下,以我的环境为例,jar文件为shiro_attack-4.7.0-SNAPSHOT-all.jar,打开终端(命令行)执行如下命令即可启动工具。
java -jar shiro_attack-4.7.0-SNAPSHOT-all.jar


3、Shiro漏洞检测
在 目标URL 中输入待检测的地址http://10.33.49.100:8080/,点击爆破密钥如下所示。

如下所示,提示找到key:kPH+bIxk5D2deZiIxcaaaA==。

点击爆破利用链及回显
在 ShiroAttack2 的主界面,点击顶部第二个选项卡 爆破利用链及回显,点击右下角的 爆破 按钮。ShiroAttack2 会开始自动化流程:对于每一个勾选的利用链,都用你提供的密钥加密对应的Payload,发送给目标,然后检查响应,判断命令是否执行成功。如下所示,发现了发现构造链:CommonsBeanutils1 回显方式: TomcatEcho。

点击下图的命令执行的按钮,输入命令ls -la,点击“执行”按钮如下所示。

如下所示,包括.dockerenv和.dockerinit文件,说明这是个docker环境。
-rwxr-xr-x 1 root root 0 Jul 13 2023 .dockerenv
-rwxr-xr-x 1 root root 0 Jul 13 2023 .dockerinit
4、注入哥斯拉木马
我们将注入一个木马文件到服务器中,这里选择哥斯拉,具体配置如下所示。
-
切换至利用模块:点击顶部第三个选项卡
利用。 -
选择内存马类型:在
利用模块下,继续选择内存马子选项卡,在内存马类型的下拉菜单中,选择哥斯拉 Shell。 -
配置内存马参数:
-
密码 (Pass):这是连接哥斯拉客户端时需要的密码,这里选择默认的
pass1024。 -
路径 (Path):这是内存马在目标服务器上存在的 URL 路径。必须是一个目标网站上不存在的路径,否则会冲突,这里选择默认的/favicondemo.ico。
-

点击执行注入,观察日志区,出现 [+] 注入成功!
哥斯拉[Filter] 注入成功!
路径:http://10.33.49.100:8080/favicondemo.ico
密码:pass1024

5、哥斯拉木马连接
打开哥斯拉客户端,运行哥斯拉的 start.jar 文件。创建新连接,在哥斯拉主界面,点击左上角的 绿色加号 按钮新建一个连接,配置连接参数:
-
URL:填写内存马的完整地址http://10.33.49.100:8080/favicondemo.ico
l -
密码:填写你在 ShiroAttack2 中设置的密码pass1024。
-
连接类型:在下拉菜单中必须选择
JAVA。 -
编码:通常保持默认(如
UTF-8)即可。

点击 测试 按钮。这时如果配置正确会弹出提示框显示 连接成功,然后点击添加,如下所示。

连接成功后,哥斯拉界面会分为两部分:左侧的文件浏览器和右侧的操作区。选中后右键,点击进入,如下图红框所示。


在命令执行页面,输入ip addr查看服务的ip地址,如下所示。

