* added readme
* restructured archi
@ -1,3 +0,0 @@
|
||||
module.exports = {
|
||||
php: "/usr/bin/php"
|
||||
}
|
||||
0
server/www/robots.txt
Normal file
|
Before Width: | Height: | Size: 1.8 MiB After Width: | Height: | Size: 1.8 MiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 635 KiB After Width: | Height: | Size: 635 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
116
writeup/writeup.md
Normal file
@ -0,0 +1,116 @@
|
||||
### 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 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.
|
||||
|
||||
![[Screenshot From 2025-10-18 14-20-49.png]]
|
||||
|
||||
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.
|
||||
|
||||
![[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_ 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).
|
||||
|
||||
![[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** 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.)
|
||||
|
||||
![[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 qu’utilisateur `apache`. La prochaine étape consiste à effectuer l’escalade 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 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.
|
||||
|
||||
![[Screenshot From 2025-10-18 15-52-02.png]]
|
||||
|
||||
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.
|
||||
|
||||
![[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 d’un signe `=` en fin de contenu est caractéristique d’un 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**
|
||||