DEP
DEP(Data execution protect)数据执行保护,这个功能需要操作系统和硬件的共同支持才可以生效。DEP的原理就是在系统的内存页中设置了一个标志位,标示这个内存页的属性(可执行)。
在硬件上这个工作就交给了CPU来完成,intel CPU在内存页中设置了XD标志位,amd CPU在内存页中设置了NX标志位,都标志了内存页的执行权限。
在操作系统方面,windows xp sp2从开始支持DEP的功能,但是必须将操作系统运行在PAE(Physical address extension)模式下,即使用硬件的这个标志位。
WINXP SP2 默认 /NOEXECUTE = OPTIN;DEP只是对一些必须的windows程序和服务起效。
WIN2K3 SP1默认 /NOEXECUTE = OPTOUT;DEP对所有的windows程序和服务起效,除非是用户自己排除的程序。
ASLR(Address space layout randomization)windows系统中运行的同一个程序其模块加载的地址空间是随机的,也是防止恶意代码攻击的一种手段。(纯系统级别的实现)我们自己编写的程序或者链接库,可以通过设置一个链接选项,Project Property -> Configuration Properties -> Linker -> Advanced -> Randomized Base Address,来设置是否支持ASLR。
绕过DEP的方法:
直接利用程序中没有ASLR特性的模块,寻找能够利用的汇编指令,xchg eax, esp retn, pop ebx retn等等,找到这些特殊的指令,接下来就是构造一个适合这些指令使用的栈数据了,这个执行过程就利用原来模块的执行内存,我们的栈数据也仍然是作为数据使用,不会被DEP检测到。比如WinExec、system已经在程序中被调用,我们只需要将调用处的地址拿过来,放到ret语句中,并配置好适当的参数。这种方式非常巧妙,都不需要写入一堆代码到内存中,但是前提是你需要使用的API原来程序中都有。
|
调用参数 |
覆盖方向—> |
/bin/sh |
|
虚假的返回地址 |
||
|
返回地址 |
system函数的入口地址 |
|
|
EBP上层函数堆栈基址 |
溢出的变量覆盖区域, 在这里填充适当的数据, 作为system函数的参数。 (调用其他的API也是类似) |
|
|
异常处理代码入口地址 (如果函数设置异常处理) |
||
|
局部变量 |
有了上面执行API的条件,我们就可以利用以下方法,改变进程或者内存页的DEP属性。
1、通过调用API赋予内存可执行的权限,包括VirtualAlloc HeapCreate等函数,可以改变内存页的执行属性。
2、通过调用API取消系统对本进程的DEP检测,SetProcessDEPPolicy,但是使用这个函数需要满足条件:
# 操作系统是vista sp1、winxp sp3、win2k8
# 操作系统DEP的模式设置为OPTIN OPTOUT,如果是AlwaysON就没有办法了。
3、通过NT!NTSetInformationProcess函数关闭本进程的DEP检测,nt5.1都可以实现,vista版本也可以,但是vista sp1之后就不行了。
4、通过WriteProcessMemory把执行代码写入到可执行的内存页中。
DEP的更多相关文章
- 您不能在64-位可执行文件上设置DEP属性?
我是为dllhost.exe设置DEP时遇到了同样的情况.你需要选择64位系统对应的程序.64位系统:C:\Windows\SysWOW64\dllhost.exe32位系统:C:\Windows\S ...
- safeseh+dep保护绕过
[文章作者] :h_one [漏洞程序名称]:mplayer.exe [漏洞类型] :缓冲区溢出 [保护方式] :safeseh+dep [操作平台] ...
- OD: DEP - Ret2Libc via VirtualProtect() & VirtualAlloc()
一,通过 VirutalProtect() 修改内存属性绕过 DEP DEP 的四种工作模式中,OptOut 和 AlwaysOn 下所有进程默认都开启 DEP 保护,这里如果一个程序自身需要从堆栈中 ...
- OD: DEP & Ret2Libc
Data Execution Prevention,数据执行保护,专门用来弥补计算机对数据和代码混淆这一天然缺陷. DEP 的原理是将数据所在的内存页(默认的堆.各种堆栈页.内存池页)标记为不可执行, ...
- DEP受保护的问题(尤其是Outlook)
We see this issue quite regularly as we use MAPI and lots of our users run our application on TS. Of ...
- 文件保护DEP
文件保护DEP数据执行保护(DEP)引起的电脑故障一例 症状:双击桌面上的“我的电脑”.“我的文档”等,explorer.exe重新起动,反复如此,简单说就是“我的电脑”打不开,一双击桌面上就啥都没有 ...
- VS解决BEX错误但不能关闭DEP保存
报道近期计划BEX错误: 问题签名: 问题事件名称: BEX 应用程序名: Auth.exe 应用程序版本号: 0.0.0.0 应用程序时间戳: 546d9e0c 故障模块名称: Auth.exe 故 ...
- cat: can't open '/lib/modules/2.6.35.3-571-gcca29a0/modules.dep': No such file or directory
在使用modprobe 或者modinfo cat: can't open '/lib/modules/2.6.35.3-571-gcca29a0/modules.dep': No such fil ...
- 资金平台交易明细扩展开发-DEP
前言 支持农垦项目中,需要增加抓取银行接口传输数据,需求有两点:一是银企平台前置机需要增加扩展中行.农行数据字段.(代理账号.代理账户名称.代理银行) 二是EAS资金模块中的交易明细查询列表界面能够显 ...
- Go语言入门——dep入门
本文出现了大量maven的内容,更适合java程序员阅读,如果你的语言做依赖管理的方案与maven差异很大,可能在有些地方会不理解 从很久之前go语言在依赖解决和管理方面方案的匮乏就被不少人诟病.光指 ...
随机推荐
- PHP安全过滤函数
在PHP中,有些很有用的函数开源非常方便的防止你的网站遭受各种攻击,例如SQL注入攻击,XSS(Cross Site Scripting:跨站脚本)攻击等. 1. mysql_real_escap ...
- 添加外键式异常 1215-cannot add foreign key constranint
添加外键时报错,原因是添加外键的表的字段的字段类型不一致 比如我的第一张表id是int类型,添加约束的dep_id是bigint类型,所以报错,只要把两张表添加约束的字段类型改成统一的即可 本人大学生 ...
- istio1.0.2配置
项目的组件相对比较复杂,原有的一些选项是靠 ConfigMap 以及 istioctl 分别调整的,现在通过重新设计的Helm Chart,安装选项用values.yml或者 helm 命令行的方式来 ...
- VC++定义全局变量及extern用法
基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern有两 ...
- grpc & pb 环境配置
grpc 官方中文文档:http://doc.oschina.net/grpc?t=60140 grpc github仓库:https://github.com/grpc/grpc protobuf ...
- P2157 [SDOI2009]学校食堂Dining
题目描述 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数 ...
- day38
今日内容: 1.认识数据库 2.修改默认密码 3.常用操作指令 1.认识数据库 什么是MYSQL? 是一个关系型数据库管理系统,基于socket编写的C/S架构的软件 什么是数据库? 数据:用于记录事 ...
- handsontable合并项mergeCells应用及扩展
由于我这个项目主要是配置多表头信息,主要使用了handsontabel合并项功能. 但是,在该功能使用过程中发现了一些问题和一些自己根据需要做的一些扩展 $("#topFieldDiv&qu ...
- 20155229《网络对抗技术》Exp4:恶意代码分析
实验内容 使用schtasks指令监控系统运行 schtasks指令:允许管理员在本地或远程系统上创建计划任务. SCHTASKS /Create [/S system [/U username [/ ...
- 20155301 《网络攻防》 Exp5 MSF基础应用
20155301 <网络攻防> Exp5 MSF基础应用 基础问题 1.用自己的话解释什么是exploit,payload,encode 答:exploit就是利用一些工具的,用来收集目标 ...