Cyber ​​Apocalypse 2025 - Cyber ​​Attack

· 3min · Juicecat
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

index.md-53.pngindex.md-54.png

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. index.md-55.png que nous pouvons vérifier comme tel: index.md-58.png

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 index.md-56.png Ceci est le code de attack-ip: index.md-57.png 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:

  1. Exploiter un ssrf dans attack-domain
  2. Demandez au serveur d'appeler 127.0.0.1/cgi-bin/attack-ip pour contourner la configuration Apache
  3. 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: index.md-69.png 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.

index.md-68.png

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 index.md-60.png

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 index.md-75.png

L'envoi de la charge utile valide nos soupçons SSRF index.md-61.png 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 index.md-64.png Et modifiez la charge utile en pipe en bash pour qu'il s'exécute réellement: index.md-73.png Ensuite, nous recevons un rappel avec le drapeau codé Base64! index.md-67.png