2021-01-30 08:43:04 +00:00
|
|
|
On a vu qu'il y avait un script php qui est execute par le binaire level06.
|
|
|
|
Cet executable prend en argument un fichier et transmet le contenue du fichier au script php.
|
|
|
|
Ce script php effectue plusieurs regex.
|
2021-01-27 14:34:35 +00:00
|
|
|
|
2021-01-30 08:43:04 +00:00
|
|
|
On a telecharge ce script pour l'indenter correctement et pouvoir un peu mieux le lire malgre les regex...
|
2021-01-27 14:34:35 +00:00
|
|
|
|
2021-01-30 08:43:04 +00:00
|
|
|
Apres quelque recherche sur les regex, preg_replace et /e en php, on se rend compte que la ligne :
|
|
|
|
$a = preg_replace("/(\[x (.*)\])/e", "y(\"\\2\")", $a);
|
2021-01-27 14:34:35 +00:00
|
|
|
|
2021-01-30 08:43:04 +00:00
|
|
|
est vulnerable, en effet le modifier /e fait que le deuxieme argument de preg_replace sera interprete comme une expression php
|
2021-01-27 14:34:35 +00:00
|
|
|
|
2021-01-30 08:43:04 +00:00
|
|
|
on remarque qu'on peut utiliser une commande shell en php avec shell_exec, il suffit donc d'entrer l'expression php
|
|
|
|
shell_exec(getflag)
|
|
|
|
dans la regex
|
2021-01-27 14:34:35 +00:00
|
|
|
|
2021-02-02 16:52:29 +00:00
|
|
|
il faut un ficher avec: [x {${shell_exec(getflag)}}]
|
|
|
|
puis rentrer ce fichier en argument du binaire level06
|
|
|
|
|
|
|
|
$ echo '[x {${shell_exec(getflag)}}]' > /tmp/exploit06 && ./level06 /tmp/exploit06
|
2021-01-27 14:34:35 +00:00
|
|
|
|
2021-01-30 08:43:04 +00:00
|
|
|
|