Niveau 22

Natas 22

Level Goal

Username: natas22
Password: chG9fbe1Tq2eWVMgjYYD1MsfIvN461kJ
URL: http://natas22.natas.labs.overthewire.org

En se connectant à la page du challenge 22 (curl http://natas22.natas.labs.overthewire.org -u natas22:chG9fbe1Tq2eWVMgjYYD1MsfIvN461kJ) on accède à une page vide. Si l'on regarde le code source associé, on peut voir deux blocs de PHP différents :

<?
session_start();

if(array_key_exists("revelio", $_GET)) {
    // only admins can reveal the password
    if(!($_SESSION and array_key_exists("admin", $_SESSION) and $_SESSION["admin"] == 1)) {
    header("Location: /");
    }
}
?> 

Puis :

<?
    if(array_key_exists("revelio", $_GET)) {
    print "You are an admin. The credentials for the next level are:<br>";
    print "<pre>Username: natas23\n";
    print "Password: <censored></pre>";
    }
?> 

Le fonctionnement de la page est le suivant ; si on rajoute le paramètre revelio à l'url, deux choses doivent se produire :

De fait il est à priori impossible d'avoir accès au mot de passe : il faut indiquer le paramètre revelio pour pouvoir l'afficher, mais cela revient à être redirigé vers la racine du site avant qu'il soit affiché.

Pourtant, la redirection mise en place via un header est simplement une indication renvoyée aux navigateurs des visiteurs pour les rediriger mais peut ne pas être suivi.

D'ailleurs curl ne suit pas les redirections par défaut ce qui signifie qu'une simple requête avec le paramètre revelio dans l'url peut nous permettre de trouver le mot de passe :

curl http://natas22.natas.labs.overthewire.org/?revelio -u natas22:chG9fbe1Tq2eWVMgjYYD1MsfIvN461kJ

On obtient la réponse suivante :

You are an admin. The credentials for the next level are:
Username: natas23
Password: D0vlad33nQF0Hz2EP255TP5wSW9ZsRSE