Path: blob/master/DDOS Scripts/AMP Methods/MSSQL Amplification/mssql_scanner.c
4607 views
#include <pthread.h>1#include <unistd.h>2#include <stdio.h>3#include <stdlib.h>4#include <string.h>5#include <sys/socket.h>6#include <netinet/in.h>7#include <signal.h>8#include <sys/time.h>9#include <sys/types.h>10#include <math.h>11#include <ctype.h>12#include <errno.h>13#include <arpa/inet.h>14#include <netinet/ip.h>15#include <netinet/udp.h>1617volatile int running_threads = 0;18volatile int found_srvs = 0;19volatile unsigned long per_thread = 0;20volatile unsigned long start = 0;21volatile unsigned long scanned = 0;22volatile int sleep_between = 0;23volatile int bytes_sent = 0;24volatile unsigned long hosts_done = 0;25FILE *fd;26char payload[] =27"\x02";2829size = sizeof(payload);3031void *flood(void *par1)32{33running_threads++;34int thread_id = (int)par1;35unsigned long start_ip = htonl(ntohl(start)+(per_thread*thread_id));36unsigned long end = htonl(ntohl(start)+(per_thread*(thread_id+1)));37unsigned long w;38int y;39unsigned char buf[65536];40memset(buf, 0x01, 1);41int sizeofpayload = 1;42int sock;43if((sock=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))<0) {44perror("cant open socket");45exit(-1);46}47for(w=ntohl(start_ip);w<htonl(end);w++)48{49struct sockaddr_in servaddr;50bzero(&servaddr, sizeof(servaddr));51servaddr.sin_family = AF_INET;52servaddr.sin_addr.s_addr=htonl(w);53servaddr.sin_port=htons(1434);54sendto(sock,payload,size,0, (struct sockaddr *)&servaddr,sizeof(servaddr));55bytes_sent+=size;56scanned++;57hosts_done++;58}59close(sock);60running_threads--;61return;62}6364void sighandler(int sig)65{66fclose(fd);67printf("\n");68exit(0);69}7071void *recievethread()72{73printf("\n");74int saddr_size, data_size, sock_raw;75struct sockaddr_in saddr;76struct in_addr in;7778unsigned char *buffer = (unsigned char *)malloc(65536);79sock_raw = socket(AF_INET , SOCK_RAW , IPPROTO_UDP);80if(sock_raw < 0)81{82printf("Socket Error\n");83exit(1);84}85while(1)86{87saddr_size = sizeof saddr;88data_size = recvfrom(sock_raw , buffer , 65536 , 0 , (struct sockaddr *)&saddr , &saddr_size);89if(data_size <0 )90{91printf("Recvfrom error , failed to get packets\n");92exit(1);93}94struct iphdr *iph = (struct iphdr*)buffer;95if(iph->protocol == 17)96{97unsigned short iphdrlen = iph->ihl*4;98struct udphdr *udph = (struct udphdr*)(buffer + iphdrlen);99unsigned char* payload = buffer + iphdrlen + 1;100if(ntohs(udph->source) == 1434)101{102int body_length = data_size - iphdrlen - 1;103104if (body_length > 1)105106{107found_srvs++;108109fprintf(fd,"%s %d\n",inet_ntoa(saddr.sin_addr),body_length);110fflush(fd);111112}113114}115}116117}118close(sock_raw);119120}121122int main(int argc, char *argv[ ])123{124125if(argc < 6){126fprintf(stderr, "Invalid parameters!\n");127fprintf(stdout, "MSSQL Scanner\nUsage: %s <ip range start (192.0.0.0)> <ip range end (198.255.255.255)> <outfile> <threads> <scan delay in ms>\n", argv[0]);128exit(-1);129}130fd = fopen(argv[3], "a");131sleep_between = atoi(argv[5]);132133signal(SIGINT, &sighandler);134135int threads = atoi(argv[4]);136pthread_t thread;137138pthread_t listenthread;139pthread_create( &listenthread, NULL, &recievethread, NULL);140141char *str_start = malloc(18);142memset(str_start, 0, 18);143str_start = argv[1];144char *str_end = malloc(18);145memset(str_end, 0, 18);146str_end = argv[2];147start = inet_addr(str_start);148per_thread = (ntohl(inet_addr(str_end)) - ntohl(inet_addr(str_start))) / threads;149unsigned long toscan = (ntohl(inet_addr(str_end)) - ntohl(inet_addr(str_start)));150int i;151for(i = 0;i<threads;i++){152pthread_create( &thread, NULL, &flood, (void *) i);153}154sleep(1);155printf("Scan in Progress \n");156char *temp = (char *)malloc(17);157memset(temp, 0, 17);158sprintf(temp, "MSSQL Found");159printf("%-16s", temp);160memset(temp, 0, 17);161sprintf(temp, "IP/s");162printf("%-16s", temp);163memset(temp, 0, 17);164sprintf(temp, "Bytes/s");165printf("%-16s", temp);166memset(temp, 0, 17);167sprintf(temp, "Threads");168printf("%-16s", temp);169memset(temp, 0, 17);170sprintf(temp, "Percent Done");171printf("%s", temp);172printf("\n");173174char *new;175new = (char *)malloc(16*6);176while (running_threads > 0)177{178printf("\r");179memset(new, '\0', 16*6);180sprintf(new, "%s|%-15lu", new, found_srvs);181sprintf(new, "%s|%-15d", new, scanned);182sprintf(new, "%s|%-15d", new, bytes_sent);183sprintf(new, "%s|%-15d", new, running_threads);184memset(temp, 0, 17);185int percent_done=((double)(hosts_done)/(double)(toscan))*100;186sprintf(temp, "%d%%", percent_done);187sprintf(new, "%s|%s", new, temp);188printf("%s", new);189fflush(stdout);190bytes_sent=0;191scanned = 0;192sleep(1);193}194printf("\n");195fclose(fd);196return 0;197}198199