栈溢出基础

本文深入探讨栈溢出攻击的基础,包括Stack Canary机制及其绕过方法,并提供一个简单的栈溢出题目实例,引导读者理解如何利用栈溢出获取shell。
摘要由CSDN通过智能技术生成

🚀 优质资源分享 🚀

学习路线指引(点击解锁) 知识定位 人群定位
🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

栈溢出基础

之前已经介绍了C语言函数调用栈,本文将正式介绍栈溢出攻击。

当函数调用结束时,将发生函数跳转,通过读取存放在栈上的信息(返回地址),跳转执行下一条指令。通过栈溢出的方式,可以将返回地址覆盖为攻击指令的地址,这样函数调用结束后,将跳转到攻击指令继续执行。

Stack Canary

canary是可以比矿工更早发现煤气泄露的金丝雀,有预警作用。canary是栈上的一个随机数,在程序启动时生成并保存在比函数返回地址更低的位置。由于栈溢出是从低地址向高地址覆盖,所以要想覆盖到返回地址,则必须先覆盖canary。

看一个存在栈溢出可能性的C语言代码canary.c:

// canary.c
# include 

int main(void)
{
    char buf[10];
    scanf("%s", buf);
    return 0;
}

将canary.c正常编译成64位程序canary64,用checksec检查会发现已经开启了栈保护(Stack: Canary found),这时,如果出现栈溢出,则程序会抛出错误stack smashing detected。如果不想启用栈溢出保护,可以在编译时加上选项-fno-stack-protector。我们用gdb查看一下canary64的部分反汇编代码。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

[虚幻私塾】

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值