注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

且行且记录

点滴记录,行的更远!

 
 
 

日志

 
 

关于内核漏洞原因以及利用  

2013-02-20 14:42:35|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

看了一些内核漏洞方面的分析文章以及一些利用代码,可以知道它的利用步骤基本上差不多。

1、shellcode

大多数利用都是用来提权的,也就是用system进程的令牌替换掉原进程的令牌来达到提权目的的。

2、数据传递

从R3到R0传递数据是用DeviceIoControl函数来进行的,通过这个函数把R3可控的数据传递给位于

R0的驱动程序。但是win32k.sys驱动并不是用这个函数而是直接发消息就可以了。

如ms08025只用SendMessageW函数。

3、漏洞原因

大多数都是没有过滤可控数据或者过滤不完全或者整数溢出等原因,而使这些可控数据成可可控地址!

如溢出后ProbeForWrite函数检查长度为零绕过的ms08025,ProbeForWrite函数检查长度为零绕过的ms08066

a)任意数据可以写入任意地址:mov [reg],reg

Windows 内核漏洞 ms08025 分析

由于整数溢出

.text:BF86FB3B                 lea     esi, [eax+eax]    <- 注意这里,问题就在这里,此时 eax = unicode字符串的长度,
                                                        <- 当 eax = 0x80000000 的时候 eax + eax = 0x100000000,32位的寄存器
                                                        <- 被溢出了,esi = 0
。。。。。。

bf80a1d0 668910           mov     [eax],dx    <- 在这里,对前面传入的指针进行了2个字节的写操作,写入的数据为0

还有如Windows XP 核心驱动 secdrv.sys 本地权限提升漏洞

.text:00011D41                 mov     edi, [ebx+3Ch]  ; -> 在此之前没有对UserBuffer进行检查,直接复制数据到UserBuffer
.text:00011D44                 mov     ecx, ebp
.text:00011D46                 mov     eax, ecx
.text:00011D48                 shr     ecx, 2
.text:00011D4B                 rep movsd
.text:00011D4D                 mov     ecx, eax
.text:00011D4F                 and     ecx, 3
.text:00011D52                 xor     eax, eax
.text:00011D54                 rep movsb

 

b)常数写到任意地址的形式:mov [reg],XXX

瑞星Rav 核心驱动 memscan.sys 本地权限提升漏洞 

.text:00010BB9                 mov     eax, [eax+3Ch] ; eax = irp->UserBuffer
.text:00010BBC                 mov     dword ptr [eax], 1 ; eax所指向的地址被写入了1

还有如Symantec 核心驱动 symtdi.sys 本地权限提升漏洞

; eax = irp->UserBuffer 以前没有对irp->UserBuffer进行任何检查

.text:0003B7CA                 mov     ecx, dword_45544
.text:0003B7D0                 mov     [eax], ecx

.text:0003B7D2                 mov     edx, dword_45548
.text:0003B7D8                 mov     [eax+4], edx
.text:0003B7DB                 mov     cl, byte_4554C
.text:0003B7E1                 mov     [eax+8], cl

4、利用步骤

a)在DeviceIoControl前先构造好各种参数以及数据,使这些参数及数据满足漏洞条件

b)调用DeviceIoControl触发漏洞,也就是通过漏洞改写了内核数据,这里相当于HOOK

c)调用HOOK的函数,这里就是执行shellcode,提升权限

d)派生自己的进程

  评论这张
 
阅读(176)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017