背景
Yakit 新增的 Yso-Java-Hack 功能可以让我们生成反序列化利用的 payload ,通过图形化的方式简化了生成 payload 的过程,但发包过程由于需要针对不同的目标站点对 payload 进行编码,所以这部分留给了用户,自行通过Yak进行编码和发包。
......还是要写代码。在@rr师傅的建议下,我为 Fuzztag 增加了几个新标签,方便一键爆破利用链。
2 环境搭建
在本地搭建一个测试环境,源码如下
这里已经给需要测试的师傅打包好了docker环境,docker运行下就可以docker run -p 8080:8080 -itd --name="deserilize_test" z3r0ne0/deserilize_test
3 漏洞检测
先使用urldns检测目标是否存在漏洞
如图,未收到dnslog记录,说明可能目标机器不出网,那再继续测试下不出网回显。
使用yso:headerecho和yso:bodyecho时要注意下,需要在header中加入{{headerauth}}并设置并发数量为1,随机延迟的最大和最小值要大于1,原因是回显链的原理是遍历所有请求,并在header中有特殊标志的的请求的header中添加元素,这种方式在并发情况下会有问题。
注意看我设置的回显header的kay和value都很长,目的是可以通过header头相似度找出成功回显的请求
如图,CommonsBeanutils183NOCC链的相似度明显小了0.1,看下响应,发现成功回显。
再测试下命令执行回显,如图
CommonsBeanutils183NOCC和CommonsCollectionsK1的响应大小明显不正常,在详情中可以看到命令执行成功。
至此,我们就得到了 CommonsBeanutils183NOCC 和 CommonsCollectionsK1 两条可以代码执行的利用链了。
4 补充案例
如果回显失败,可能是不支持该中间件回显,那就可以使用yso:dnslog去爆破可代码执行的链,也有可能代码执行链用不了,那就使用yso:exec爆破命令执行链。
先试下yso:dnslog爆破,使用时注意,此标签第一个参数是域名,第二个参数是可选参数,如果设置了,那么每条链调用的域名将会是<参数2><编号>.<域名>
如图,收到dnslog,可以看到标号9和标号3对应的链触发了dnslog
在 Responses 的 Payloads 中可以看见对应的链为 CommonsBeanutils183NOCC 和 CommonsCollectionsK1。
如果还是收不到dnslog,那就只能用yso:exec试试反弹shell、在web目录写文件、延时等操作了,这里测试下写文件。
进入docker可以看见写入文件成功
5 打内存马
可以看另一篇文章 《Yso-Java Hack 进阶:利用反序列化漏洞打内存马》
还没有评论,来说两句吧...