文章总结: 文章系统讲解CTFPwn中两大高频考点:Canary绕过与UAF堆漏洞。Canary部分给出泄露-还原套路及64位exp模板;UAF部分剖析free后重用劫持函数指针流程并附经典利用脚本。文末指出堆块对齐、tcache、指针生命周期与libc差异四大新手坑,附200节实战教程福利。 综合评分: 87 文章分类: CTF,漏洞分析,二进制安全,WEB安全,实战经验
漏洞挖掘实战系列(第5期):Pwn专项(下) Canary绕过 + UAF堆漏洞,把Pwn从中等题打到稳定得分
原创
点击关注👉
网络安全学习室
2026年1月9日 10:33 湖南
上一期我们把“无保护栈溢出”讲透了,但真正的CTF Pwn题,保护机制越来越多:Canary、PIE、NX 基本是标配。
这一期我带你突破两个关键门槛:
- Canary 绕过(泄露 + 还原)
- UAF 堆漏洞(最常见的堆题入门点)
只要掌握这两个,你就能稳定拿下 Pwn 中等题,不再被保护机制劝退。
一、Canary 是什么?为什么能防栈溢出?
Canary 是 GCC 加的一种栈保护机制:
- 在栈上 buf 和 return address 之间插入一个随机值
- 函数返回前会检查这个值是否被改变
- 被改了就直接 crash(stack smashing detected)
所以你不能像之前那样直接覆盖 return address。
绕过思路只有一个:先泄露 Canary,再原样写回去。
二、Canary 绕过实战:泄露 Canary + 精准覆盖
下面用一个典型真题结构演示(CTF 2025 常见):
程序逻辑类似:
注意两点:
read读太多 → 可能溢出printf直接输出 buf → 可能泄露 Canary
1)泄露 Canary(关键步骤) 
Canary 的特点:
- 最后一个字节是 0x00(用来截断字符串)
- 前面 7 字节随机(64位)
利用 printf 泄露:
构造输入:
如果 buf 大小是 0x40,那么 printf 输出时会把 buf 后面的内容一起打出来,其中就包含 Canary。
泄露后你会得到类似:
Canary 就是那个以 00 结尾的值。
2)还原 Canary,构造 payload 
64位栈布局一般是:
buf → Canary → RBP → return address
所以 payload 结构是:
你只需要把泄露到的 Canary 原样写回去,就能绕过检测。
3)完整 exp(64位 Canary 绕过模板) 
记住:Canary 题 90% 都是“泄露 + 还原”,套路固定。
三、堆漏洞入门:UAF(Use After Free)最容易拿分
堆题比栈题更灵活,但 UAF 是最适合入门的堆漏洞,因为:
- 原理简单:释放后没清空指针,仍然被使用
- 利用简单:劫持指针 → 控制程序流程
- CTF 出现频率极高(几乎每场都有)
1)UAF 原理一句话 
程序执行顺序如下:
- malloc → 分配一块堆内存
- free → 释放这块内存(但指针没置空)
- 继续使用这块指针 → 访问已经被释放的内存 → UAF
你要做的就是:
- 让这块内存被重新分配到你可控的位置
- 然后通过原指针执行你布置的内容
四、UAF 实战:劫持函数指针(最常见打法)
下面是 CTF 真题中最常见的 UAF 结构:
漏洞点:func3() 调用了已经被 free 的 u->print。
利用思路 
- 调用 func1 → 分配 User
- 调用 func2 → free(u)
- 再次 malloc 一块同样大小的内存 → 这块内存会被分配到刚才 freed 的位置
- 你控制这块内存的内容 → 把 print 指针改成 system
- 调用 func3 → 执行 system(“/bin/sh”)
完整 exp(UAF 经典模板) 
这就是 UAF 的核心套路:free 后重新 malloc,把指针劫持成你想要的函数地址。
五、堆题新手最常踩的 4 个坑
- 没对齐堆块大小:malloc(0x20) 和 malloc(0x18) 分配的 chunk 不一样
- 没注意 tcache:新版本 glibc 会优先从 tcache 分配
- 没控制好指针:UAF 必须保证指针还能被程序访问
- 没处理 libc 版本差异:不同版本堆结构不同,exp 要微调
六、福利+互动
如果你觉得堆题难,其实是因为你没掌握“堆块生命周期”。
200节攻防教程,限免领!
想要的兄弟,关注我+在后台发“学习”,直接免费分享!
咱学漏洞挖掘和CTF,光看文章不够,这套教程里全是实战演示——从工具配置到漏洞利用,每一步都手把手教,跟着练就能上手!
(注:资源领取入口在公众号后台,关注后发“学习”自动弹链接)
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:网络安全学习室 点击关注👉《漏洞挖掘实战系列(第5期):Pwn专项(下) Canary绕过 + UAF堆漏洞,把Pwn从中等题打到稳定得分》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论