AJP
是一种用于连接web服务器与应用服务器的二进制协议,通常用于Apache HTTP Server
或Nginx
与Apache Tomcat
等Java
应用服务器之间的通信。
AJP
走私漏洞利用的是AJP协议
与HTTP协议
之间的差异,以及中间件(如代理服务器或负载均衡器)和应用服务器对HTTP请求
的不同解析方式。这种漏洞允许攻击者通过特殊构造的请求,操纵AJP协议
下的数据流,实现请求走私。
关于AJP协议
的详细内容可以参考https://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html
说到AJP走私
其实相关的漏洞很少,这也导致了很多时候并没有考虑到这方面的问题。但是实际上AJP走私
相当于发送一个额外的请求,通过这个额外的请求我们可以访问到原来无法访问的地址,绕过一些针对外部的访问配置问题,当然这只是利用方式的一种。
AJP走私
最早的利用应该是在长亭的ghostcat
漏洞中,通过这个漏洞,攻击者可以读取目标机器webapp
目录下的任意文件,这也是在公开项目中危害比较大的一个漏洞了,网上有很多相关资料可以查阅。
直接下载镜像用vmware启动即可。
默认账号密码为:admin/default
因为BIG-IP的Apache是基于Apache 2.4.6的定制版,所以也会受AJP走私的影响,结合其它信息就能得知:
/mgmt/tm/util/bash
来执行命令,但是当时是基于X-F5-Auth-Token
权限的绕过,那么既然权限绕过已经修复了,我们就需要一个可以通过认证的X-F5-Auth-Token
,那么也就是需要创建一个管理员用户。/tmui/Control/form
调用/tmui/system/user/create.jsp
来创建一个新的用户。/mgmt/shared/authn/login
然后返回第一步来执行命令。
流程概括下来就是:通过/tmui/Control/form
来调用user/create.jsp
然后从/mgmt/shared/authn/login
获取新的token,最后在/mgmt/tm/util/bash
执行命令。
这其中有一个需要注意的点:
tmsh中进行了csrf检测,所以在第一步调用的时候需要构造好三个参数_timenow
Tmui-Dubbuf
和_bufvalue
,满足_bufvalue
的值等于Tmui-Dubbuf
+Tmui-Dubbuf
。
通过构造Tmui-Dubbuf
=BBBBBBBBBBB、_timenow
=a、_bufvalue
=eIL4RUnSwXYoPUIOGcOFx2o00Xc=,即可绕过csrf的检测,这也是这个漏洞中比较关键的一环。
使用这三个键值对进行构造,那么最后得到的poc如下:
使用Transfer-Encoding: chunked
时,会使用分块传输编码,第一个204就是trunk size的大小,用十进制转换为十六进制后对应516,也就是我们走私请求的长度,最后的0表示结尾,如果不是用https看到的明文如下:
这个步骤需要多试几次,不一定第一次就成功,发现返回的不是登录界面后就可以进行下一步了:
通过账号密码获取到token的值。
然后执行命令:
自此漏洞利用就结束了。
根据这个CVE发现其实在通过请求走私是可以将一些老漏洞重新利用的,那么在进行代码审计的过程中或者渗透测试的过程中,是否有别的可能存在的思路?因为现如今很多的企业,尤其是一些老企业所使用的组件仍然是较低版本,在做的时候可以顺带看一眼,如果存在可利用的AJP走私
就可以绕过一些权限验证从而进一步操作。
4 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!