canary 详解

2022-03-22

概述

canary是一种很流行的栈保护机制。

函数在开始时往往会在栈底插入一个值,在函数结束时,取出这个值和原值进行比对 判断栈溢出是否发生了

canary值通常在linux下取 fs:[0x28] 处的值

在发生错误时,程序会跳转到 __stack_chk_fail 函数处

canary的最低字节总是’\x00’,目的是为了截断字符串

虽然canary是非常简单高效的防护手段,仍然有许多手段可以绕过

这篇文章会写下我自己遇到的canary的绕过方法

1. brute force

如果我们能直接覆盖到canary所在的位置,我们可以一次覆盖一个字节,byte to byte 得把canary爆破出来

这样爆破的次数能大大减少,爆破canary的可行性大大提高

例题可以看

网址