Rating:

Nous arrivons sur une page où il est possbile d'uploader des fichiers. Ceux-ci sont toujours renommer avec une extension `.txt`
Il était possible leak le code source avec un LFI dans la page pour afficher nos fichiers.

Le 1er flag dans un comment dans le source de index.php.

Dans les fichiers source, on remarque que la page `admin.php` appelle un `SetupController` si le fichier `config.php`n'existe pas. Ce controlleur permet de choisir le mot de passe admin. Se connecter comme admin nous donnera un 2è flag.

Comme notre cookie était un objet php sérialisé. Il fallait y injecter un `UploadController` avec “config/config.php” dans son array files. Comme le destructeur de ce controlleur supprime tous les fichiers contenu dans `files`, cela supprimait le fichier de config et nous permettait de choisir le mot de passe admin.

Ensuite, dans `GetCountController`, qui est appelé sur la page admin, il y avait un `shell_exec` qui fait essentiellement

`ls -l $_GET["path"] | wc -l`

Les seuls caractères permis étaient entre 0x28 `(` et 0x7D `}`. Ceci exclut les espaces.
Avec un `;` on termine la requête et on liste le contenu du dossier obtenant ainisi le nom du fichier flag. Puis on pouvait avoir le contenu avec http://xn--rr8h.ctf/admin.php?act=GetCountController&path=;cat+*

On a alors le 3è flag!