首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缓冲区溢出堆栈金丝雀定位

缓冲区溢出堆栈金丝雀定位
EN

Stack Overflow用户
提问于 2020-07-11 20:44:20
回答 1查看 1.8K关注 0票数 0

我有一个可以利用缓冲区溢出攻击的二进制文件,但是它有一个堆栈金丝雀。

我可以通过一个gets()调用获得许多地址和值,但是我无法在pwndbg( gdb的版本)中定位堆栈金丝雀,所以我可以找出我得到的值是什么堆栈金丝雀。

我试着查看堆栈,但找不到它,并查看了一个已经可以利用它的脚本,它使用了一个金丝雀值(我指的是gets()泄露地址的索引),而我甚至在反汇编程序中都找不到。

EN

回答 1

Stack Overflow用户

发布于 2020-09-08 17:00:59

我在这里遗漏了一些关键的细节,但我会试着试一试。

首先,金丝雀不是在堆栈上,而是在堆栈帧之间:https://manybutfinite.com/img/stack/bufferCanary.png

谷歌的“堆栈金丝雀位置gcc”生成了几张图片,以帮助您更容易地理解这一机制。

其次,我不太清楚使用get()来读取是什么意思。获取()读取stdin并将其放入缓冲区。您将无法使用它来读取程序内存。

关于已经生效的脚本:我对此表示怀疑。

gcc博士(https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html):

在输入函数时初始化保护程序,然后在函数退出时进行检查。

可能是设法利用它的代码要么在二进制文件中关闭了堆栈保护程序,要么找到了另一种通过其他方式绕过这种保护的方法。例如,您可以溢出一个本地函数指针,而根本不触发堆栈保护程序。堆栈保护器只保护防止溢出到存储的RBP和RIP (32位: EBP和EIP),而不是防止溢出到局部变量。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62854389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档