在啃了CTFpwn这么久,强化了栈、初步入门堆章节后,可以逐步了解沙箱与金丝雀保护机制了,这俩是比较常见的保护机制,作用发挥巨大,当然学完这些不能直接让你去实战进行绕过多层保护,但是能让你有一个基础去学习当今更多的基于之前而衍生的出的保护机制的绕过。
在本章中,博主有参考了看雪学苑的学习资料。(其实我也不是全能的...)
文章比较短,大佬们选择性食用。
Canary绕过
泄露canary
金丝雀保护(Canary Protection)是一种安全机制,主要用于检测和防止缓冲区溢出攻击。它的核心原理是在栈帧中放置一个特殊的 值(称为"金丝雀值"),在函数返回前检查这个值是否被修改。
工作原理:
1. 放置金丝雀值:在函数调用时,在栈上返回地址之前放置一个随机值;
2. 检查金丝雀值:在函数返回前,验证这个值是否保持不变;
3. 检测溢出:如果值被修改,说明发生了缓冲区溢出,程序会立即终止。
金丝雀保护是纵深防御策略中的重要一环,虽然不能完全阻止所有攻击,但能显著提高攻击难度。
怎么泄露?
- 利用栈溢出泄露canary
Canary 以\x00 结尾,通过栈溢出覆盖canary 最低字节,之后输出输入内容时会连带将canary一同输出。
- 利用格式化字符串漏洞泄露canary。
由于canary 存储在栈上,因此很容易就可以利用格式化字符串漏洞泄露。
逐字节爆破
例子:
|
|
由于fork产生的子进程的与父进程相同,因此可以根据子进程是否打印报错信息来逐字节爆破canary。
