概述
canary是一种很流行的栈保护机制。
函数在开始时往往会在栈底插入一个值,在函数结束时,取出这个值和原值进行比对 判断栈溢出是否发生了
canary值通常在linux下取 fs:[0x28] 处的值
在发生错误时,程序会跳转到 __stack_chk_fail 函数处
canary的最低字节总是’\x00’,目的是为了截断字符串
虽然canary是非常简单高效的防护手段,仍然有许多手段可以绕过
这篇文章会写下我自己遇到的canary的绕过方法
1. brute force
如果我们能直接覆盖到canary所在的位置,我们可以一次覆盖一个字节,byte to byte 得把canary爆破出来
这样爆破的次数能大大减少,爆破canary的可行性大大提高
例题可以看