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

posted @ 2023-06-08 15:20  Arrest  阅读(587)  评论(0编辑  收藏  举报