[Tips]关于CVE-2008-1054 SurgeMail 38k4 Buffer Overflow
by axis
2008-03-04
http://www.ph4nt0m.org
漏洞发生在 _lib_spawn_user_getpid 这个函数中
由于将环境变量循环拷贝导致溢出。
.text:00441BD8 loc_441BD8: ; CODE XREF: _lib_spawn_user_getpid+BDj
.text:00441BD8 mov ecx, [ebp+var_45C]
.text:00441BDE add ecx, 1
.text:00441BE1 mov [ebp+var_45C], ecx
.text:00441BE7
.text:00441BE7 loc_441BE7: ; CODE XREF: _lib_spawn_user_getpid+6Ej
.text:00441BE7 mov edx, [ebp+var_45C]
.text:00441BED mov eax, [ebp+arg_4]
.text:00441BF0 cmp dword ptr [eax+edx*4], 0 #这里的判断
.text:00441BF4 jz short loc_441C27
.text:00441BF6 mov ecx, [ebp+var_45C]
.text:00441BFC mov edx, [ebp+arg_4]
.text:00441BFF mov eax, [edx+ecx*4]
.text:00441C02 push eax ; char *
.text:00441C03 mov ecx, [ebp+var_20]
.text:00441C06 push ecx ; char *
.text:00441C07 call _strcpy #拷贝溢出
.text:00441C0C add esp, 8
.text:00441C0F mov edx, [ebp+var_20]
.text:00441C12 push edx ; char *
.text:00441C13 call _strlen
.text:00441C18 add esp, 4
.text:00441C1B mov ecx, [ebp+var_20]
.text:00441C1E lea edx, [ecx+eax+1]
.text:00441C22 mov [ebp+var_20], edx
.text:00441C25 jmp short loc_441BD8
.text:00441C27 ; ---------------------------------------------------------------------------
.text:00441BD8 mov ecx, [ebp+var_45C]
.text:00441BDE add ecx, 1
.text:00441BE1 mov [ebp+var_45C], ecx
.text:00441BE7
.text:00441BE7 loc_441BE7: ; CODE XREF: _lib_spawn_user_getpid+6Ej
.text:00441BE7 mov edx, [ebp+var_45C]
.text:00441BED mov eax, [ebp+arg_4]
.text:00441BF0 cmp dword ptr [eax+edx*4], 0 #这里的判断
.text:00441BF4 jz short loc_441C27
.text:00441BF6 mov ecx, [ebp+var_45C]
.text:00441BFC mov edx, [ebp+arg_4]
.text:00441BFF mov eax, [edx+ecx*4]
.text:00441C02 push eax ; char *
.text:00441C03 mov ecx, [ebp+var_20]
.text:00441C06 push ecx ; char *
.text:00441C07 call _strcpy #拷贝溢出
.text:00441C0C add esp, 8
.text:00441C0F mov edx, [ebp+var_20]
.text:00441C12 push edx ; char *
.text:00441C13 call _strlen
.text:00441C18 add esp, 4
.text:00441C1B mov ecx, [ebp+var_20]
.text:00441C1E lea edx, [ecx+eax+1]
.text:00441C22 mov [ebp+var_20], edx
.text:00441C25 jmp short loc_441BD8
.text:00441C27 ; ---------------------------------------------------------------------------
但是有个难点:
在覆盖到ebp或者SEH之前,就因为
cmp dword ptr [eax+edx*4], 0
jz short loc_441C27
的判断异常退出了
原因在覆盖过程中,会覆盖 ecx, edx
而eax指向当前栈中,这个加载地址是随机变化的,所以要使[eax+edx*4]不为0,同时payload里又不能出现0字节,很难控制。
所以这个漏洞个基本上只能dos,不能利用了。
也许哪位大牛有更好的办法?
没有评论:
发表评论