Cyber Apocalypse 2025 - Cyberattaque
Table of Contents
Cyberattaque (web)
Pour ce défi, nous recevons une adresse IP et probablement le code source du site Web sur cette IP.


En regardant le code, nous voyons plusieurs emplacements d’injection potentielle. Le site utilise des scripts python cgi pour gérer les requêtes et un index.php de base sans exploit côté serveur. La première chose qui nous vient à l'esprit est l'injection CRLF, car nous ne voyons aucune validation ou désinfection d'expression régulière sur le paramètre de nom, ainsi que son impression verbeuse en tant qu'en-tête.
ce que l'on peut vérifier ainsi :

Cela fonctionne car pendant l'impression de l'en-tête, nous injectons \r\n, dans lequel nous pouvons ensuite injecter des en-têtes arbitraires.
De plus, nous voyons un autre script apparemment protégé dans cgi-bin, ce qui implique que nous devons d'abord exploiter attack-domain avant d'attaquer attack-ip.
Voici le code pour attack-ip :
Ici, nous voyons la même injection de commande avec os.popen, mais cette fois il n'est pas protégé par une regex, ce qui signifie que cela devrait être notre objectif final.
Nous devons donc :
- Exploiter un SSRF dans
attack-domain - Demandez au serveur d'appeler
127.0.0.1/cgi-bin/attack-ippour contourner la configuration Apache - Injectez une charge utile dans le
os.popen
En regardant le fichier docker fourni avec le défi, nous voyons plusieurs modules complémentaires Apache délibérément activés, ce qui me rend curieux :
J'ai passé un temps long à essayer des chemins d'exploitation alternatifs et à parcourir des terriers de lapin, mais je suis finalement tombé sur cela dans le documentation pour mod_proxy_fcgi. Vous remarquerez qu'il a une notation particulière proxy:.

Avant de tester, j'ai mis en place un tunnel accessible au public afin de ne pas avoir besoin de compter sur un collaborateur ngrok ou burp. J'hébergerai ici un simple serveur Web Python pour récupérer les réponses.

Alors maintenant, nous envoyons une charge utile aveugle pour envoyer une requête ping à notre tunnel. Notez que nous devons encoder deux fois la requête proxy, car il s'agit d'une deuxième requête imbriquée dans la première.

L'envoi de la charge utile valide nos soupçons SSRF
SSRF atteint. maintenant nous passons à l'exploitation. N'oubliez pas que nous avons déjà vu le code de attack-ip, nous savons donc qu'il est facilement vulnérable à l'injection de commandes puisqu'aucune expression rationnelle ne le protège. Je vais créer index.html sur mon tunnel contenant un script pour exfiltrer le drapeau
Et modifiez la charge utile pour qu'elle soit dirigée vers bash afin qu'elle s'exécute réellement :
Ensuite, nous recevons un rappel avec le drapeau encodé en base64 !
