正所谓”中国不能没有曹县,攻防不能没有shiro“、”无shiro,不攻防“。相信各位在攻防中都利用shiro拿到了一定的目标。今天主要讨论流传较为广泛的shiro反序列化(cve_2016_4437)利用工具中的流量特征。
漏洞利用流程
可能你已经了解,不过我还是要逼逼一下。
检测key阶段
此处以飞鸿大佬的利用工具https://github.com/feihong-cs/ShiroExploit-Deprecated为例
可以看到 有大量篇幅在提及 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基数:
检测利用链以及回显
我们现在已经拿到了key,下一步就是通过正确的利用链,来进一步执行命令以及得到命令的执行结果。这里又有了两个阶段,那就是只执行和执行并回显。
此处我还是借助飞鸿大佬的利用工具
https://github.com/feihong-cs/ShiroExploit-Deprecated
正如这里写到的,还是借助DNSLOG进行判断命令是否能执行,以确定利用链。此处还是不能回显的,只能是“盲打“。
下面我们看另一个利用工具:
shiro_attack-1.5.jar https://github.com/j1anFen/shiro_attack
此时重点已经放到了能回显。
后利用阶段
使用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 为例。命令执行过程中,我们可以看到以下内容:
可以很明显的看到post中的C参数传递,以及响应包中的$$$.*$$$。
我们也可以定位到代码实现处:
可以看到C参数以及响应结果 都是base64编码后的内容。
还有注入内存马功能处:
看到返回包响应值为:dynamic inject success
POST值,也就是我们表单中填入的路径与密码。
相关代码实现为:
shiro_attack-2.0.jar
https://github.com/j1anFen/shiro_attack 目前的最新版本
相比于上个版本,增加了爆破利用链及回显的功能,我们尝试一下。发现在header的请求与响应中,都新增了一个techo:xxx,找到代码实现处:
发现新版本正是通过此来判断是否能够正常回显。执行命令试试。发现旧版本的C参数 去到了头部,不再位于post body里。
相关代码:
试试内存马注入:
旧版本的密码、路径参数 不再放于post body内,转移到header中。Post包内只有恶意的class编码后的内容,参数为dy。并且注入成功的标识符变化了。
相关代码为:
ShiroExploit-v2.3.jar
来自 https://github.com/fupinglee/JavaTools/tree/master/Shiro
执行命令:
明文放在header里的 labHeader的字段中,不过由于利用链问题,我这里没能成功回显。按照逻辑来看,回显也是明文的。
注入内存马:仅仅在注入蚁剑SHELL时,会有特征。
Post 中有 bstr 与 pwd字段、畸形的Accept-Header。
其他注入情况只看到有长的Cookie值。
Vulmap
来自https://github.com/zhzyker/vulmap
检测利用链阶段(POC过程),会在header中有Testcmd: echo 随机的md5。执行阶段(EXP)的命令也会放到header中的Testcmd中。
Xray
没得高级版,找了一个别人的截图。header中有Testecho、Testcmd字段。回显为明文。
为什么会有这么多的特征?
像Xray、vulmap这种没有无java环境的检测工具,payload都是写死的,只能通过传参进去执行。但是其他的jar的工具,完全可以处理payload后再进行利用,以达到无参数传递目的。另外,在实际检测中还发现有通过header中的cmd参数进行传参的。
改进一下检测规则
可以根据这些工具的特定特征来完善shiro反序列化的检测规则,另外也可以对一些工具内置的恶意class编码后的base64进行检测,例如我们上面看到的yy66vg开头的字符串。
来源:freebuf.com 2021-06-16 22:32:59 by: yumusb
请登录后发表评论
注册