这个 shiro 是有 WAF 的,具体的情况就是找得到 key,但是找不到链。
当 key 存在但是找不到链,抓包看看请求。
我所知的 shiro bypass 思路就从 rememberMe cookie 的长度,还有就是脏数据填充,waf 会解密 rememberMe cookie,解密后查看是否存在恶意行为,bypass 的策略就是防止 cookie 被解密,由于 shiro 的加解密方式用到的是 base64+aes,只需要再 payload 中加入某些特殊字符,即可绕过 waf,可用的字符为!、@、#(只要不出现 BASE 编码中可能出现的字符就行)
先探测 WAF 规则#
这是一个工具探测链的时候所发送的请求包,请求包为 GET 请求。
状态无回显。
判断拦截 cookie 长度#
rememberMe 存在,rememberMe=deleteMe 也存在。
那就可以确定一件事,WAF 确实拦截了 cookie 长度。
有可以缩小 payload 长度的,但是我不会,项目参考:https://xz.aliyun.com/t/10824
填充脏字符#
填充脏字符后依然无回显。
未知 Http 方法名绕 WAF#
修改 GET 请求方法测试。
最后把请求修改为 XXX 之后即可执行成功。
注:#
刚开始未知请求不可以,还是被 WAF 掉了,刚开始识别的 WAF 特性是:
1. 拦 cookie 数据过长
2. 拦纯 POST
当时使用伪协议成功绕过,日后可以多试试,主要就是思路就是 fuzz 的过程。