CVE-2016-4437:Shiro550漏洞复现和分析
前言:难行停之,老师傅让我去多实战锻炼经验,但是基于可怜的基础,以及对很多漏洞的一星半点认知,自己感觉还是多复现一些漏洞,有比较深刻的认知去实战,要不然自己可能也只会sql注入,以及弱口令。拿到源码也不能很好的分析。
首先我们需要复现一个shiro550,要明白这个漏洞的大体原理,shiro 550是对cookie中的RememberMe反序列化导致的漏洞。
这里我们直接用vulhub来复现,安装好docker和vulhub:
CVE-2016-4437:
在Apache shiro的框架中,执行身份验证时提供了一个记住密码的功能(RememberMe),如果用户登录时勾选了这个选项。用户的请求数据包中将会在cookie字段多出一段数据,这一段数据包含了用户的身份信息,且是经过加密的。
加密的过程是:用户信息=>序列化=>AES加密(这一步需要用密钥key)=>base64编码=>添加到RememberMe Cookie字段。
服务端进行对cookie进行验证的步骤就是:取出请求包中rememberMe的cookie值 => Base64解码=>AES解密(用到密钥key)=>反序列化。
为了测试环境搭建没问题,我们先使用工具测试一下,再来做详细分析:
使用工具去探测我们的实际
存在shiro框架,接下来进行密钥的爆破→成功,然后去写入冰蝎的内存马(这里木马的流量特征和内存马也是需要注意学习的地方,后边分成两块再学习下)
使用冰蝎去连接:成功getshell:
接下来通过抓包分析流量数据:判断一个页面的登录是否使用了shiro框架进行身份验证、授权、密码和会话管理。判断方法在于:勾选记住密码选项后,点击登录,抓包,观察请求包中是否有rememberme字段,响应包中是否有Set-cookie:rememberMe=deleteMe字段。类似于下图这样:
只要响应包中出现rememberMe=deleteMe字段就说明存在漏洞。这样说片面的,如果出现rememberMe=deleteMe字段应该是仅仅能说明登录页面采用了shiro进行了身份验证而已,并非直接就说明存在漏洞
- 未登录的情况下,请求包的cookie中没有rememberMe字段,返回包set-Cookie里也没有deleteMe字段登录失败的话,不管有没有勾选RememberMe字段,返回包都会有 rememberMe= deleteMe 字段
- 不勾选RememberMe,登录成功的话,返回包set-Cookie里有rememberMe=deleteMe字段。但是之后的所有请求中Cookie都不会有RememberMe字段
- 勾选RememberMe,登录成功的话,返回包set-Cookie里有rememberMe=deleteMe字段,还会有remember字段,之后的所有请求中Cookie都会有rememberMe字段
- 或者可以在cookie后面自己加—个rememberMe=1,看返回包有没有rememberMe= deleteMe
上述的工具是比较在实际工作或者打战中的情况,我们现在还是一步一步复现
1):开启端口监听:
nc -lvvp 6666。 这里以kali为主去监听,前提是我们环境搭建的主机,监听的kali是可以ping通的
2):攻击机kali搭建VPS服务(这里使用的是我们win10点shiro反弹shell工具),然后直接上线。这里可以延伸使用bp放入yso生成的poc也是可以的
参考链接:
https://www.cnblogs.com/xiaozi/p/13239046.html
https://www.freebuf.com/vuls/264079.html
https://www.cnblogs.com/Yang34/p/14122843.html
本文作者:Arrest
本文链接:https://www.cnblogs.com/arrest/articles/17466616.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步