一.shiro反序列化漏洞介绍
1.漏洞简介
Apache Shiro是一款开源企业常见JAVA安全框架,提供身份验证、授权、密码学和会话管理。java中的权限框架有SpringSecurity和Shiro,由于Spring功能强大但复杂,Shiro的简单强大,扩展性好因此用的还是很多。【CVE-2016-4437】
保存用户信息时,需要将对象序列化为字符串,然后由服务器传输给客户端,并保持到cookie中。
浏览器再次向服务器提交数据时,服务器需要将数据****反序列化为对象进行使用,这时就会执行恶意代码。
数据是由客户端提交的,攻击者可以修改这个数据,增加恶意代码,然后发送给服务器。
2.漏洞原理
Apache Shiro框架提供了记住我的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。cookie的key为RememberMe,cookie的值是经过相关信息进行序列化,然后使用AES加密(对称),最后再使用Base64编码处理。服务端在接收cookie时:
检索RememberMe Cookie的值
Base 64解码
AES解密(加密密钥硬编码)
进行反序列化操作(未过滤处理)
攻击者可以使用Shiro的默认密钥构造恶意序列化对象进行编码来伪造用户的Cookie,服务端反序列化时触发漏洞,从而执行命令。
3.利用过程
shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:
得到rememberMe的cookie值 –> Base64解码 –> AES解密 –> 反序列化
然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。
payload 构造的顺序则就是相对的反着来:
写一个对象,包含恶意命令–>对象序列化为字符串–>AES加密(因为秘钥是写死的被拿到了的)–>base64编码–>将数据通过cookie的方式发送给服务器。
在整个漏洞利用过程中,比较重要的是AES加密的密钥,该秘钥默认是默认硬编码的,所以如果没有修改默认的密钥,就自己可以生成恶意构造的cookie了。
base64编码的特征,一定是4的整数倍,如果不满,则后面用=号补齐,百分之75概率后面都是有等号的;base64编码是为了传输的时候不出错而不是为了加密
步骤1是为了对象能在网络中传输,2是保密,3是传输正确。如果cookie有效期设置10天,那么本地10天内都是不用登录的
4.漏洞防御
- 升级Shiro到最新版本
- WAF拦截Cookie中长度过大的rememberMe值(加了恶意代码的rememberMe值会很长)
- 更改默认密钥
参考链接:
http://www.hackdig.com/07/hack-731688.htm
Shiro反序列化漏洞-CSDN博客
XXX教育集团数据安全项目发现的漏洞
二、ffuf工具的使用
糊测试神器FFUF,我们可以通过FFUF测试API端点,也可以进行目录扫描,同时支持递归扫描;这里比较细节的是,FFUF还支持匹配、过滤两大功能,可以针对响应值、返回的行数、返回的单词数进行匹配或者过滤;除此之外,它还具备了漏洞赏金的必备功能,可以自定义并发数、延迟等;
kali自带
参考链接:
Ffuf爆破神器(超详细)-CSDN博客
三、githack工具的使用
一 git hack
下载地址: GIT:https://github.com/lijiejie/GitHack
git hack介绍:
GitHack是一个.git泄露利用测试脚本,通过泄露的文件,还原重建工程源代码。
参考链接
爬取网站目录工具githack-CSDN博客
如何利用git信息泄露漏洞:
1.使用 ffuf 工具扫描目标网站,如果发现存在git信息泄露,可以使用git hack下载网站源代码,可以本地对网站源码做代码审计,发现网站漏洞。