ctf-chal-ji/writeup/writeup.md
david 8b504ddc53 * added readme
* restructured archi
2025-10-24 14:45:20 +02:00

116 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### L'objectif : trouver un flag/code final.
Ce writeup sera séparé en différentes parties:
1. **Reconaissance**
2. **Exploitation**
3. **Foothold**
4. **Privesc**
Tout dabord, loutil qui vous sera utile dans presque tous vos CTF est **Nmap**. Concrètement, il scanne les ports dune machine (il y a **65 535** ports possibles), ce qui permet didentifier 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 didentifier les services.
![[Screenshot From 2025-10-18 14-20-49.png]]
Loption `-p-` demande à Nmap de scanner **tous** les ports (1 à 65 535) par défaut Nmap nexplore 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 mintéresse ici, cest le service HTTP sur le port **8080** : allons lexplorer pour voir ce quil propose.
![[Screenshot From 2025-10-18 14-23-59.png]]
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](https://book.hacktricks.wiki/fr/pentesting-web/sql-injection/index.html) :
```admin' ```
ou
```' OR 1=1 --```
![[Screenshot From 2025-10-18 14-24-56.png]]
Et voilà, succès : nous avons un accès **administrateur**.
La prochaine étape consiste à travailler le _foothold_ cest-à-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 lescalade de privilèges).
![[Screenshot From 2025-10-18 14-25-21.png]]
Comme vous pouvez le voir, il est possible de télécharger (uploader) des notes au format `.txt`.
![[Screenshot From 2025-10-18 14-30-10.png]]
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](https://www.revshells.com/))
![[Screenshot From 2025-10-18 14-37-06.png]]
On a réussi à téléverser un fichier **.php** exécutable par le serveur, là où un simple **.txt** naurait 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 dexé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 quil se connecte sur le port 9001.)
![[Screenshot From 2025-10-18 14-48-04.png]]
Nous allons maintenant cliquer sur le fichier que nous avons téléversé.
![[Screenshot From 2025-10-18 15-15-58.png]]
Nous avons établi une connexion sur la machine cible : nous sommes authentifiés en tant quutilisateur `apache`. La prochaine étape consiste à effectuer lescalade de privilèges (privesc).
![[Screenshot From 2025-10-18 17-25-45.png]]
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**.
![[Screenshot From 2025-10-18 15-58-28.png]]
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 :
![[Screenshot From 2025-10-18 15-43-32 1.png]]
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.
![[Screenshot From 2025-10-18 15-51-05 1.png]]
On commence par exécuter `sudo -l` : cette commande indique quelles commandes lutilisateur 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.
![[Screenshot From 2025-10-18 15-52-02.png]]
La possibilité dexé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 lexécution, on constate quon obtient des permissions root.
![[Screenshot From 2025-10-18 15-56-05 1.png]]
En accédant au répertoire `/root`, nous pouvons consulter le fichier final. La présence dun signe `=` en fin de contenu est caractéristique dun encodage Base64.
![[Screenshot From 2025-10-18 15-56-51 1.png]]
Rendons-nous sur Cyberchef afin de le décoder.
![[Screenshot From 2025-10-18 15-57-37.png]]
Le code final du challenge est : **84195**.
Félicitations, vous avez terminé votre premier CTF.
🎯 **La root est longue mais la voie est Libre**