去年在xctf还是在哪儿碰到过一个web题目是关于漏洞穿越的题目 , 后面查资料看到过一个相关的幽灵猫(ghostcat漏洞)没怎么实际的去怎么学习过,这次偶然间在freebuf看到了一下相关的详解 地址:Tomcat AJP文件包含漏洞(CVE-2020-1938) - FreeBuf网络安全行业门户,这次特地好好学习一下。
首先得知道tomcat 的结构
可以看到 一个 tomcat 就是一个 server 服务器 然后这个server可以有多个service (指的是抽象的逻辑层) ,而一个service里面还能有connecter 和container 还有jsp 引擎和日志之类的其他组件。
这个漏洞中的主要问题在connecter 和 container
现在说说这个漏洞主要的缺陷:由于Tomcat AJP协议设计上存在缺陷,攻击者通过Tomcat AJP Connector可以读取或包含Tomcat上所有webapp目录下的任意文件(AJP(Apache JServ Protocol)是定向包协议。因为性能原因,使用二进制格式来传输可读性文本。WEB服务器通过 TCP连接 和 SERVLET容器连接。)
好了基本都清楚的了解了问题在于conncter 和container,现在来说说这两个组件之间的ajp 通信
下图为conncter 接收请求数据包后的解析过程 ,之后会将解析后的交给container处理
container里面又有多个host(虚拟主机 )可以对应多个域名,
host下面还有多个context(相当于一个个的web应用)
而context 中还有多个wrapper (相当于servlet )
这边开始复现漏洞:
启动镜像:
docker run -d -p 8080:8080 -p 8009:8009 --name ghostcat duonghuuphuc/tomcat-8.5.32
运行脚本发现主机无法实现访问docker中的tomcat服务器
这边遇到了关于docker里面的tomcat无法实现端口访问的问题,然后找了很多的信息(比如如何将docker部署到宿主机同网段,端口映射之类的方法),解决方法如下:
(60条消息) 【Docker】Docker服务外部无法访问ubuntu docker外部无法访问MAXLZ的博客-CSDN博客
(60条消息) 如何让宿主机访问docker容器内的服务_Simple_IDE的博客-CSDN博客
大部分都是修改端口映射但是我觉得最重要的是需要重启一下电脑,(ps:我平时用的虚拟机从来不关机,后面找了很多的办法才想到重启一下试试)
这边终于可以实现主机访问tomcat了
可以看到我们用已有的poc已经拿到了该网站的web.xml源码
漏洞复现完成。