Access
Catégorie: Web Difficulté: - Flag: CTFREI{b1g_w3b_ch4ll?}
Challenge
Description
Je viens d'apprendre ce qu'était Nginx, j'espère que j'ai pas laissé de vuln connue liée à Nginx comme une typique misconfiguration...
Enfin bon, dans tous les cas mon flag devrait être safe je pense !
ATTENTION: PAS BESOIN ET INTERDICTION D'UTILISER DES OUTILS DE SCAN/FUZZING (nmap, ffuf, gobuster, dirb, etc). Leur utilisation risque de vous faire bannir temporairement du challenge !
Attention, le format du flag est bien: CTFREI{flag_ici}
, avec CTFREI écrit en majuscules.
Ce challenge tourne sur un docker et n'est pas disponible
Solution
Utilisons Burp Suite pour faciliter l'étude des requêtes réseau.
Le challenge parle de mauvaises configurations NGINX, la plus connue consiste à ajouter ".." à la fin d'un fichier duquel nous ne sommes pas censés pouvoir accéder.

On découvre le dossier 1mp0ss1bl3_p4th_t0_gu3ss
à la racine. Dans celui-ci, il y a un index.php
et son code source nous est montré

$file = $_GET['file'] ?? 'index.php';
// Je dis ça je dis rien mais mon flag est tranquille au chaud dans /tmp/flag.txt :p
if ($file === 'index.php'){
echo file_get_contents($file);
echo 'Hmm, que faire ici ?';
} else {
if ($file === 'flag.txt' || $file === '/tmp/flag.txt') {
echo 'Bien tenté, mais j\'ai pas dit que je t\'avais autorisé à voir mon fichier "flag.txt"...';
exit;
}
$content = file_get_contents($file);
if (preg_match('/CTFREI/', $content)) {
echo 'Accès refusé ! Tu n\'auras pas mon flag si facilement !';
} else {
echo $content;
}
}
On peut lire un fichier à l'aide du paramètre file
mais nous ne pouvons pas passer directement /tmp/flag.txt et le fichier que nous lisons ne peut pas contenir le mot CTFREI.
Il faut passer par un wrapper PHP, pour encoder en base64 par exemple. Voici une solution :
php://filter/convert.base64-encode/resource=/tmp/flag.txt

Dernière mise à jour
Cet article vous a-t-il été utile ?