Linux栈溢出攻防原理

本文探讨了Linux系统中的栈溢出防御措施,包括地址随机化、栈不可执行、栈保护机制以及Intel X64平台的参数存放方式变化。同时,也介绍了栈溢出攻击的三种方法:Shellcode、ReturnToLib和ReturnToProgramming,并分析了如何绕过防御机制。后续将深入分析Intel X64平台的ROP攻击。
摘要由CSDN通过智能技术生成

、前言

Linux下常用的拷贝函数(如strcpy、memcpy等)如果使用不规范,常常会导致栈溢出。也就是你的软件系统本身存在bug,这样就会成为别人攻击的目标。本文主要讲的是Linux系统如何给栈溢出增加防护网?攻击者又有什么手段绕过一层层防护网实现攻击?

 

2、栈溢出防御

2.1 地址随机化技术

Linux系统提供设置堆栈地址随机化技术,例如函数内部变量存在栈上,每次打印函数内部变量的地址,其值都是随机的。

 

用户可以通过读取或设置/proc/sys/kernel/randomize_va_space节点值对其属性进行修改。

 

其中0表示关闭地址随机化;2表示开启地址随机化。

 

Linux系统默认是开启了地址随机化技术的。

 

2.2 栈不可执行

当我们通过读取/proc/pid/maps会发现stack的权限是“rw-p”,这说明栈上的数据只有读写权限,没有执行权限。这样如果你把一段shellcode放到栈上,是无法执行的。

 

2.3 栈保护

在函数的入口和出口处加一段栈检测的汇编代码,用来检测rbp和返回地址是否被修改,这就是Linux的栈保护机制。

 

GCC编译的时候可以加-fstack-protector则开启栈保护机制,如果加上-fno-stack-protector则会取消栈保护机制。

 

可执行文件是否开启栈保护,可以objdump查看下汇编,如下是某函数的反汇编,可以确

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值