免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 系统安全 > MP3 nator漏洞挖掘

MP3 nator漏洞挖掘

时间:2011-10-28 21:23来源:未知 整理:寂涯网络 点击:

简介
 
Mp3-Nator 2.0 是一款简单的 mp3 播放器。通过对该款软件的调试,本人发现这款播放
器存在缓冲区溢出的漏洞,测试的平台是在 windows xp sp3(英文版)。而本文的主要目的
不是描述这款软件的漏洞,而是分享了本人在拿到这个软件之后挖掘这个软件漏洞的过程并
且利用漏洞的方式。


初步测试
 
  在学习了很多播放器漏洞的文章之后,我们可以总结出:一般播放器的缓冲区漏洞都发
生在对播放列表的解析上。所以我们首先加载歌曲 music1 和music2,通过保存一个正常的播
放器列表,将生成的 normal.plf用 winhex 来查看在正常情况下的播放器列表结构。

 

 

从上图我们可以得出:歌曲文件路径使用“0D 0A”(回车换行)这样的字符进行分割
的,那么我们可以设想,如果我们构造一个文件的路径很长的.plf格式的文件,会不会导致
缓冲区溢出呢?
于是我生成一个 5000 字节全“A”的名为 test.plf的文件,播放器在加载这个文件之后
立即退出了。我们用调试器 attach到播放器进程,让播放器加载 test.plf,软件异常:

图 2  显示了软件出现异常时调试器停在了 0x00403C64,:
00403C64   $ 8B10           MOV EDX,DWORD PTR DS:[EAX]
由于EAX寄存器被覆盖成了0x41414141导致了访问异常,而观察此时的栈空间的情况,
我们可以发现从 0x12E9C4 的栈地址开始,一直到 0x12FD48 的地址的内容全部被覆盖
成”0x41414141”的值。0x12FD48-0x12E9C4+4=0x1388 (5000),刚好等于我们构造的字符数
目。所以由此可以得出结论:该软件缺乏对输入文件路径长度的限制,导致了该软件存在栈
的缓冲区的溢出漏洞。


深入分析
 
  接下来的工作当然是调试该软件,深入分析该软件产生漏洞的原因,调试的方式还是通
过 attach 的方式。文件的处理过程应该是首先通过 CreateFileA 或 CreateFilwW 获得文件句
柄,之后再通过 ReadFile 将文件内容读入。所以首先对 CreateFileA和CreateFileW下断点,
然后将加载 test.plf 文件,断在系统 CreateFileA函数入口处,此时的栈空间如下:  
 
0012F9A4   00000080  €...  |Attributes = NORMAL
0012F9A8   00000000  ....  \hTemplateFile = NULL
0012F98C   00408947  G‰@.  /CALL to CreateFileA from MP3N.00408942
0012F990   00A777DC    |FileName = "C:\Documents and
Settings\xiaot\Desktop\test.plf"
0012F994   80000000  ...€  |Access = GENERIC_READ
0012F998   00000001   ...  |ShareMode = FILE_SHARE_READ
0012F99C   00000000  ....  |pSecurity = NULL
0012F9A0   00000003   ...  |Mode = OPEN_EXISTING

可以看出这是打开 test.plf 文件的句柄操作,用 Ctrl+F9 回到主程序的运行空间,获得的
句柄是 0xA8,之后再对 ReadFile 下断,F9 之后,程序停在 ReadFile 函数入口处,栈空间数
据如下: 
 
0012F980   00408989  ‰‰@.  /CALL to ReadFile from MP3N.00408984
0012F984   000000A8  ¨...  |hFile = 000000A8 (window)
0012F988   00A78894  ”ˆ§.  |Buffer = 00A78894
0012F98C   00001388  ˆ ..  |BytesToRead = 1388 (5000.)
0012F990   0012F998  ˜ù .  |pBytesRead = 0012F998
0012F994 00000000 .... \pOverlapped = NULL 

程序会将文件中的数据拷贝到以 0xA78894 为首地址的缓冲区,读入的数据大小是 5000
字节。之后的程序处理流程就是判断读入的字符数是否为 0,然后通过 0x0A和 0x0D来切割
输入的缓冲区字符,然后通过SendMessageA函数,设置LB_ADDSTRING消息,将读入的缓冲
区发送给播放器窗口的播放列表(listbox控件)。到目前为止程序是没有问题的,但是接下来,
程序会用一个缓冲区去保存播放文件列表中的值,因为程序会根据播放列表中的值即播放文

本页地址 http://www.jybase.net/xitonganquan/20111028478.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com