Detours改动段属性漏洞
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改动段属性漏洞的更多相关文章
- Detours修改段属性漏洞
v:* { } o:* { } w:* { } .shape { }p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-botto ...
- 如何在Sql2008中获取表字段属性和注释?
如何在Sql2008中获取表字段属性和注释? select b.[value] from sys.columns a left join sys.extended_properties b on a. ...
- linux内核段属性机制【转】
本文转载自:https://github.com/TongxinV/oneBook/issues/9 linux内核段属性机制 以subsys_initcall和module_init为例 subsy ...
- Lucene03--字段属性
Lucene03--字段属性 1.Field 1.1 Field相当于Javabean的属性. 1.2 不同的Field的构造方法参数不一样: 大多数Field的构造函数有三个参数: a)第一个参 ...
- 【Unity3D自学记录】利用代码改动图片属性(Inspector)
这段时间一直都在打包资源,然后每次导入都要改图片的属性.真是麻烦,所以一直在寻找一键改动而且打包的方法. 最终让我找到了,太坑人了. 依据自己的需求改代码哦,相信大家都能看明确. 核心部分: Text ...
- Oracle获取干净的建表DDL语句,不含其它存储、表空间、段属性
早上一个同事资讯怎么获取到建表语句而且是不带存储那种SQL.Oracle自己提供了一个函数DBMS_METADATA.GET_DDL,但是获取到的建表语句含有存储.表空间.以及一些其他段的属性.如图: ...
- navicat的使用(测试库和正式库同步)以及用plsql改表字段属性
说明:数据库的操作,除了查询,最好先做好备份,比如数据同步.更新.修改或删除之类的: netstat -antp 查看mysql端口 firewall -cmd --list-all 查看防 ...
- 从Sql server 2008获取表字段属性信息,注释信息
select b.[value] from sys.columns a left join sys.extended_properties b on a.object_id=b.major_id ...
- oracle添加表字段跟修改表字段属性
添加字段 alter table mid_contactinfo add(status varchar(20),createdate varchar(50),modifydate varchar(50 ...
随机推荐
- HDU 3507
斜率DP入门题.推荐看看这篇http://www.cnblogs.com/ka200812/archive/2012/08/03/2621345.html 看过之后,自己思考,发现有些不妥之处就是,其 ...
- cocos2D(六)----CCLayer
一个游戏中能够有非常多个场景,每一个场景里面又可能包括有多个图层,这里的图层一般就是CCLayer对象.CCLayer本身差点儿没什么功能.对照CCNode,CCLayer可用于接收触摸和加速计输入. ...
- Android开发之控制手机音频
本实例通过MediaPlayer播放一首音乐并通过AudioManager控制手机音频.关于AudioManager的具体解释可參照:Android开发之AudioManager(音频管理器)具体解释 ...
- 文件重命名之动态改动ListView里指定Item中的组件属性
在Android实际开发过程中常常会遇到,改动ListView中某一项的值.怎样达到这一目的呢? 方法主要有两种: 第一种方式:当ListView中某一项的值发生变化之后,又一次载入数据已达到更新Li ...
- Spring整合TimerTask实现定时任务调度
一. 前言 近期在公司的项目中用到了定时任务, 本篇博文将会对TimerTask定时任务进行总结, 事实上TimerTask在实际项目中用的不多, 由于它不能在指定时间执行, 仅仅能让程序依照某一个频 ...
- [yueqian_scut]Android多点触控技术和应用框架
Android多点触控技术跟Linux输入子系统紧密相关.本文将从应用的角度说明Android多点触控技术的接口和应用. 一.多点触控场景分析 网络上有关Android多点触控技术的文章多见于两点拉伸 ...
- How do I UPDATE from a SELECT in SQL Server?
方法1 https://stackoverflow.com/questions/2334712/how-do-i-update-from-a-select-in-sql-server UPDATE T ...
- 【POJ 2828】Buy Tickets
[题目链接] http://poj.org/problem?id=2828 [算法] 离线用线段树维护序列即可 [代码] #include <algorithm> #include < ...
- 移动端H5页面编辑器开发实战--经验技巧篇
很久前的写的文章了,转载下发到这里 原本地址: https://blog.csdn.net/tech_meizu/article/details/52484775
- SQL语句之transaction
http://blog.csdn.net/xbc1213/article/details/50169935 案例: begin tran --定义一个存储错误新的变量 执行一条语句 set @sumE ...