目录
  1. 1. 0x00 canary保护机制
  2. 2. 0x01 泄露canary
  3. 3. 0x02 修改canary
stack canary绕过思路

0x00 canary保护机制

我们知道,通常栈溢出的利用方式是通过溢出存在于栈上的局部变量,从而让多出来的数据覆盖ebp、eip等,从而达到劫持控制流的目的。然而stack canary这一技术的应用使得这种利用手段变得难以实现。

canary保护机制是在栈保护上则是在初始化一个栈帧时在栈底设置一个随机的canary值(最后两位必须是00),栈帧销毁前测试该值是否“死掉”,即是否被改变,若被改变则说明栈溢出发生,程序走另一个流程结束,以免漏洞利用成功。

如图var-c就是canary的地址,如果触发了栈溢出漏洞,还不知道canary的值,就会执行__stack_chk_fail函数。

0x01 泄露canary

泄露canary的方法有:

  • 通过格式化字符串漏洞来泄露canary的值
  • 通过栈溢出漏洞来泄露canary的值
  • 多进程程序的canary爆破
  • 利用__stack_chk_fail函数泄露信息

当然具体问题还要具体分析

0x02 修改canary

tls结构里面存储着 canary ,程序退出时,比对的就是tls结构里面的canary

修改 tls 里面的 canary 为我们伪造的即可绕过。

文章作者: nocbtm
文章链接: https://nocbtm.github.io/2018/10/24/stack-canary绕过思路/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 nocbtm's Blog
打赏
  • 微信
  • 支付宝