v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-font-kerning:1.0pt;}

Detours改动段属性漏洞

受影响的软件及系统

Detours3.0和之前版本号

简单介绍

这个问题将其定位为一个漏洞可能不太合适,更可能是Detours的一个BUG,可是由于该缺陷会造成漏洞利用变得easy,因此将其定义为漏洞。其主要问题就是Detours在使用过程中会将之前的可运行段改动为可写,可是改动完之后,没有将段属性改动回来。

漏洞危害

一些安全软件出于安全考虑。会把安全模块注入到IE,Office等软件里面。而非常多注入模块里面使用Detours库对系统API进行Hook操作。Detours库进行Hook操作时(DetourAttachEx函数)会将相关模块的PE头(详细是DosHeader。不可写段)改动为可写可读可运行,然后写入一些特殊数据。可是后面没有改动成原始属性。这样就会破坏这些模块的段属性,造成一些其他漏洞利用时减少了绕过DEP的难度。

漏洞原理

Detours进行Inline Hook操作时,会在相关模块PE头的DosHeader里面写入一个特殊的Detours!字符串(用于标识该模块被Hook过)。由于一般DosHeader是不可写的。因此Detours会先把该处改动为可写可读可运行属性,然后再改动。

可是改完之后。Detours并没有恢复这块内存的原始属性,这样就导致这块内存一直处于可写可读可运行属性。这样问题就产生了。

能够调试下IE试试。一般来说IEXPLORE模块本身不会被Hook。我们看看它的基址的内存属性。

0:040> lm

start    end       module name

00f50000 01016000   IEXPLORE   (deferred)

0:040> !address00f50000

Failed to map Heaps (error 80004005)

Usage:                 Image

Allocation Base:       00f50000

Base Address:          00f50000

End Address:           00f51000

Region Size:           00001000

Type:                  01000000  MEM_IMAGE

State:                 00001000   MEM_COMMIT

Protect:               00000002   PAGE_READONLY

More info:             lmv m IEXPLORE

More info:             !lmi IEXPLORE

More info:             ln 0xf50000

而mshtml则是安全软件最喜欢Hook的模块。看看它的基址的内存属性。

0:040> lmvmmshtml

start    end       module name

63d70000 64df3000   MSHTML     (deferred)

Image path:C:\windows\system32\MSHTML.dll

Image name: MSHTML.dll

Timestamp:        ThuJun 19 08:14:41 2014 (53A22B71)

CheckSum:        010838FF

ImageSize:       01083000

File version:     11.0.9600.17207

Product version:  11.0.9600.17207

File flags:       0 (Mask3F)

File OS:         40004 NT Win32

File type:        2.0 Dll

File date:       00000000.00000000

Translations:     0409.04b0

CompanyName:      MicrosoftCorporation

ProductName:      InternetExplorer

InternalName:     MSHTML

OriginalFilename:MSHTML.DLL

ProductVersion:   11.00.9600.17207

FileVersion:      11.00.9600.17207(winblue_gdr_escrow.140618-1157)

FileDescription:  Microsoft (R) HTML Viewer

LegalCopyright:   © Microsoft Corporation. Allrights reserved.

0:040> !address63d70000

Usage:                 Image

Allocation Base:       63d70000

Base Address:           63d70000

End Address:           63d71000

Region Size:           00001000

Type:                  01000000  MEM_IMAGE

State:                 00001000   MEM_COMMIT

Protect:               00000040   PAGE_EXECUTE_READWRITE

More info:             lmv m MSHTML

More info:             !lmi MSHTML

More info:             ln 0x63d70000

问题非常明显吧!

有源码,改动也非常easy啦,一句代码的事情,把它的原始属性通过VirtualProtect恢复就可以。

改动完之后。大家能够再调试看看,是不是属性变成了PAGE_READONLY。留给大家去尝试吧。

參考文档

[1] Detours http://research.microsoft.com/en-us/projects/detours/

Detours改动段属性漏洞的更多相关文章

  1. Detours修改段属性漏洞

    v:* { } o:* { } w:* { } .shape { }p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-botto ...

  2. 如何在Sql2008中获取表字段属性和注释?

    如何在Sql2008中获取表字段属性和注释? select b.[value] from sys.columns a left join sys.extended_properties b on a. ...

  3. linux内核段属性机制【转】

    本文转载自:https://github.com/TongxinV/oneBook/issues/9 linux内核段属性机制 以subsys_initcall和module_init为例 subsy ...

  4. Lucene03--字段属性

    Lucene03--字段属性 1.Field 1.1  Field相当于Javabean的属性. 1.2  不同的Field的构造方法参数不一样: 大多数Field的构造函数有三个参数: a)第一个参 ...

  5. 【Unity3D自学记录】利用代码改动图片属性(Inspector)

    这段时间一直都在打包资源,然后每次导入都要改图片的属性.真是麻烦,所以一直在寻找一键改动而且打包的方法. 最终让我找到了,太坑人了. 依据自己的需求改代码哦,相信大家都能看明确. 核心部分: Text ...

  6. Oracle获取干净的建表DDL语句,不含其它存储、表空间、段属性

    早上一个同事资讯怎么获取到建表语句而且是不带存储那种SQL.Oracle自己提供了一个函数DBMS_METADATA.GET_DDL,但是获取到的建表语句含有存储.表空间.以及一些其他段的属性.如图: ...

  7. navicat的使用(测试库和正式库同步)以及用plsql改表字段属性

    说明:数据库的操作,除了查询,最好先做好备份,比如数据同步.更新.修改或删除之类的: netstat -antp   查看mysql端口 firewall -cmd --list-all    查看防 ...

  8. 从Sql server 2008获取表字段属性信息,注释信息

    select   b.[value] from sys.columns a left join sys.extended_properties b on a.object_id=b.major_id  ...

  9. oracle添加表字段跟修改表字段属性

    添加字段 alter table mid_contactinfo add(status varchar(20),createdate varchar(50),modifydate varchar(50 ...

随机推荐

  1. centos7.0 安装日志--图文具体解释-python开发环境配置

    centos7.0公布之后,就下载了everthing的DVD镜像.今天有时间,所以决定在vbox底下体验一番--- 上图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nk ...

  2. RecyclerView的点击事件

    RecyclerView 一.简单介绍 这个是谷歌官方出的控件.使我们能够很easy的做出列表装的一个控件,当然recyclerview的功能不止这些,它还能够做出瀑布流的效果,这是一个很强大的控件, ...

  3. [JavaEE]Hibernate 所有缓存机制详解

    Hibernate提供的一级缓存 hibernate是一个线程对应一个session,一个线程可以看成一个用户.也就是说session级缓存(一级缓存)只能给一个线程用,别的线程用不了,一级缓存就是和 ...

  4. Vmware VM共享

    打开虚拟机,设置,选项点击共享文件夹 点击启用,将电脑windows的目录添加过来 进入终端即可以进入

  5. Activiti Modeler 5.22.0整合到Spring项目

    转载 https://blog.csdn.net/u010411264/article/details/71480354

  6. UNP学习笔记2——从一个简单的ECHO程序分析TCP客户/服务器之间的通信

    1 概述 编写一个简单的ECHO(回复)程序来分析TCP客户和服务器之间的通信流程,要求如下: 客户从标准输入读入一行文本,并发送给服务器 服务器从网络输入读取这个文本,并回复给客户 客户从网络输入读 ...

  7. Mysql-slowlog

    MySQL慢查询日志是MySQL提供的一种日志记录,用来记录执行时长超过指定时长的查询语句,具体指运行时间超过 long_query_time 值的 SQL 语句,则会被记录到慢查询日志中. long ...

  8. java开发移动端之spring的restful风格定义

    https://www.ibm.com/developerworks/cn/web/wa-spring3webserv/index.html

  9. [NOIP补坑计划]NOIP2016 题解&做题心得

    感觉16年好难啊QAQ,两天的T2T3是不是都放反了啊…… 场上预计得分:100+80+100+100+65+100=545(省一分数线280) ps:loj没有部分分,部分分见洛咕 题解: D1T1 ...

  10. 使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务

    作者: Yi Ming Huang, 软件工程师, IBM Dong Fei Wu, 软件工程师, IBM Qing Guo, 软件工程师, IBM 出处: http://www.ibm.com/de ...