首页
社区
课程
招聘
[转帖]MSN messenger 7.x (8.0?)VIDEO协议分析及一个remote heap overflow
发表于: 2007-1-31 20:43 5146

[转帖]MSN messenger 7.x (8.0?)VIDEO协议分析及一个remote heap overflow

2007-1-31 20:43
5146
转自Team509:http://www.team509.com/modules.php?name=News&file=article&sid=50

这个问题我发现很久了,前两天MS通知我补掉了,所以现在我公布在这里了。这个源于我在2005年底作协议分析时的偶然发现,呵呵,从此我对发现漏洞产生了兴趣。

2005年的协议分析我写的原版在这里:

http://projects.collabora.co.uk/trac/farsight/wiki/MsnVideoConversation

英文很差,写成这样不错了,哈哈。

感谢ole andre 对我的帮助,thank you very much.

MSN VIDEO 的协议分为两个大部分,webcam和video conversation, 其中以video conversation部分最为重要,下面我们主要讨论video conversation部分,附带讨论webcam.

协商部分:与标准的MSNMS相同,请参阅相关文档。

数据传输部分:MSN一共采用3种传输方法,UDP,TCP和通过server转发,由于我的测试全部自动采用UDP,最主要的传输方法也为UDP,下面我们讨论UDP部分,TCP部分的传输方法基本相同,MSN video conversation的编码部分采用WMV9/3 , WebCam部分采用ML20

<!--[if !supportLists]-->1. <!--[endif]-->video conversation

每一个UDP packet可能含用video和audio两种格式,一般audio在前,video在后。

每一个UDP packet除相应的UDP头外,还含有一个10 bytes的MSN conversation头,下面就这10 bytes 展开讨论:

(UDP header)62 81 69 00 94 b4 cd 08 0a 04 ( payload)

62代表后面是一个视频的内容,当这个字节做这个运算(0x62 >> 1) & 0xF = 1 时为video ,为5时为audio(一般是0x4a),为2时为sync/ack,为3时是auth包。

下面两个字节为短整数,0x6981,右移5位后为payload长度 (0x6981 >> 5 ),这个非常重要,因为一个packet可能含多个payload,这个要小心计算。

第4个字节非常重要,这个字节做这个运算(0x00&63 = 0)后的值 0 ,表明这是组成一个完整的frame的第一个payload),如果为01,代表为第二部分。

下面是一个4字节的整数(5,6,7,8字节),是发送的时间,不是很重要。

第9个字节(0x0a)是完整的frame 的序号,同一个frame的不同packet部分,这字节应该相同,这可以作为拼包的重要依据。

第10个字节(0x04)表明这个完整的frame需要几个部分,4代表这个完整的frame(0x0a)需要由4部分拼成。

2. WebCam

与video conversation稍有不同,它不带audio信息,它带有一个9个字节的头,下面就这 9 bytes 展开讨论:

(UDP header)9d 49 e1 8e 4a 09 be 09 0a ( payload)

第一二个字节代表payload长度(0x499d & 2047 = 413),后面的payload长度就为413了。

同时也代表packet类型 (0x499d >> 11 & 7 = 1) , 1代表video内容,2,3 ack/syn.

下面4个字节代表timestamp,不重要。

第7个字节(0xbe)是完整的frame 的序号,同一个frame的不同packet部分,这字节应该相同,这可以作为拼包的重要依据。

第8个字节非常重要, 0x09表明这是组成一个完整的frame的第10个payload,如果为01,代表为第二部分,以此类推。问题就出在这里,在所有7.x版本里,都没有检查这1个字节,当这个字节的值大于等于0x83的时候,heap overflow 就产生了,呵呵。

第9个字节(0x0a)表明这个完整的frame需要几个部分,0x0a代表这个完整的frame(0xbe)需要由10部分拼成。

WebCam部分采用ML20编码,在frame的第一部分(第8个字节为0),紧跟9字节webcam头后是ML20编码的头,大概由这几部分构成。

int16 header size

int16 width

int16 height

int16 flags (bit 1 == keyframe)

int32 payload size

int32 FCC (== "ML20")

int32 wtf

int32 timestamp

这个编码原则上windows可以解析的,方法同video conversation基本上一样。

我写了一个exploit在这里,为了不被人滥用,作了些修改,J

http://www.team509.com/exp_msn.rar

thanks ole andre again, His ospy is perfect.

1.compile the dll.
2.inject the dll to msn messenger 7.0.777.0 's process.
3. choose "send my webcam" to a contact id who is online using 7.x (8.0?).
4.when the otherside accept the invatation , the otherside's msn will be at least crashed, if you using aChinese version windows 2000 sp4 , maybe a reverse shell , if other verison windows 2000, you need adjust the jmpa address in the dll's sourcecode. //这里不对了,呵呵,要改的地方多了。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 146
活跃值: (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
强!
2007-1-31 21:47
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
3
曾经用这个拿winroot开刀~~~~~
2007-2-1 08:59
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
4
早上没看到~~~~~
2007-2-1 09:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
认真学习
2007-2-1 09:44
0
游客
登录 | 注册 方可回帖
返回
//