声明!本公众号及团队所做的文章及工具分享仅仅只是供大家学习交流为主,切勿用于非法用途,如有任何触犯法律的行为,均与本人及团队无关!!!
漏洞介绍
Apache Shiro(之前称为JSecurity)是一个广泛使用的Java安全框架,提供身份验证、授权、加密等功能。其反序列化漏洞是近年来备受关注的高危安全问题,主要涉及RememberMe功能的缺陷,主要有两个版本
-
Shiro-550(CVE-2016-4437) -
原因:Shiro在RememberMe功能中使用了硬编码的默认密钥(AES加密密钥为kPH+bIxk5D2deZiIxcaaaA==),攻击者可通过构造恶意序列化数据触发反序列化攻击。 -
影响版本:Apache Shiro ≤ 1.2.4。 -
Shiro-721(CVE-2019-12422) -
原因:在Shiro已修复Shiro-550后,如果攻击者通过其他途径获取了RememberMe的加密密钥,可利用Padding Oracle攻击构造有效的恶意Cookie,实现反序列化攻击。 -
影响版本:Apache Shiro < 1.4.2。
漏洞原理
Shior-550
Shiro的RememberMe功能允许用户通过Cookie在会话关闭后保持登录状态。其实现流程如下:
-
序列化用户身份:将用户身份信息(如用户名)序列化为字节流。 -
AES加密:使用AES算法(CBC模式)对序列化后的数据进行加密。 -
Base64编码:将加密后的密文进行Base64编码,存储在Cookie的RememberMe字段中。 -
服务端处理:下次请求时,Shiro解密Cookie,反序列化数据还原用户身份。
流程:
序列化->AES加密->Base64->存储在cookie的rememberme中->反序列化
shior-721
攻击流程
-
密钥泄露:通过源码、配置文件或日志泄露获取Shiro的AES密钥。 -
构造Payload:生成反序列化Gadget链(如CommonsBeanutils)。 -
Padding Oracle攻击: -
利用Shiro解密时的填充验证行为,逐字节猜测填充值,构造有效密文。 -
伪造Cookie:将恶意密文编码后填入RememberMe字段发送至服务端。 -
触发漏洞:Shiro解密后反序列化数据,执行恶意代码。
修复建议
-
Shiro-550:升级到 1.2.5及以上 版本,官方移除了默认密钥并强制要求用户自行配置。 -
Shiro-721:升级到 1.4.2及以上 版本,修复了Padding Oracle攻击问题
漏洞复现
这里只复现shior550漏洞,以get-shell平台的环境为例演示,打开环境,一个登录界面
随意输入然后抓包,注意这两个地方
rememberMe=deleteMe #shior组件的特征
该漏洞利用的工具现在还是很成熟的,如有需要可在公众号后台留言shior工具即可获取,工具需要jdk8+环境,双击或使用命令运行
java -jar shiro_attack-4.7.0-SNAPSHOT-all.jar
设置好url,点击爆破密钥,成功得到密钥
然后点击爆破利用链及回显,就可以命令执行了
在命令执行模块,查看id,成功拿到root权限,实际上这里工具生成了rememberm值,然后添加在请求包中的cookie值下,即可获取权限
Cookie: rememberMe={rememberMe_value}
漏洞扫描
可以利用nuclei工具进行扫描
nuclei -t cves/2016/CVE-2016-4437.yaml -u ip/域名
总结
该漏洞为反序列化漏洞,由于密钥的不合理存放,导致攻击者可以通过rememberme或源码等处获得加密的密钥,构造出恶意的序列化cookie,从而实现反序列化漏洞利用
原文始发于微信公众号(泷羽Sec-track):【反序列化】Shior漏洞复现
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论