本帖最后由 zhaorong 于 2021-7-7 15:38 编辑
正所谓 中国不能没有曹县 攻防不能没有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开头的字符串。