Bugku Overflow Writeups
检查文件
pwndbg> checksec |
放入IDA Pro中
int __fastcall main(int argc, const char **argv, const char **envp) |
主函数中定义了一个char
类型数组s
,首先,memset()
函数将char类型数组s的前0x30
字节初始化为0,之后,read()
函数以s作为缓存区读取了0x100
个字节的数据
我们继续在IDA中寻找,发现存在一个get_shell_()函数,地址为0x400751
函数的返回值使用system()函数执行了cat flag
命令,这样可以直接得到flag
这样我们就有了思路:输入0x30个字节的数据覆盖s,再输入8个字节的数据覆盖栈底指针rbp
,然后将返回值修改为get_shell_()函数的地址
或者一个更直接的思路,我们在pwndbg中调试,先生成一个长度为200的随机字符串,然后将程序run起来
我们将随机数据输入后程序崩溃,观察到原先的内容都被我们输入的随机数据所覆盖,rsp
的地址直接被覆盖为haaaaaaa
(换算成Hex是0x6161616161616168),计算得出偏移量是56
Exp如下:
from pwn import * |