首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绕过Stack Canary通过返回地址

绕过Stack Canary通过返回地址
EN

Security用户
提问于 2016-03-06 23:22:44
回答 1查看 9.8K关注 0票数 6

我在测试一个带有堆栈金丝雀保护的简单C程序。我试图通过覆盖函数的返回地址和覆盖main的地址来绕过保护。我正在用目标程序中函数的地址覆盖它。我得到了以下结果,这使我相信攻击是可能的:

它检测到了smash,但它似乎试图跳入目标函数,即"yo“。我试图操纵它试图访问的任何地址,但没有运气。

我的问题是,还可能有进一步的剥削吗?它是否由于SIGSEGV (即访问0x1010.)而终止?或者是金丝雀的发现?

这个想法来自于这个文章

该方案:

EN

回答 1

Security用户

发布于 2017-08-20 18:25:33

由于金丝雀的发现,它即将结束。仅仅因为GDB显示堆栈帧,包括您的其他返回地址,并不意味着代码执行就会到达-- GDB只是读取堆栈上的地址(“解除堆栈”)来向您显示信息。只有当您成功地从所有这些函数返回时,您才会到达yo,但是由于__stack_chk_fail导致程序死亡而不返回,所以不会发生这种情况。

要绕过堆栈金丝雀,您几乎需要泄漏、猜测或粗暴地强制执行金丝雀值,查找任意的写入(例如,在EIP上写入而不覆盖金丝雀),或者在堆栈金丝雀处理程序中找到可利用的bug。

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

https://security.stackexchange.com/questions/116654

复制
相关文章

相似问题

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