Tomcat-AJP调试及编写EXP
2020-02-26 16:32:53 Author: www.secpulse.com(查看原文) 阅读量:198 收藏

投稿:LFY

配图:M

   网上的分析文章已经很多了,这里就不说漏洞触发的流程了,主要说下调试漏洞的整个过程以及遇到的问题

首先看tomcat的commit跟到了AJP的处理包中,然后就看到了安恒发的文章,确定了具体的漏洞点在setAttribute处,需要通过switch case进入到具体的漏洞触发分支。 

要AJP通信,自然要遵守AJP协议,而网上关于AJP的协议格式等文章基本没有... 这里从github上找到一个从tomcat中提取ajp通信类的项目 https://github.com/kohsuke/ajp-client,虽然有一些小坑,但是改一下不影响正常使用。

exp中通过这两个类与tmocat ajp建立socket通信,就可以开始正常的调试流程。

复现

第一个问题在上图的while循环处,通过wireshark抓包可以看到,这里因为包尾部是0xFF的原因,直接就跳过了循环。因此我们修改协议类中end()方法,在append(0xFF)之前加入我们要加入的属性。

阅读协议文档可以清楚的看到,在header部分之后push一个Code即代表attribute的值,因此这里push一个0x0A然后再push我们要设置的值即可。

第二在要读文件时,在getResource过程中,有validate验证,因此要读的文件路径必须以/开头。       

第三是回显的问题,这个协议的项目在处理length时有一些bug,通过wireshark抓包可以看到,length位在第0x3b和0x3c位,因此要想正确回显,需要改其中的readInt等一些协议处理的内容。

其实通过抓包还能看到很多东西,比如他的请求包可以看出,其实协议内容和http长的有点像,还有比如attribute在哪个位置设置也都一目了然。       

至于jsp的包含,其实看完读取,包含直接就明白了,只是通过后缀路由到了不同的servlet而已,因此exp都是一样的。分析好后,exp并不难写。分析完很快就写了出来,然而害怕被喝茶没敢发...

https://github.com/LFYSec/Tomcat-AJP-EXP

最后推一波团队threedr3am师傅的项目,环境&exp&需要掌握的知识点都很全,配合师傅的文章,想学java安全的可以从这入门到入狱

https://github.com/threedr3am/learnjavabug

参考链接

https://mp.weixin.qq.com/s/GzqLkwlIQi_i3AVIXn59F

本文作者:ChaMd5安全团队

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/123939.html


文章来源: https://www.secpulse.com/archives/123939.html
如有侵权请联系:admin#unsafe.sh