先checksec,发现开启了PIE,第一次遇到PIE的题有点懵了,虽然知道低三位16进制是不变的可以利用,但还是折腾了好久
image.pngIDA同样可以看到一处很明显的栈溢出,但是因为地址随机化,我们无法知道print_flag
函数的地址
进入select_func
函数可以看到,输入的s赋值给dest,如果dest是"one"那么将v3指向one函数,而dest的初始值是指向two函数
可以看一下two
函数跟print_flag
函数的地址,都是6xx结尾
所以我们可以只覆盖v3的低16位为'\xd8'就可以成功跳转到print_flag
函数了
exp:
from pwn import *
p = process('./pwn2')
payload = 0x1e*'a' + '\xd8'
p.sendline(payload)
p.interactive()
网友评论