zoukankan      html  css  js  c++  java
  • 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把执行代码写入到可执行的内存页中。

  • 相关阅读:
    关于js计算非等宽字体宽度的方法
    [NodeJs系列]聊一聊BOM
    Vue.js路由管理器 Vue Router
    vue 实践技巧合集
    微任务、宏任务与Event-Loop
    事件循环(EventLoop)的学习总结
    Cookie、Session和LocalStorage
    MySQL 树形结构 根据指定节点 获取其所在全路径节点序列
    MySQL 树形结构 根据指定节点 获取其所有父节点序列
    MySQL 创建函数报错 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators
  • 原文地址:https://www.cnblogs.com/sideny/p/3479192.html
Copyright © 2011-2022 走看看