diff --git a/fiveserver.config.js b/fiveserver.config.js deleted file mode 100644 index 23b68d3..0000000 --- a/fiveserver.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - php: "/usr/bin/php" -} \ No newline at end of file diff --git a/www/robots.txt b/ref/sujet.md similarity index 100% rename from www/robots.txt rename to ref/sujet.md diff --git a/config/base.sql b/server/config/base.sql similarity index 100% rename from config/base.sql rename to server/config/base.sql diff --git a/config/codes.txt b/server/config/codes.txt similarity index 100% rename from config/codes.txt rename to server/config/codes.txt diff --git a/config/creds.txt b/server/config/creds.txt similarity index 100% rename from config/creds.txt rename to server/config/creds.txt diff --git a/config/supervisord.conf b/server/config/supervisord.conf similarity index 100% rename from config/supervisord.conf rename to server/config/supervisord.conf diff --git a/docker/Dockerfile b/server/docker/Dockerfile similarity index 100% rename from docker/Dockerfile rename to server/docker/Dockerfile diff --git a/docker/docker-compose.yml b/server/docker/docker-compose.yml similarity index 100% rename from docker/docker-compose.yml rename to server/docker/docker-compose.yml diff --git a/www/.htaccess b/server/www/.htaccess similarity index 100% rename from www/.htaccess rename to server/www/.htaccess diff --git a/www/admin/loadnote.php b/server/www/admin/loadnote.php similarity index 100% rename from www/admin/loadnote.php rename to server/www/admin/loadnote.php diff --git a/www/admin/securenotes.php b/server/www/admin/securenotes.php similarity index 100% rename from www/admin/securenotes.php rename to server/www/admin/securenotes.php diff --git a/www/admin/uploadnote.php b/server/www/admin/uploadnote.php similarity index 100% rename from www/admin/uploadnote.php rename to server/www/admin/uploadnote.php diff --git a/www/confidential/uploads/OperationAlpha.txt b/server/www/confidential/uploads/OperationAlpha.txt similarity index 100% rename from www/confidential/uploads/OperationAlpha.txt rename to server/www/confidential/uploads/OperationAlpha.txt diff --git a/www/confidential/uploads/OperationBravo.txt b/server/www/confidential/uploads/OperationBravo.txt similarity index 100% rename from www/confidential/uploads/OperationBravo.txt rename to server/www/confidential/uploads/OperationBravo.txt diff --git a/www/confidential/uploads/OperationTourniquet.txt b/server/www/confidential/uploads/OperationTourniquet.txt similarity index 100% rename from www/confidential/uploads/OperationTourniquet.txt rename to server/www/confidential/uploads/OperationTourniquet.txt diff --git a/www/include/nav.php b/server/www/include/nav.php similarity index 100% rename from www/include/nav.php rename to server/www/include/nav.php diff --git a/www/index.php b/server/www/index.php similarity index 100% rename from www/index.php rename to server/www/index.php diff --git a/www/logout.php b/server/www/logout.php similarity index 100% rename from www/logout.php rename to server/www/logout.php diff --git a/server/www/robots.txt b/server/www/robots.txt new file mode 100644 index 0000000..e69de29 diff --git a/www/static/css/stylesheet.css b/server/www/static/css/stylesheet.css similarity index 100% rename from www/static/css/stylesheet.css rename to server/www/static/css/stylesheet.css diff --git a/www/static/img/background.gif b/server/www/static/img/background.gif similarity index 100% rename from www/static/img/background.gif rename to server/www/static/img/background.gif diff --git a/www/static/img/fallback.png b/server/www/static/img/fallback.png similarity index 100% rename from www/static/img/fallback.png rename to server/www/static/img/fallback.png diff --git a/www/static/img/logo.gif b/server/www/static/img/logo.gif similarity index 100% rename from www/static/img/logo.gif rename to server/www/static/img/logo.gif diff --git a/www/static/img/note-icon.png b/server/www/static/img/note-icon.png similarity index 100% rename from www/static/img/note-icon.png rename to server/www/static/img/note-icon.png diff --git a/writeup/writeup.md b/writeup/writeup.md new file mode 100644 index 0000000..2aa3543 --- /dev/null +++ b/writeup/writeup.md @@ -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** \ No newline at end of file