Natas 8
Level Goal
Username: natas8
Password: DBfUBfqQG69KvJvJ1iAbMoIpwSNQ9bWe
URL: http://natas8.natas.labs.overthewire.org
Si l'on se connecte à la page du challenge (curl http://natas8.natas.labs.overthewire.org -u natas8:DBfUBfqQG69KvJvJ1iAbMoIpwSNQ9bWe
) on a de nouveau un formulaire :
<form method=post>
Input secret: <input name=secret><br>
<input type=submit name=submit>
</form>
<div id="viewsource"><a href="index-source.html">View sourcecode</a>
Et le code source suivant associé :
<?
$encodedSecret = "3d3d516343746d4d6d6c315669563362";
function encodeSecret($secret) {
return bin2hex(strrev(base64_encode($secret)));
}
if(array_key_exists("submit", $_POST)) {
if(encodeSecret($_POST['secret']) == $encodedSecret) {
print "Access granted. The password for natas9 is <censored>";
} else {
print "Wrong secret";
}
}
?>
On peut noter que lorsqu'on envoie un mot de passe il est :
- encodé en base64
- inversé (par exemple
abc
devientcba
) - puis encodé en hexadécimal
Pour trouver le secret affiché dans le code source il faut donc appliquer les étapes précédentes dans un order inversé pour trouver le secret d'origine.
Dans un terminal on peut faire :
$ echo "3d3d516343746d4d6d6c315669563362" | xxd -r -p | rev | base64 --decode
oubWYf2kBq
L'enchainement de commande peut être décomposé comme suit :
echo "3d3d516343746d4d6d6c315669563362"
affiche le secretxxd -r -p
transforme de hexadécimal vers asciirev
inverse la chaine de caractèrebase64 --decode
décode la chaine en base64
Si on envoie ce mot de passe au serveur :
curl -d 'secret=oubWYf2kBq&submit=Send' -X POST http://natas8.natas.labs.overthewire.org -u natas8:DBfUBfqQG69KvJvJ1iAbMoIpwSNQ9bWe
On obtient :
Access granted. The password for natas9 is W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl