zoukankan      html  css  js  c++  java
  • DEP学习

    SEH表的信息在内存中是加密存放的,所以突破它可能性不大······································································

    chick if this is a  valid handler 失败而告终  这是软件DEP的杰作

    种类:

    1)软件DEP  就是前面学习过的 SafeSEH 目的是阻止利用SEH的攻击  与CPU硬件无关  利用软件模拟实现DEP 对操作系统提供一定的保护。

    现在就知道了 SafeSEH的检验过程会检查异常处理函数是否处于非可执行上了吧。

    2)硬件DEP其实才是真正意义上的DEP,需要CPU支持,(AMD 称之为NX     INTEL称之为XD)

    操作系统通过设置内存夜的NX/XDsh属性标记,来指明不能从该内存执行代码。 标志0 ---该页面可以运行

    OPTIN: 默认将DEP保护应用于 WINODWS 系统组件 和 服务

    OPTOUT 为排除列表程序外的所有程序和服务启用DEP,也就是指定程序部启用DEP 默认无

    ALWAYSON 对所有进程启用DEP的保护  目前只有64位操作系统   64位总是开启 不可以被关闭  IE是32位程序

    ALWAYSOFF 对所有进程都禁用DEP


    解决方法  总结:

    1  覆盖SEH 去关闭DEP     SEH上放置 pop pop pop esp ret   nseh 放置关闭NX例程 

    暂无例子说明····

    0BADF00D   * pdep [-r <reg>] [-m <module>] [-n] [-o]
    0BADF00D                                  (look for dep bypass instructions such as pop pop pop esp ret)
    0BADF00D                                   You can optionally specify reg and module to filter on
    0BADF00D                                   Option -n : don't show pointers that contain null bytes
    0BADF00D                                   Option -o : don't show pointers from modules in the Windows folder
    2  覆盖返回地址    strcpy 对shellcode字符要检查x00
    Ret2Libc学习NtSetInformationProcess DEP

    3  覆盖返回地址   memcpy 对shellcode字符串无检查

    Ret2libc 利用 VitualProtect

    Ret2libc 利用 VirtualAlloc

    VirtualProtect 2方法 -direct ret-dep-easy rm to mp3

    利用可执行内存 实现  将代码复制进其中执行  暂无例子


    下面可以进行选择 OPTIN 和 OPTOUT


    还可以这样查看


    在VS2008中看到  默认启用DEP的



    还有在PE文件视角下      IMAGE_OPTIONAL_HEADER中的DllCharacteristics变量进行体现当它设置成为0x0100表示该程序采用 /NXCOMPAT 编译

    VISTA 及后续版本的操作系统上会自动启用 DEP保护

    这种保护石迄今为止  在本书中 我们遇得到的最有力保护机制

    保护局限:

    1)硬件CPU需要CPU支持,不是所有CPU都支持硬件DEP的支持

    2)由于兼容性的原因  WINDOWS不能对所有的进程开启 DEP保护,否则可能出现异常

    ATL,Active Template Library活动模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。

    EG: 一些第三方插件DLL   由于无法确认其是否支持DEP  对涉及一些DLL的程序不敢贸然开启DEP保护  .ATL7.1 + 以前版本的程序需要在数据页面上产生可执行代码,这种情况不能开启    DEP保护的

    3)/NXCOMPAT  编译选项  或者是 IMAGE_DLLCHARACTERISTICS_NX_COMPAT的设置,只对VISTA 以上的系统有效

           EG:   在XP SP3  等  这个设置会被忽略

    4)早期的系统   有动态关闭DEP的   API函数     


    64位下   有 ALWAYSON  对所有进程启用DEP保护,在这个模式下,DEP不可以被关闭  目前64位操作系统上才工作在  ALWAYSON模式下

    ALWATSOFF 对所有进程禁用DEP


    DEP保护对象是进程级别的,当加载模块的只要有一个模块不支持DEP,这个进程就不能贸然开启DEP,否则产生异常

    即使是WIN7下依然有很多程序没有启用DEP 想办法攻击未启用DEP保护的程序不失为一个简单有效的方法


    从 Windows XP SP2 开始,Windows 的 32 位版本使用下列功能之一:

    • 由 AMD 定义的 No-Execute Page-Protection (NX) 处理器功能。
    • 由 Intel 定义的 Execute Disable Bit (XD) 功能。


    在Vista / wnodws 2008 / windows 7 可以用 bcdedit 命令来修改设置

    BCDEdit(启动配置数据存储编辑器)命令用于修改Win7/Win8启动菜单,相对于WinXP等之前的系统是通过修改Boot.ini文件来实现对系统启动菜单的修改

    bcdedit /set nx OptIn

    bcdedit /set nx OptOut

    bcdedit /set nx AlwaysOn

    bcdedit /set nx AlwaysOff


    bcdedit  可以查看当前 NX 的值



          WriteProcessMemory 函数 可以写入 oleaut32.dll 这个区间为 R E  有一个问题,就是  WPM 调用会暂时把这个位置标记为可读,

    那么你用编码的 shellcode 将不会成功,坏字节也不会成功的,可以预先考虑在真正的shellcode 里面包含一些小  egghunter , 会调用

    VirtualProtect 去设置可读可写

           WPM 2  可以直接去写 WriteProcessMemory 函数中的 ZwWriteVirtualMemory 之后的位置,那么可以直接执行,但是要考虑 不会破坏kernel32.dll

    的结构,因为shellcode 要用到kernel32.dll中的函数。所以要注意shellcode的大小限制




     Message=ROP Chain for VirtualProtect() [(XP/2003 Server and up)] :


     Message=ROP Chain for SetInformationProcess() [(XP/2003 Server only)] :


     Message=ROP Chain for SetProcessDEPPolicy() [(XP SP3/Vista SP1/2008 Server SP1, can be called only once per process)] :


     Message=ROP Chain for VirtualAlloc() [(XP/2003 Server and up)] :

    !mona rop 可以查询 有关ROP的信息


    !pvefindaddr ropcall   查看无 ASLR SAFESEH 供逃过DEP 的函数调用



    发现了WIN7 不同系统中的DLL 基址 与函数的差是不变的,那么各个 retn 的地址差也是不变的,那么构造ROP就很简单了。


















  • 相关阅读:
    mysql 5.7 安装手册(for linux)
    Git服务器分类
    Git服务器安装详解及安装遇到问题解决方案
    使用git进行版本管理
    Git 忽略一些文件不加入版本控制
    Windows下搭建基于SSH的Git服务器
    linux系统下mysql跳过密码验证登录和创建新用户
    阅读《不止代码》之心得分享
    Sonar安装和常见问题解决
    Eclipse安装Sonarlint插件
  • 原文地址:https://www.cnblogs.com/zcc1414/p/3982492.html
Copyright © 2011-2022 走看看