利用ROP链突破DEP保护机制

本文详细介绍了如何利用Return-Oriented Programming (ROP)来绕过Data Execution Prevention (DEP)保护机制。通过实例展示了如何找到溢出点,控制EIP,构建ROP链,并最终利用VirtualProtect()函数改变内存权限,执行shellcode。
摘要由CSDN通过智能技术生成
@Puzzor         

本文旨在介绍如何利用ROP绕过DEP保护机制,也是学习过程中的总结

DEP保护机制即Data Execution Prevention,其分为软件DEP以及硬件DEP,下面所讨论的都是基于硬件DEP下的绕过方式。相关术语请自行学习。

所用实例为一存在溢出漏洞的程序,当处理某些文件时未能检查文件长度的限制,导致栈区溢出,若不开启DEP保护,则溢出后EIP可以跳转至栈区执行指令,而当添加了DEP保护后,由于栈区被标记为不可执行,故抛出Access violation (0xC00000005)错误,错误提示如下:


前面准备工作就不详细叙述了,假设我们现在已经找到了溢出点并且能够控制EIP指向任意地址,正如我所说的,我暂时将EIP控制为0x43434343



此时挂载调试器,停到中断点上。如下图所示,正如我们所设计的,EIP成功变为0x43434343



此时栈区情况如下图

基本情况就是这样,接下来正式讨论如何绕过DEP机制。我们都知道在PE文件内存在好多的Section,.Text Section,也就是指令区,存放了CPU所要执行的指令,而其它Section一般不会存放指令的。DEP的保护机制就是给.Text赋予Executable的属性,而其它区域是不具有这种属性的,这样一来,当我们在程序运行时想把我们的shellcode拷入堆栈区执行是不可能的。

正如我们的实例所展示的那样当EIP变为0x43

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值