shiro-550
RCE流程
提取cookie->Base64解码->AES解密->反序列化
漏洞点就在于这个AES的key,如果用的是默认key或者是弱密码,可以直接利用或者是爆破出来
如何判断爆破成功没有呢,看返回包的cookie,如果出现Remember-Me=Delete-Me,就是爆破失败,反之成功
但其实Remember-Me这玩意不一定非得叫Remember-Me,可以改的,在ShiroConfiguration.java文件里可以改动的
shiro-721
shiro721中,密钥的生成方式变为了动态生成,前后对比源码如下:
1 | public AbstractRememberMeManager() { |
1 | public AbstractRememberMeManager() { |
RCE流程
- 输入正确账号密码登录,勾选Remember,并从cookie中拿到Remember-Me的值
- 使用rememberMe字段进行Padding Oracle Attack
- 获取intermediary,使用rememberMe字段进行Padding Oracle Attack。
- 最后使用新的Cookie请求网站执行攻击
Padding Oracle Attack
这个攻击其实类似于sql盲注,这就要求服务器有咱能利用的Bool条件
也好办其实:
- Padding正确,服务器正常响应
- Padding错误,服务器返回Set-Cookie: rememberMe=deleteMe
shiro权限绕过1
shiro在路径控制时候,没有对传入的url编码进行decode,导致攻击者可以绕过过滤器,访问被过滤的路径
/hello/1 需登录
版本:Shiro ≤ 1.4.2
/hello/1/可绕过
版本:Shiro ≤ 1.5.1
/asdf/..;/hello/1可绕过
测试环境使用1.4.2版本
shiro权限绕过2
该漏洞是因为springboot和shiro处理不一致导致的认证绕过
org.apache.shiro.web.util.Webutils#getPathWithinApplication获取到的是/admin/;page,然后
将;page作为一整个字符串,匹配/admin/{name}路由,导致越权
shiro权限绕过3
这个是因为tokenizeToStringArray方法里德trimTokens参数默认为true,空格会经过trim处理被清除,再次返回getChain时候最后面的/被清除,导致/admin与/admin/*匹配失败导致权限绕过
/admin/%20
shiro权限绕过4
当用户输入/;/account时候,org/apache/shiro/web/util/WebUtils.java里的normalize方法会将;后面进行截取,截取之后后边方法再错误处理导致的权限绕过
长度绕过
JRMP、短利用链、块请求(请求走私不到行不行,哪天我试试
payload
1 | import base64 |
版权声明:本文由「hongzh0」原创,博客内容受知识共享协议(CC BY-NC-SA)保护,允许在署名的前提下进行非商业性使用,并以相同方式共享。本文永久链接地址:http://hongzh0.wiki/2025/02/03/shiro/