首页 > 其他 > 详细

绕过canary的方法——stack smash

时间:2021-07-26 09:11:54      阅读:28      评论:0      收藏:0      [点我收藏+]

原题找不到源码,这里就讲一下原理

条件:有栈溢出,最好是gets函数(栈溢出的空间比较大)

原理:当程序开启canary保护时若发生栈溢出则会调用canary_check_fail函数

void __attribute__ ((noreturn)) __stack_chk_fail (void)
{
__fortify_fail ("stack smashing detected");
}
void __attribute__ ((noreturn)) internal_function __fortify_fail (const char *msg)
{
/* The loop is added only to keep gcc happy. */
while (1)
__libc_message (2, "*** %s ***: %s terminated\n",
msg, __libc_argv[0] ?: "<unknown>");
}

可以发现输出了libc_arg[0]的字符串,这个字符串通常再main函数的栈里,只要找到gets函数栈与这个地址的偏移,再将libc_arg[0]改为我们所需要的内容的地址,就可以输出我们想要的内容

特殊情况:当bss段被覆盖,bss段映射到内存的时候其实映射了两份,找到另一份即可,用vmmap指令即可找到

参考文章:https://blog.csdn.net/qq_41202237/article/details/107628831

 

绕过canary的方法——stack smash

原文:https://www.cnblogs.com/p201921420037/p/15059712.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!