阻止栈溢出被利用的防护绕过思路

栈溢出漏洞是网络安全中的常见问题,攻击者通过构造特定输入,覆盖返回地址以控制程序执行流程。防护措施包括随机栈地址、栈溢出检测、栈不可执行保护等。然而,地址空间随机化和NX/W^X保护机制可以被绕过,如ReturntoLibc攻击利用已有的库函数执行代码。
摘要由CSDN通过智能技术生成

大家都熟悉的安全漏洞一般都是SQL注入漏洞、缓冲区溢出漏洞、格式化字符串漏洞、XXS跨站脚本漏洞,其中栈溢出漏洞作为缓冲区溢出漏洞的一种形式,在网安中还是比较常见的,本文将从栈溢出漏洞的原理、栈溢出漏洞利用方式及防护手段进行介绍。

栈溢出漏洞原理

栈溢出漏洞是指当程序向栈中写入数据时,超过了栈空间所规定的大小,导致数据覆盖了其他内存区域。攻击者可以通过精心构造输入数据,使得程序在执行返回指令时跳转到攻击者设定的指令序列上,以达到劫持程序控制流的目的。

栈溢出漏洞利用方式

找到能够刚好覆盖返回地址的缓冲区长度,填充Shellcode并找到Shellcode所在地址,将返回地址覆盖为Shellcode地址

防护手段

  • 随机栈地址,让攻击者无法知道shellcode地址,无处跳转
  • 检测栈溢出,检测到则报错退出
  • 栈上不能执行shellcode

接下来就是一些防护绕过思路

地址空间随机化防护绕过思路

1、如果未开启PIE,主程序不会随机化的,可绕过共享库随机化

2、×86_32架构下进行爆破(内存地址随机化粒度以页为单位:0x1000字节对齐)

3、内存地址随机化粒度以页为单位:0x1000 字节对齐

4、信息泄漏

5、在shellcode之前布置一长串nop指令 (nop sled通常跟爆破联系在一起,可以增加爆破概率)

6、堆喷 (Heap spray)

stack canary/cookie饶过思路

1、泄露Canary,每个线程不同两数的Canary都相同

2、只覆盖局部变量,不覆盖返回地址

3、修改Thread-local Storage中的Canary

栈不可执行保护思路

内存权限精细划分(可执行和可写二者不可兼得),见下图

 

NX/W^X/DEP绕过思路

(Return to Libc)攻击者只能执行已有代码,无法引入新代码,可以跳转到system(中执行,复用LIbc中大量函数)

下面是一个简单的脑图

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值