Detours修改段属性漏洞
v:* { }
o:* { }
w:* { }
.shape { }p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 10.5pt; font-family: "Calibri", "sans-serif" }
p.MsoHeader,li.MsoHeader,div.MsoHeader { margin: 0cm; margin-bottom: .0001pt; text-align: center; border: none; padding: 0cm; font-size: 9.0pt; font-family: "Calibri", "sans-serif" }
p.MsoFooter,li.MsoFooter,div.MsoFooter { margin: 0cm; margin-bottom: .0001pt; font-size: 9.0pt; font-family: "Calibri", "sans-serif" }
a:link,span.MsoHyperlink { color: blue; text-decoration: underline }
a:visited,span.MsoHyperlinkFollowed { color: purple; text-decoration: underline }
p.MsoAcetate,li.MsoAcetate,div.MsoAcetate { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 9.0pt; font-family: "Calibri", "sans-serif" }
span.Char { }
span.Char0 { }
span.Char1 { }
span.SpellE { }
span.GramE { }
.MsoChpDefault { }
div.WordSection1 { }table.MsoNormalTable { font-size: 10.5pt; font-family: "Calibri", "sans-serif" }
Detours修改段属性漏洞
受影响的软件及系统
Detours3.0和之前版本
简介
这个问题将其定位为一个漏洞可能不太合适,更可能是Detours的一个BUG,但是因为该缺陷会造成漏洞利用变得容易,因此将其定义为漏洞。其主要问题就是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
问题很明显吧!
有源代码,修改也很容易啦,一句代码的事情,把它的原始属性通过VirtualProtect恢复即可。
修改完之后,大家可以再调试看看,是不是属性变成了PAGE_READONLY,留给大家去尝试吧。
参考文档
[1] Detours http://research.microsoft.com/en-us/projects/detours/
Detours修改段属性漏洞的更多相关文章
- Detours改动段属性漏洞
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- 通过修改VAD属性破除锁页机制
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 技术学习来源:火哥(QQ:471194425) 注释:因为自己的知 ...
- oracle 创建表、删除表、添加字段、删除字段、表备注、字段备注、修改表属性
1.创建表 create table 表名( classid number() primary key, 表字段 数据类型 是否允许为空(not null:不为空/null:允许空) 默认值(defa ...
- 自己动手丰衣足食之轮播图一动态修改marginTop属性实现轮播图
引言 学习jQuery有年头了,刚开始学习时自己动手写过轮播图,放的久了以至于忘了大致思路了.现在转而做前端,抽空把jquery轮播图拿出来写一写,把各种思路都自己练习练习,这里主要使用动态修改mar ...
- jQuery修改class属性和CSS样式
jQuery修改class属性和CSS样式 class属性修改 类属性即class属性,规定类名. 用类选择器规定样式的时候,需要为元素指定类名,即class属性的值. 注意每个HTML元素只有一个c ...
- 关于Entity Framework采用DB First模式创建后的实体批量修改相关属性技巧
Entity Framework采用DB First模式创建实体是比较容易与方便的,修改已创建的实体在个数不多的情况下也是没问题的,但如果已创建的实体比较多,比如10个实体以上,涉及修改的地方比较多的 ...
- [Effective JavaScript 笔记]第32条:始终不要修改__proto__属性
__proto__属性很特殊,它提供了Object.getPrototypeOf方法所不具备的额外能力,即修改对象原型链接的能力. 避免修改__proto__属性的最明显的原因是可移植性的问题.并不是 ...
- ArcMap10.1修改要素属性字段
ArcMap10.1修改要素属性字段 问题描述:在ArcMap10.1中编辑要素属性表时,遇到输入字段值的长度超过字段最大长度时,ArcMap会抛出“基础DBMS错误[ORA-12899:value ...
- 如何在Sql2008中获取表字段属性和注释?
如何在Sql2008中获取表字段属性和注释? select b.[value] from sys.columns a left join sys.extended_properties b on a. ...
随机推荐
- 学习Android路上的一些感慨和总结,慢慢来,比较快!
学习Android路上的一些感慨和总结,慢慢来,比较快! 一直想对自己的学习路程做一个总结,来告别某一个阶段的过去,迎接某一个阶段的来临,一直抽不出时间来,于是零零散散的写了点-,到现在,也已经积攒了 ...
- Android更新UI的几种方法
在Android开发过程中,常需要更新界面的UI.比如网络请求操作.一些耗时操作都不能放在UI线程中运行的,需要放在子线程,而子线程又不能更新UI界面,这是我们需要引入一个Handler,消息处理机制 ...
- JAVA面向对象-----值交换(基本数据类型 数组类型 对象的值 字符串的)
JAVA面向对象-–值交换 基本数据类型交换 数组类型交换 对象的值交换 字符串的值交换 恩,没错,又是贴图,请大家见谅,我也是为了多写几个文章,请大家谅解. 字符串的值交换: 交换值失败. 这个文章 ...
- (一三〇)UITextField的光标操作扩展
简介 在iOS开发中,有时候需要完全自主的定义键盘,用于完整的单词输入,例如计算机应用中,需要一次性的输入sin(,在移动光标时要完整的跳过sin(,在删除时也要完整的删除,这就需要对光标的位置进行精 ...
- Dynamics CRM 为Visual Studio 2015安装CRM Developer Toolkit
从CRM2015的SDK以后Tools的文件夹里就没有了DeveloperToolkit,而DeveloperToolkit还是停留在VS2012版本,这对于我们这种用新版本的童鞋来说比较头疼,我本地 ...
- 巨星陨落 - Jim Gary
偶然在微软Research中搜论文时搜到了神牛Jim Gary的paper,看着照片有点眼熟,貌似在买过的哪本书中见过.于是就饶有兴致地看着Jim的生平介绍,结果- "Dr. Gray j ...
- Tomcat内核之类加载器工厂
Java虚拟机利用类加载器将类载入内存,以供使用.在此过程中类加载器要做很多的事情,例如读取字节数组.验证.解析.初始化等.而Java提供的URLClassLoader类能方便地将jar.class或 ...
- Android开发学习之路--UI之ListView
这里再学习写android的ListView,其实我们都使用过ListView,就像手机的联系人,就是用的ListView了.下面就实现下简单的ListView吧,首先是xml文件中添加相关的代码: ...
- 【一天一道LeetCode】#226. Invert Binary Tree
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 来源:http ...
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(二十)
接上一篇文章,我们现在来实现篮框的感应器. 所谓感应器,就是在物体接触到的时候做出反应的节点.我们需要将感应器放在篮框底部,这样子弹接触感应器的时候,我们就知道子弹坠入了篮框,从而得分. 为了放置子弹 ...