Cyber Apocalypse 2025 - Cyber Attack
Table of Contents
Cyber Attack (Web)
Pour ce défi, nous recevons une IP et nous recevons probablement le code source du site Web sur cette IP
En regardant le code, nous voyons plusieurs emplacements d'injection potentielle. Le site utilise les scripts CGI Python pour gérer les demandes, et un index.php de base sans exploits côté serveur sortant. La première chose qui me vient à l'esprit est l'injection de CRLF, car nous ne voyons aucune validation ni désinfection regex sur le nom de param, ainsi qu'elle est imprimée verbosément comme un en-tête.
que nous pouvons vérifier comme tel:
Cela fonctionne parce que même s'il imprime l'en-tête, nous injectons \r\n
, que nous pouvons ensuite injecter des en-têtes arbitraires dans
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
Ceci est le code de
attack-ip
:
Ici, nous voyons la même injection de commande avec
os.popen
, mais cette fois ce n'est pas protégé par un 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-ip
pour contourner la configuration Apache - Injecter une charge utile dans le
os.popen
En regardant le dockerfile qui est venu avec le défi, nous voyons plusieurs addons 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 à descendre des trous de lapin, mais je suis finalement tombé sur cela dans le documentation pour
mod_proxy_fcgi
. Vous remarquerez qu'il a une notation proxy:
particulière.
Avant de tester, je configure un tunnel accessible au public, donc je n'ai pas besoin de compter sur le collaborateur Ngrok ou Burp, j'hébergerai un simple serveur Web Python ici pour attraper des réponses
Alors maintenant, nous envoyons une charge utile aveugle pour cingler notre tunnel. Remarque Nous devons coder en double la demande de procuration, car il s'agit d'une deuxième demande imbriquée dans le premier
L'envoi de la charge utile valide nos soupçons SSRF
SSRF réalisé. Maintenant, nous passons à l'exploit. N'oubliez pas que nous avons déjà vu le code pour
attack-ip
, nous savons donc qu'il est facilement vulnérable d'injection de commande car il n'y a pas de regex le protégeant. Je vais créer index.html sur mon tunnel contenant un script pour exfiltrer l'indicateur
Et modifiez la charge utile en pipe en bash pour qu'il s'exécute réellement:
Ensuite, nous recevons un rappel avec le drapeau codé Base64!