Canary攻击
Canary 攻击
简述
- canary 是用来保护栈,防止栈溢出的。
- 对 canary 这玩意主要有 4 种攻击方式。
- 在 cbctf 中遇到了一种很神奇的攻击方式,所以总结一下 canary 的攻击
canary 泄漏
- canary 开头一般是
\x00
,为了防止读到值,但是在某些情况下,我们能覆盖掉这个值,导致 canary 泄漏
canary 爆破
- 需要条件:程序不能崩溃,所以一般需要有子线程参与
- 模板:
ssp leak
详情见另一篇博客:http://longque.xyz/index.php/archives/11/
canary 覆盖
其实 canary 是在程序运行前在 _libc_start_main
的时候被赋值的,它一般是被写在了 fs:0x28
的位置,这个位置其实是 tls 段的,可以通过 pwndbg 查看:
而很明显,这个段是可以修改的,所以就延伸出了修改 canary 存储位置从而导致绕过 canary 的方式。