shiro流量分析
基于CVE-2016-4437
原理:
Apache Shiro框架提供了记住我的功能(RememberMe),用户登陆成功后会生成经过加密并编码的cookie。cookie的key为RememberMe,cookie的值是经过对相关信息进行序列化,然后使用aes加密,最后在使用base64编码处理形成的。
Shiro记住用户会话功能的逻辑
获取RememberMe的值 —> Base64解密 —> ASE解密 –> 反序列化 在服务端接收cookie值时,按照如下步骤来解析处理:1、检索RememberMe cookie 的值 2、Base 64解码 3、使用AES解密(加密密钥硬编码) 4、进行反序列化操作(未作过滤处理) 在调用反序列化时未进行任何过滤,导致可以触发远程代码执行漏洞。
环境
手工登录查看流量特征
登录失败
返回包就会返回Set-Cookie:remember=deleteMe
登录成功
登录成功,就会出现 set-Cookie:remember=一长串值
下面还有会登录成功提示
工具爆破shiro的流量特征
检测是否为shiro框架的流量
工具的第一步肯定是去判断该网站是否使用了shiro框架
先设置代理不然burp抓不到包
检测时 工具设置了一个remember=1
网站返回 Set-Cookie: remember=deleteMe证明网站存在shiro框架。
爆破秘钥成功流量
再设置一个通过秘钥进行加密的序列化字符串,然后通过返回包来判断是不是爆破成功,如果返回包没有返回Set-Cookie: rememberMe=deleteMe,那就是爆破成功。
爆破成功
当我在remember这多加几个2222使它错误
那返回包就会重新出现rememberme=deleteme
利用链爆破流量
在秘钥正确的情况下,进行利用链爆破,就会出现,cookie非常长的情况。如果在研判中发现cookie非常长,并且返回包状态码为200,那就要考虑网站是否被入侵
执行命令的流量
执行命令时候的流量特征就是,rememberme 非常长,并且返回值是加密的,但是开头和结尾都带三个$
执行whoami
执行ls
注入内存马时候的流量
进行注入内存马,然后抓包查看流量的特征。
可以看到,注入内存马的时候,cookie值非常长,并且数据包体pass参数非常长,也都是加密的数值。
如何防御shiro漏洞
- 升级shiro版本
- 限制cookie长度
712566071970)]
可以看到,注入内存马的时候,cookie值非常长,并且数据包体pass参数非常长,也都是加密的数值。
如何防御shiro漏洞
- 升级shiro版本
- 限制cookie长度
- 不要使用硬编码的key