shiro反序列化回显工具中的流量特征 – 作者:yumusb

正所谓”中国不能没有曹县,攻防不能没有shiro“、”无shiro,不攻防“。相信各位在攻防中都利用shiro拿到了一定的目标。今天主要讨论流传较为广泛的shiro反序列化(cve_2016_4437)利用工具中的流量特征。

漏洞利用流程

可能你已经了解,不过我还是要逼逼一下。

检测key阶段

此处以飞鸿大佬的利用工具https://github.com/feihong-cs/ShiroExploit-Deprecated为例
image.png可以看到 有大量篇幅在提及 SimplePrincipalCollection。于是顺藤摸瓜,我们找到了这篇文章:https://mp.weixin.qq.com/s/do88_4Td1CSeKLmFqhGCuQ。

得出以下结论:

在SimplePrincipalCollection未公开之前,大家都是采用ysoserial 中的DNSLOG+URLDNS进行检测
(https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/URLDNS.java )固然能用,不过会在靶机产生一定的DNS记录,加大了被感知的可能。

SimplePrincipalCollection公开以后,基本是通过判断shiro对key正确性判断导致Cookie中的“rememberMe=deleteMe”数量差异进行的判断。为了降低误报,在过程中还会先获取cookie基数,如通过一个错误的key获取cookie基数:
image.png

检测利用链以及回显

我们现在已经拿到了key,下一步就是通过正确的利用链,来进一步执行命令以及得到命令的执行结果。这里又有了两个阶段,那就是只执行和执行并回显。

此处我还是借助飞鸿大佬的利用工具

https://github.com/feihong-cs/ShiroExploit-Deprecated
image.png正如这里写到的,还是借助DNSLOG进行判断命令是否能执行,以确定利用链。此处还是不能回显的,只能是“盲打“。

下面我们看另一个利用工具:

shiro_attack-1.5.jar https://github.com/j1anFen/shiro_attack
image.png此时重点已经放到了能回显。

后利用阶段

使用defineclass等注入内存马。

回显带来的一些副作用(流量特征)

这里我使用了vulhub的默认环境,也就是

https://github.com/vulhub/vulhub/tree/master/shiro/CVE-2016-4437 进行测试

shiro_attack-1.5.jar

以 shiro_attack-1.5.jar https://github.com/j1anFen/shiro_attack 为例。命令执行过程中,我们可以看到以下内容:
image.png可以很明显的看到post中的C参数传递,以及响应包中的$$$.*$$$。
我们也可以定位到代码实现处:
image.png可以看到C参数以及响应结果 都是base64编码后的内容。
image.pngimage.png还有注入内存马功能处:
image.png看到返回包响应值为:dynamic inject success
image.pngPOST值,也就是我们表单中填入的路径与密码。
相关代码实现为:
image.pngimage.png

shiro_attack-2.0.jar

https://github.com/j1anFen/shiro_attack 目前的最新版本
image.png相比于上个版本,增加了爆破利用链及回显的功能,我们尝试一下。image.png发现在header的请求与响应中,都新增了一个techo:xxx,找到代码实现处:
image.png发现新版本正是通过此来判断是否能够正常回显。执行命令试试。image.png发现旧版本的C参数 去到了头部,不再位于post body里。
相关代码:
image.png试试内存马注入:
image.png旧版本的密码、路径参数 不再放于post body内,转移到header中。Post包内只有恶意的class编码后的内容,参数为dy。并且注入成功的标识符变化了。
image.png相关代码为:
image.png

ShiroExploit-v2.3.jar

来自 https://github.com/fupinglee/JavaTools/tree/master/Shiro
执行命令:
image.png明文放在header里的 labHeader的字段中,不过由于利用链问题,我这里没能成功回显。按照逻辑来看,回显也是明文的。
注入内存马:仅仅在注入蚁剑SHELL时,会有特征。
image.pngPost 中有 bstr 与 pwd字段、畸形的Accept-Header。
其他注入情况只看到有长的Cookie值。

Vulmap

来自https://github.com/zhzyker/vulmap
image.png检测利用链阶段(POC过程),会在header中有Testcmd: echo 随机的md5。执行阶段(EXP)的命令也会放到header中的Testcmd中。

Xray

没得高级版,找了一个别人的截图。header中有Testecho、Testcmd字段。回显为明文。
image.png

为什么会有这么多的特征?

像Xray、vulmap这种没有无java环境的检测工具,payload都是写死的,只能通过传参进去执行。但是其他的jar的工具,完全可以处理payload后再进行利用,以达到无参数传递目的。另外,在实际检测中还发现有通过header中的cmd参数进行传参的。

改进一下检测规则

可以根据这些工具的特定特征来完善shiro反序列化的检测规则,另外也可以对一些工具内置的恶意class编码后的base64进行检测,例如我们上面看到的yy66vg开头的字符串。

来源:freebuf.com 2021-06-16 22:32:59 by: yumusb

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论