新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 新闻中心 > 安全资讯 > 正文:联众世界游戏大厅ActiveX控件堆溢出漏洞

联众世界游戏大厅ActiveX控件堆溢出漏洞

新客网 XKER.COM 2007-10-19 来源: 绿盟科技 收藏本文

 

发布日期:2007-09-06

更新日期:2007-09-07

受影响系统:

GlobalLink GlobalLink 2.7.0.8

描述:

--------------------------------------------------------------------------------

BUGTRAQ ID: 25565

联众世界游戏大厅是联众世界自主开发的一款集棋牌、休闲、对战于一体的游戏客户端。

联众世界游戏大厅所安装的GLItemCom.DLL ActiveX控件过于信任用户输入,未检测用户提供的字符串长度,导致对象虚函数表指针被覆盖,从而获得系统控制权。

IE首先创建obj_vuln对象,位置恰好在obj_now对象下:

 

03803034   /$   56                                 PUSH ESI
03803035   |.   8BF1                             MOV ESI,ECX
03803037   |.   6A 58                            PUSH 58    ;   对象大小:58h,即88字节
03803039   |.   8366 10 00                    AND DWORD PTR DS:[ESI+10],0
0380303D   |.   8366 14 00                    AND DWORD PTR DS:[ESI+14],0
03803041   |.   8366 18 00                    AND DWORD PTR DS:[ESI+18],0
03803045   |.   C706 C4048103             MOV DWORD PTR DS:[ESI],038104C4
0380304B   |.   E8 2C370000                CALL 0380677C    ;   创建obj_vuln对象
03803050   |.   85C0                             TEST EAX,EAX
03803052   |.   59                                  POP ECX
03803053   |.   74 0A                            JE SHORT 0380305F
03803055   |.   56                                  PUSH ESI
03803056   |.   8BC8                             MOV ECX,EAX
03803058   |.   E8 390D0000                  CALL 03803D96    ;   初始化obj_vuln对象
0380305D   |.   EB 02                            JMP SHORT 03803061
0380305F   |>   33C0                             XOR EAX,EAX
03803061   |>   6A 08                            PUSH 8
03803063   |.   8946 08                          MOV DWORD PTR DS:[ESI+8],EAX    ;   保存
obj_vuln==>[ESI+8] 记住这个,后面要提到

然后进入SetInfo()流程:

 

03802F25   |> \56             PUSH ESI     ; /EvilString <=== 嘿嘿~
03802F26   |.   8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]     ; |
03802F29   |.   FF75 0C        PUSH DWORD PTR SS:[EBP+C]      ; |Arg7
03802F2C   |.   8D48 14        LEA ECX,DWORD PTR DS:[EAX+14]    ; |
03802F2F   |.   FF75 20        PUSH DWORD PTR SS:[EBP+20]    ; |Arg6
03802F32   |.   FF75 1C        PUSH DWORD PTR SS:[EBP+1C]    ; |Arg5
03802F35   |.   FF75 18        PUSH DWORD PTR SS:[EBP+18]    ; |Arg4
03802F38   |.   FF75 10        PUSH DWORD PTR SS:[EBP+10]    ; |Arg3
03802F3B   |.   FF75 F8        PUSH DWORD PTR SS:[EBP-8]    ; |Arg2
03802F3E   |.   FF75 F4        PUSH DWORD PTR SS:[EBP-C]    ; |Arg1
03802F41   |.   E8 7E010000    CALL 038030C4    ; \调用SetInfo()
F7跟进

跟进SetInfo(),会将EvilString填充到obj_now里面:

 

038030C4   /$   55                           PUSH EBP
038030C5   |.   8BEC                       MOV EBP,ESP
038030C7   |.   56                            PUSH ESI
038030C8   |.   8BF1                       MOV ESI,ECX
038030CA   |.   FF75 10                 PUSH DWORD PTR SS:[EBP+10]
038030CD   |.   B9 90568103          MOV ECX,03815690
038030D2   |.   FF75 0C                 PUSH DWORD PTR SS:[EBP+C]
038030D5   |.   FF75 08                  PUSH DWORD PTR SS:[EBP+8]
038030D8   |.   E8 DB040000         CALL 038035B8
038030DD   |.   FF75 20                 PUSH DWORD PTR SS:[EBP+20]
038030E0   |.   8D46 1C                 LEA EAX,DWORD PTR DS:[ESI+1C]
038030E3   |.   50                            PUSH EAX
038030E4   |.   E8 37350000           CALL 03806620
038030E9   |.   FF75 24                  PUSH DWORD PTR SS:[EBP+24]    ;   EvilString
038030EC   |.   8D46 3C                 LEA EAX,DWORD PTR DS:[ESI+3C]    ;   obj_now+0x3C 
obj_new偏移60字节处
038030EF   |.   50                            PUSH EAX                                  :  
038030F0   |.   E8 2B350000          CALL 03806620    ;   EvilString复制到obj_now+0x3C 
<== 问题出在这里,没有检测EvilString的长度.

执行完SetInfo()后,看堆里的情况:

 

$ ==>     03823D80       038104C4   ??     <=== obj_now的开头
___FCKpd___34       03823D84       03823D68   h=?
___FCKpd___38       03823D88       03823DE0   ??    
___FCKpd___3C       03823D8C       03823E48   H>?
___FCKpd___310      03823D90       00000001    ... 
___FCKpd___314      03823D94       00000001    ... 
___FCKpd___318      03823D98       00000001    ... 
___FCKpd___31C      03823D9C       00000000    ... .
___FCKpd___320      03823DA0       00000000    ... .
___FCKpd___324      03823DA4       00000000    ... .
___FCKpd___328      03823DA8       00000000    ... .
___FCKpd___32C      03823DAC       00000000    ... .
___FCKpd___330      03823DB0       00000000    ... .
___FCKpd___334      03823DB4       00000000    ... .
___FCKpd___338      03823DB8       00000000    ... .
___FCKpd___33C      03823DBC       41414141   AAAA   <=== EvilString 开头
___FCKpd___340      03823DC0       41414141   AAAA
___FCKpd___344      03823DC4       41414141   AAAA
___FCKpd___348      03823DC8       41414141   AAAA
___FCKpd___34C      03823DCC       41414141   AAAA
___FCKpd___350      03823DD0       41414141   AAAA
___FCKpd___354      03823DD4       41414141   AAAA    <=== obj_now的尾部:从3Ch到58h,覆盖了28字节
___FCKpd___358      03823DD8       41414141   AAAA    // 还要填充8字节.才能到obj_vuln
___FCKpd___35C      03823DDC       41414141   AAAA    // 原因估计是堆分配粒度是16字节
___FCKpd___360      03823DE0       0D0D0D0D    ... .    <=== obj_vuln的vmt_ptr(虚函数表指针)被覆盖!!!

当第2次调用SetInfo的时候,IE会先执行obj_vuln里的函数,但是obj_vuln的vmt_ptr已经被控制:

 

0380309F   /$   56                            PUSH ESI
038030A0   |.   8BF1                       MOV ESI,ECX
038030A2   |.   8B4E 08                  MOV ECX,DWORD PTR DS:[ESI+8]    ; ECX: obj_vuln 
还记得前面的[ESI+8]么?
038030A5   |.   C706 C4048103      MOV DWORD PTR DS:[ESI],038104C4
038030AB   |.   85C9                       TEST ECX,ECX
038030AD   |.   74 06                      JE SHORT 038030B5
038030AF   |.   8B01                       MOV EAX,DWORD PTR DS:[ECX]    ; [ECX]: vmt_ptr==>EAX
038030B1   |.   6A 01                      PUSH 1
038030B3   |.   FF10                        CALL DWORD PTR DS:[EAX]                   ;  
 <=== 控制!!!
038030B5   |>   8B4E 0C                 MOV ECX,DWORD PTR DS:[ESI+C]
038030B8   |.   5E                            POP ESI
038030B9   |.   85C9                        TEST ECX,ECX
038030BB   |.   74 06                       JE SHORT 038030C3
038030BD   |.   8B01                       MOV EAX,DWORD PTR DS:[ECX]
038030BF   |.   6A 01                      PUSH 1
038030C1   |.   FF10                       CALL DWORD PTR DS:[EAX]
038030C3   \>   C3                         RETN

<*来源:void (void@ph4nt0m.org)

链接:http://pstgroup.blogspot.com/2007/09/tipsgloballink-glitemcomdll-setinfo.html

*>

建议:

--------------------------------------------------------------------------------

厂商补丁:

GlobalLink

----------

目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.ourgame.com/

收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐