免责声明
本公众号“猎洞时刻”旨在分享网络安全领域的相关知识,仅限于学习和研究之用。本公众号并不鼓励或支持任何非法活动。
本公众号中提供的所有内容都是基于作者的经验和知识,并仅代表作者个人的观点和意见。这些观点和意见仅供参考,不构成任何形式的承诺或保证。
本公众号不对任何人因使用或依赖本公众号提供的信息、工具或技术所造成的任何损失或伤害负责。
本公众号提供的技术和工具仅限于学习和研究之用,不得用于非法活动。任何非法活动均与本公众号的立场和政策相违背,并将依法承担法律责任。
本公众号不对使用本公众号提供的工具和技术所造成的任何直接或间接损失负责。使用者必须自行承担使用风险,同时对自己的行为负全部责任。
本公众号保留随时修改或补充免责声明的权利,而不需事先通知
基于Docker的 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、进行反序列化操作(未作过滤处理) 在调用反序列化时未进行任何过滤,导致可以触发远程代码执行漏洞。
1.1 登录失败的流量特征
如果登录失败,返回包就会返回Set-Cookie:remember=deleteMe
1.2登陆成功的流量特征
如果登录成功,就会出现正确的那个 set-Cookie:remember=正确值,然后就是非常长的一串子,最后下面还提示登录成功。
二、工具爆破shiro的流量特征
2.1检测是否为shiro框架的流量
工具的第一步肯定是去判断该网站是否使用了shiro框架。
直接设置一个Cookie: rememberMe=yes,看看返回包是不是返回Set-Cookie: rememberMe=deleteMe(也就是登录失败)判断是不是存在shiro框架。
可以看到这里直接设置了一个Cookie:remember=yes 来进行探测。
网站返回 Set-Cookie: remember=deleteMe证明网站存在shiro框架。
2.2爆破秘钥成功流量
直接设置一个Cookie: rememberMe=yes,看看返回包是不是返回Set-Cookie: rememberMe=deleteMe(也就是登录失败)判断是不是存在shiro组件。
然后再设置一个通过秘钥进行加密的序列化字符串,然后通过返回包来判断是不是爆破成功,如果返回包没有返回Set-Cookie: rememberMe=deleteMe,那就是爆破成功。
下面这种就是秘钥爆破成功!因为返回包不再出现remember=deleteMe
然后再cookie那里瞎添加一个字母,就会出现Set-Cookie: rememberMe=deleteMe,也就是秘钥爆破失败。
2.3利用链爆破流量
如果在秘钥正确的情况下,进行利用链爆破,就会出现,cookie非常长的情况。如果在研判中发现cookie非常长,并且返回包状态码为200,那就要考虑网站是否被入侵了!
利用成功的情況下
利用失败的情况下
就会出现Set-Cookie: rememberMe=deleteMe;
2.4执行命令的流量
执行命令时候的流量特征就是,rememberme 非常长,并且返回值是加密的,但是开头和结尾都带三个$
执行命令whoami
执行命令ls -a
2.5注入内存马时候的流量
进行注入内存马,然后抓包查看流量的特征。
可以看到,注入内存马的时候,cookie值非常长,并且数据包体pass参数非常长,也都是加密的数值。
三、如何防御shiro漏洞
-
升级shiro版本
-
限制cookie长度
-
不要使用硬编码的key
欢迎加入猎洞内部圈子
想进入交流群的师傅,请扫码下方二维码加我微信,备注“加群”。
原文始发于微信公众号(猎洞时刻):Hvv必问 | 你说你不懂shiro各种流量特征?
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论