5.5 KiB
L'objectif : trouver un flag/code final.
Ce writeup sera séparé en différentes parties:
- Reconaissance
- Exploitation
- Foothold
- Privesc
Tout d’abord, l’outil qui vous sera utile dans presque tous vos CTF est Nmap. Concrètement, il scanne les ports d’une machine (il y a 65 535 ports possibles), ce qui permet d’identifier les services qui tournent sur la cible. Chaque port correspond à un service : par exemple, le port 22 est souvent utilisé par SSH, 80 pour un site web HTTP, et 443 pour HTTPS.
Pour commencer, on va lancer un scan basique pour repérer les ports ouverts et tenter d’identifier les services.
L’option -p- demande à Nmap de scanner tous les ports (1 à 65 535) par défaut Nmap n’explore que les 1 000 ports les plus courants.
Dans notre scan, on a trouvé trois ports ouverts :
- 22 → SSH (connexion distante)
- 443 → site web en HTTPS
- 8080 → site web en HTTP
Ce qui m’intéresse ici, c’est le service HTTP sur le port 8080 : allons l’explorer pour voir ce qu’il propose.
Comme vous pouvez le voir, la page affiche un formulaire de connexion.
La première idée qui me vient est de tenter des injections SQL rappel : les injections SQL constituent une grande part des failles des applications web.
Il existe de nombreux payloads ; vous pouvez en trouver une bonne collection ici :
admin'
ou
' OR 1=1 --
Et voilà, succès : nous avons un accès administrateur.
La prochaine étape consiste à travailler le foothold c’est-à-dire transformer cet accès en une connexion sur laquelle on peut lancer des commandes sur la machine cible (explorer le système, récupérer des informations, et préparer l’escalade de privilèges).
Comme vous pouvez le voir, il est possible de télécharger (uploader) des notes au format .txt.
Essayons quelques contournements pour téléverser un fichier PHP par exemple en le nommant fiche.php.txt.
Dans ce fichier, on placera un reverse shell en PHP (on peut en trouver un exemple sur revshell)
On a réussi à téléverser un fichier .php exécutable par le serveur, là où un simple .txt n’aurait rien fait.
Ce fichier nous donne un foothold : en exécutant du code PHP côté serveur, on peut lancer une connexion vers notre machine et contrôler un shell.
Avant d’exécuter le fichier sur la cible, démarrez un listener sur votre poste (pwncat ou netcat). Par exemple avec netcat:
nc -lvnp 9001
(Lancez ensuite le script PHP côté serveur pour qu’il se connecte sur le port 9001.)
Nous allons maintenant cliquer sur le fichier que nous avons téléversé.
Nous avons établi une connexion sur la machine cible : nous sommes authentifiés en tant qu’utilisateur apache. La prochaine étape consiste à effectuer l’escalade de privilèges (privesc).
En parcourant un peu le serveur, nous avons trouvé un fichier creds.txt contenant une entrée au format username:mot_de_passe_chiffré. En examinant davantage, on constate que le mot de passe est haché en MD5.
En soumettant le hachage à CrackStation, nous avons retrouvé le mot de passe en clair : secure Avec ces identifiants (agent:secure), nous pouvons nous connecter au compte utilisateur agent.Pour établir une session distante, lancez une connexion SSH vers la machine cible, par exemple :
Vous pouvez également utiliser ssh avec la commande ssh user@ip Maintenant on va essayer de trouver un moyen d'avoir encore plus de privilèges.
On commence par exécuter sudo -l : cette commande indique quelles commandes l’utilisateur peut exécuter avec les privilèges maximaux (root).
Dans notre cas, la sortie montre que vim est autorisé via sudo en tant que root.
Nous nous rendons alors sur GTFOBins pour vérifier si vim peut être utilisé comme vecteur de privilege escalation. En recherchant vim sur GTFOBins, on découvre plusieurs méthodes documentées pour obtenir un shell avec les droits root.
La possibilité d’exécuter vim via sudo rend ce binaire vulnérable à une escalade de privilèges, il peut être utilisé pour obtenir un shell avec les droits root.
![Screenshot From 2025-10-18 15-55-07.png][]
On teste la première commande, pense bien à appeler /usr/bin/vim. Après l’exécution, on constate qu’on obtient des permissions root.
En accédant au répertoire /root, nous pouvons consulter le fichier final. La présence d’un signe = en fin de contenu est caractéristique d’un encodage Base64.
Rendons-nous sur Cyberchef afin de le décoder.
Le code final du challenge est : 84195.
Félicitations, vous avez terminé votre premier CTF.
🎯 La root est longue mais la voie est Libre















