PHP Juggler

Catégorie: Web Difficulté: - Flag: CTFREI{PHP_Juggl1ng_1s_Fun}

Challenge

Description


J'ai oublié le flag, tu peux le retrouver ?

Lien: http://vps.ctfrei.fr:5800/

Solution

En visitant le site, on nous donne son code source :

<?php
include('flag.php');

if (isset($_POST['flag'])) {
    try {
        if (strcmp($_POST['flag'], $flag) == 0) {
            echo("GG ! Tu as trouvé le flag: <br>");
            echo($flag);
        } else {
            echo("...");
        }
    } catch (TypeError $e) {
        echo("GG ! Tu as trouvé le flag: <br>");
        echo($flag);
    }
    echo ("<br><br>");
}

highlight_file(__FILE__);
?>

Le titre du challenge nous donne un indice. Il faut exploiter ce qu'on appelle le Type Juggling en PHP. Cela consiste à tromper la comparaison entre 2 types de variables différents. Voici un tableau qui montre le résultat de ces comparaisons en fonction des types utilisés

C'est bien tout ça mais nous doit utilise la fonction strcmp en plus, et ça tombe bien puisque si l'on compare avec cette fonction un tableau et une chaîne de caractères, on génère une erreur et la fonction renvoie NULL. Et en jettant un oeil au tableau juste au dessus, NULL == 0 ça fait TRUE

On doit donc simplement passer un tableau, et comment on fait cela ? Au lieu de passer en POST simplement flag, on va passer flag[], PHP le convertira alors automatiquement en tableau

On a bien notre erreur générée par strcmp, puis notre flag puisque la condition a été validée

Dernière mise à jour

Cet article vous a-t-il été utile ?