首页
社区
课程
招聘
[旧帖] [原创]唯舞独尊OL溢出漏洞分析(可以把服务器上的人都踢下线) 0.00雪花
发表于: 2008-2-9 13:21 4927

[旧帖] [原创]唯舞独尊OL溢出漏洞分析(可以把服务器上的人都踢下线) 0.00雪花

2008-2-9 13:21
4927
这几天躲在美国,在家里闷的打电动
唯舞独尊这个OL是Jolin代言的,所以一直在关注
客户端Do.exe是 Release Build - Jan 14 2008的版本,成贴时是最新的
我在这里呼吁大家不要转载我的图片,视频以及本文
禁止使用本文中的内容做坏事,一切后果由使用者自负


言归正传
这个漏洞是聊天协议中对聊天内容的长度判断不严格导致的
利用这个漏洞至少可以实现一个Dos,也可以冒充别人说话



先来看一下发送聊天的过程
004EC9B4     52                     push edx
004EC9B5     8D8424 34010000        lea eax,dword ptr ss:[esp+134]
004EC9BC     50                     push eax
004EC9BD     6A 0C                  push 0C
004EC9BF     C68424 A1010000 00     mov byte ptr ss:[esp+1A1],0
004EC9C7     E8 34B10C00            call Do.005B7B00


4EC9C7这里可以看到发送聊天的明文状态,一共三个参数
void __stdcall sub_4EC9C7(DWORD protocol, LPBYTE buf, WORD length)
{
   ...
}

在4EC9C7下断,随便发句聊天test, 断下看具体内容
注意堆栈
0013EBF4       0000000C                        protocol,表示聊天的命令码
0013EBF8       0013ED30     ASCII "123456"     buf, 封包内容
0013EBFC       6574001B                        length, 现在长度是0x1B

在数据窗口中查看封包内容
0013ED30  31 32 33 34 35 36 00 00 00 00 00 00 00 00 00 09  123456..........
0013ED40  00 07 00 00 1B 00 74 65 73 74 00                 ....test......

+0x00 处的123456 是我的角色名字
+0x14 处的WORD 是0x1B,这个值-0x16就是聊天内容的长度(这点后面会再讲)
+0x16 处是聊天内容的开始

通过封包内容至少有三点可以利用
1. 修改封包中的聊天发送者
2. 修改聊天类型
3. 修改聊天长度或内容

第1点已经成功了,也就是在发聊天包时,把发送者的名字改成任何名字,服务器正常接受,有PP有真相


第2点没有尝试 :)
第3点实验如下

把聊天长度的封包改大,改成0x222,即发送的聊天包如下
0013ED30  31 32 33 34 35 36 00 00 00 00 00 00 00 00 00 09  123456..........
0013ED40  00 07 00 00 22 02 74 65 73 74 00                 ....test......


发送出去后,服务器会把这个聊天包发给大厅内的所有玩家,当然也包括我自己

下面是客户端对收到聊天包的处理
004BCE49     8B5D 0C                mov ebx,dword ptr ss:[ebp+C]
004BCE4C     33C0                   xor eax,eax
004BCE4E     B9 40000000            mov ecx,40
004BCE53     8D7C24 18              lea edi,dword ptr ss:[esp+18]
004BCE57     F3:AB                  rep stos dword ptr es:[edi]
004BCE59     B9 40000000            mov ecx,40
004BCE5E     8DBC24 18020000        lea edi,dword ptr ss:[esp+218]
004BCE65     F3:AB                  rep stos dword ptr es:[edi]
004BCE67     B9 40000000            mov ecx,40
004BCE6C     8DBC24 18010000        lea edi,dword ptr ss:[esp+118]
004BCE73     F3:AB                  rep stos dword ptr es:[edi]
004BCE75     0FB74B 14              movzx ecx,word ptr ds:[ebx+14]    +0x14处的WORD 的长度取出          
004BCE79     83E9 16                sub ecx,16                        前面说的这个WORD-0x16就是聊天长度
004BCE7C     8BC1                   mov eax,ecx
004BCE7E     C1E9 02                shr ecx,2
004BCE81     8D73 16                lea esi,dword ptr ds:[ebx+16]     +0x16处是聊天内容的开始
004BCE84     8DBC24 18010000        lea edi,dword ptr ss:[esp+118]    目的地址是局部变量,位于esp+0x118
004BCE8B     F3:A5                  rep movsd                         将聊天内容copy到目的地址
004BCE8D     8BC8                   mov ecx,eax
004BCE8F     0FBF43 12              movsx eax,word ptr ds:[ebx+12]
004BCE93     83E1 03                and ecx,3
004BCE96     83F8 05                cmp eax,5
004BCE99     F3:A4                  rep movsb


看到了吧,聊天长度没有经过判断就直接拿去memcpy
向上翻到这个函数的头,可以发现
004BCC40     55                     push ebp
004BCC41     8BEC                   mov ebp,esp
004BCC43     83E4 F8                and esp,FFFFFFF8
004BCC46     81EC 14030000          sub esp,314

这个函数开辟的局部变量长度大约是 0x314
也就是说我们只要copy大约0x314-0x118 约等于0x200 长度就溢出了
我们先前实验是0x222,减去0x16后,足够了

有PP有真相


即使是Dos,如果有人发一个恶意的大喇叭,可能一个服务器的人全要掉线啦

最后希望唯舞独尊紧快修正这些漏洞,越做越好

[课程]Linux pwn 探索篇!

上传的附件:
  • 1.JPG (135.68kb,94次下载)
  • 2.JPG (137.60kb,94次下载)
  • 3.jpg (15.89kb,93次下载)
收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
2
向chen guan xi 同志学习!
2008-2-9 13:27
0
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
首先……楼主的ID很强。。

新版的FlashGet我也抠到一个0Day。。该死的Debug版程序。。

不知道什么原因我加调试不起来。。。
2008-2-9 13:50
0
雪    币: 66
活跃值: (16)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
学习陈冠希.
2008-2-9 13:56
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不错,,好东东!!
2008-2-9 14:18
0
雪    币: 134
活跃值: (84)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
纯粹DOS,不过应该可以在研究下,发展下,看能不能exploit这个漏洞,远程溢出执行任意代码。
2008-2-9 14:41
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不錯的說!學一下!
2008-2-9 15:54
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
照这么看来,memcpy溢出到返回处,就能得到cpu的控制权了,那不就可以执行任意代码了吗?
2008-2-9 16:42
0
雪    币: 260
活跃值: (102)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
9
Lz,谢谢你的photo,很好看。不过,希望下次弄点清楚点的。
2008-2-9 17:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
膜拜陈腊肠.. 腊肠果然乃内外兼修之人.
2008-2-9 17:27
0
游客
登录 | 注册 方可回帖
返回
//