频道栏目
首页 > 资讯 > 工具软件 > 正文

代理猎手深度分析报告及欺骗手段

04-10-03        来源:[db:作者]  
收藏   我要投稿

代理猎手是太阳风同志辛勤工作的成果,没有太阳风一年多来的不断耕耘,就没有今天精彩的代理猎手,因此让我们在文章的开始对太阳风同志表示真诚的问候! 
首先要说的是以前我并没用过该软件,手头的版本还是1998年出的1.1版。在写作的后半段还是去下载了最新的2.8版。但结果还是一样:) 
--- 
这篇文章的写作目的是帮助ADM摆脱目前网上普遍存在的利用代理猎手进行的大量扫描活动。以及揭示了代理猎手的实现原理。由于手头没有关于代理服务器的详细资料,因此分析代理的实现花了较大的精力。希望在传播本文时请尽量保持文章的完整性,谢谢! 
--- 
代理猎手的实现: 
由于没有源码,分析的开始使用的是netcat,利用它的hex dump 功能把猎手所发出的信息截获。但netcat是一dos下的软件,使用起来不太方便,于是又花了几个小时写了个for win的netcat.截获的信息如下: 
47 45 54 20 68 74 74 70 3a 2f 2f 77 77 77 2e 6d # GET http://www.m ;
61 78 74 6f 72 2e 63 6f 6d 20 48 54 54 50 2f 31 # axtor.com HTTP/1 
2e 31 0d 0a 48 6f 73 74 3a 20 77 77 77 2e 6d 61 # .1..Host: www.ma 
78 74 6f 72 2e 63 6f 6d 0d 0a 41 63 63 65 70 74 # xtor.com..Accept 
3a 20 2a 2f 2a 0d 0a 50 72 61 67 6d 61 3a 20 6e # : */*..Pragma: n 
6f 2d 63 61 63 68 65 0d 0a 55 73 65 72 2d 41 67 # o-cache..User-Ag 
65 6e 74 3a 20 50 72 6f 78 79 48 75 6e 74 65 72 # ent: ProxyHunter 
31 2e 30 0d 0a 0d 0a # 1.0.... 

基本上我们就知道了猎手对于server所发出的信息: 
GET htttp://www.maxor.com HTTP/1.1 
Host: www.maxtor.com 
Accept: */* 
Pragma: no-cache 
User-Agent: ProxyHunter 1.0 

也就是说,在发出了这样一个命令序列后,如果对方是proxy server的话,猎手就会收到www.maxtor.com 的首页,然后下来的应该是在主页中搜寻预先定义在猎手中的KEYWORD,如果为真,则目标是代理服务器,并且免费。于是我猜想如果直接的发KEYWORD给它,会不会通过它的检验了?答案是:ON!,不得以,只好上网(这个月的上网时间早已透支:)架上sniffer,找上一个真的代理,然后再找一个有限制的,测试完后赶紧断开连接。下面是真代理服务器的log: 
------------------------------------------------- 
HTTP/1.1 200 OK 
Server: Microsoft-IIS/4.0 
Content-location: http://www.maxtor.com/default.htm ;
Date: Tue, 04 May 1999 04:53:14 GMT 
Content-type: text/html 
Accept-ranges: bytes 
Last-modified: Wed, 28 Apr 1999 16:42:38 GMT 
Etag: "cf6f51f9691be1:105fb" 
Content-length: 8558 
Content-location: http://www.maxtor.com/default.htm ;
Etag: "cf6f51f9691be1:105fb" 
Accept-ranges: bytes 
Cache-last-checked: Tuesday, 04-May-99 04:15:50 GMT 
Proxy-agent: Netscape-Proxy/2.5 

 

 
content="text/html; charset=iso-8859-1"> 
 
------------------------------------------------------------------------- 
肯定它还检查了另外的特征传,但没有什么好的办法,只好一个一个的试了。添入第一行,“HTTP/1.1 200 OK" 
加上KEYWORD 一起发给猎手,OK!!! 通过了检验。看来猎手只是检查了二个地方。(可能是为了加快速度)进一步的实验表明,猎手检查的方式如下: 
"HTTP/1.1 200"+WORDKEY (特征传) 
也就是说,只要在连接是,你发给它以上的字符传,猎手接受后就会认为验证成功,至此我们已经找到了欺骗猎手从而通过验证的方法。 
而在验证有限制的代理是LOG如下: 
----- 
HTTP/1.1 404 ERROR 
....... 
----- 
进一步的研究表明,仅发出"HTTP/1.1 404"的字符传就可以欺骗从而通过验证,猎手显示”要密码“ :) 
--- 
2.8版的猎手中还增加的对socks的验证, 
但结果同上:) 
--- 
至此,我们应该可以从分析的结果中找到代理的实现方法了,剩下就是通过程序来证明之。 
但还有两个方面值得注意: 
1。在上面的第一个log中,我附带了16进制的转换, 
这很重要!!早先我就是没有仔细查看它,走了很长的弯路。 
请注意字符传之间的分格符,"0x0d 0x0a"也就是c 中的” ";行了吗?且慢,最重要的 
就是最后的8bits!!!!!!!!! 
"0x0d 0x0a 0x0d 0x0a" 
连续的两个" ",当初我就是没有看到它,始终得不到正确的答案。 
(在程序通不过测试后,我只好手动的找寻答案也不行,最后再看了一边log,才发现问题所在, 
就象 linux 中 mail 命令以一个回车加上一个点代表信笺的结束一样,send代理命令是 
以连续的两个回车结束. 
下面是代理猎手的gnuC 实现,注意,本程序只是解释了代理猎手的实现过程,没有多IP 的扫描功能。 
test on slackware 2.0.33 
---Cut Here---------------------------------------- 
/* this codez describe how to search a PROXY server 
*  
* by 

* zer9 
* ==== 
* zer9@21cn.com 

* test on slackware 2.0.33 
* cc proxyht.c -o proxyht.c  
*/ 

#include  
#include  
#include  
#include  
#include  
#include  
#include  

#define DefaultProxyPort 8080 //default proxy port 8080 

#define MSG1 "GET http://www.maxtor.com ;HTTP/1.1 " //1 --change (1,2) 
#define MSG2 "Host: www.maxtor.com " //2 to search 
#define MSG3 "Accept: */* " // other site 
#define MSG4 "Pragma: no-cache " 
#define MSG5 "User-Agent: ProxyHT 0.01 " 

#define KEYWORD "Maxtor Corp" // this is keyword 

#define TIMEOUT 30 

void alarm_handler(int w) 

alarm(0); 
printf("Time Out! "); 

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

struct in_addr Target; 
struct hostent *he; 
struct sockaddr_in sin; 
int s,ProxyPort; 
char recvbuf1[5000];  
char recvbuf2[10000]; 

if(argc==2) 
ProxyPort=DefaultProxyPort; 
else 
if(argc==3) 
ProxyPort=atoi(argv[2]); 
else 

printf("ProxyHT 0.01 by zer9 mail:zer9@21cn.com "); 
printf("usage: %s  [proxy_port] ",argv[0]); 
return 0; 

if((he=gethostbyname(argv[1]))!=NULL) 
bcopy(he->h_addr,(char *)&Target.s_addr,he->h_length); 
else 
Target.s_addr=inet_addr(argv[1]); 
if(Target.s_addr==-1) 

perror("gethostbyname"); 
return -1; 

printf("ProxyHT 0.01 by zer9 mail:zer9@21cn.com "); 
if((s=socket(AF_INET,SOCK_STREAM,0))<0) 

perror("socket"); 
return -1; 

sin.sin_family=AF_INET; 
sin.sin_port=htons(ProxyPort); 
sin.sin_addr.s_addr=Target.s_addr; 
if(connect(s,(struct sockaddr*)&sin,sizeof(sin))<0) 

perror("connect"); 
return -1; 

bzero(recvbuf1,sizeof(recvbuf1)); 
bzero(recvbuf2,sizeof(recvbuf2)); 
printf("%s start verifying... waiting a while please ",argv[1]); 
signal(SIGALRM,alarm_handler); 
send(s,MSG1,strlen(MSG1),0); 
send(s,MSG2,strlen(MSG2),0); 
send(s,MSG3,strlen(MSG3),0); 
send(s,MSG4,strlen(MSG4),0); 
send(s,MSG5,strlen(MSG5),0); 
alarm(TIMEOUT); 
recv(s,recvbuf1,sizeof(recvbuf1),0); 
recv(s,recvbuf2,sizeof(recvbuf2),0); 
alarm(0); 

//if u want to debug , open follow two lines 
//printf("%s ",recvbuf1); 
//printf("%s ",recvbuf2); 

if(strstr(recvbuf1,"HTTP/1.1 200")) 

if(strstr(recvbuf2,KEYWORD)) 

printf("hahaha... theres something found! "); 

相关TAG标签
上一篇:巧用IP Changer修改TCP/IP网络参数
下一篇:nessus安装指南
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站