PHP Juggler
Catégorie: Web Difficulté: - Flag: CTFREI{PHP_Juggl1ng_1s_Fun}
Challenge
Description
Ce challenge tourne sur un docker et n'est pas disponible
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 ?