记录第一次简单的栈溢出

首先在ubuntu中使用checksec命令查看文件类型和权限

可以看到是32位程序,所以我们在windows中使用ida打开,找到main函数,使用F5转换成为高级语言。

main函数只有一个vulnerable函数可能存在问题,双击进入查看。

发现其使用gets函数向一个buffer数组里传入数据,此处存在明显的栈溢出问题。

同时我们看到有一个get_shell函数,其地址是0x08048522,我们只需要向栈中写入超量数据,使 0x08048522覆盖掉vulnerable函数的返回地址,就可以获得一个shell,进而就拿到了flag。下面我们去ubuntu下操作。

输入gdb进入pwndbg调试环境,在main函数打一个断点。然后run一下,几次步过之后s步进进入vulnerable函数。 然后我们输入正常数据AAAAAAAA进行测试,回车之后输入stack查看栈内情况。

可以看到此时 vulnerable函数的返回地址存放在0xffffd17c地址单元中,所以我们需要用上面的get_shell函数的入口地址0x08048522将其覆盖。0xffffd17c减去输入数据的起始地址0xffffd168,一共为20个字节,这20个字节我们可以随意填充垃圾数据。接下来我们就可以退出pwngdb去写攻击脚本了。

io = process("./ret2text")//打开与本地文件的交互

io.recvline()//接受一行数据
io.recv()//接受数据

io.sendline()//发送一行数据
io.recv()//发送数据

io.interactive()//进入交互模式

这一次简单的栈溢出就完成啦

猜你喜欢

转载自blog.csdn.net/z671514087/article/details/124485676