深入分析代理猎手_代理服务器

代理猎手是太阳风同志辛勤工作的成果,没有太阳风一年多来的不断耕耘,就没有今天精彩的代理猎手,因此让我们在文章的开始对太阳风同志表示真诚的问候!首先要说的是以前我并没用过该软件,手头的版本还是1998年出的1.1版。但在写作的后半段还是去下载了最新的2.8版。但结果还是一样:)(goodwell注:现在已经出3.0版,但是我用了不是很稳定。)
  这篇文章的写作目的是帮助ADM摆脱目前网上普遍存在利用代理猎手进行的大量扫描活动。以及揭示了代理猎手的实现原理。由于手头没有关于代理服务器的详细资料,因此分析代理的实现花了很大的精力。希望在传播本文时请尽量保持文章的完整性,谢谢!

  代理猎手的实现: 由于没有源码,分析的开始使用的是netcat,利用它的hex dump 功能把猎手所发出的信息截获。但netcat是一dos下的软件,使用起来不太方便,于是又花了几个小时写了个forwin的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

<HTML>
<HEAD>
<meta http-equiv="Content-Type" con_tent="text/html; charset=iso-8859-1">
<title>
Maxtor Corporation - Creative Solutions for Information Storage
</title>
------------------------------------------------------------------------------

  肯定它还检查了另外的特征传,但没有什么好的办法, 只好一个一个的试了。添入第一行,“HTTP/1.1200 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 中的”\n";行了吗?且慢,最重要的就是最后的8bits!!!!!!!!! "0x0d 0x0a 0x0d 0x0a" 连续的两个"\n\n",当初我就是没有看到它, 始终得不到正确的答案。(在程序通不过测试后,我只好手动的找寻答案不行,最后再看了一边log,才发现问题所在,就象 linux 中 mail 命令以一个回车加上一个点代表信笺的结束一样,send代理命令是以连续的两个回车结束. 下面是代理猎手的gnuC 实现,注意,本程序只是解释了代理猎手的实现过程,没有多IP 的扫描功能。

------------------------------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 <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/socket.h>
#include <signal.h>
#define DefaultProxyPort 8080 //default proxy port 8080
#define MSG1 "GET http://www.maxtor.com HTTP/1.1\n" //1 --change (1 ,2)
#define MSG2 "Host: www.maxtor.com\n" //2 to search
#define MSG3 "Accept: */*\n" // other sit e #define MSG4 "Pragma: no-cache\n"
#define MSG5 "User-Agent: ProxyHT 0.01\n\n" #define KEYWORD "Maxtor Corp" // this is
keyword #define TIMEOUT 30
void alarm_handler(int w)
{
alarm(0);
printf("Time Out!\n");
}
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\n");
printf("usage: %s [proxy_port]\n",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\n");
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\n",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);
1alarm(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\n",recvbuf1);
//printf("%s\n",recvbuf2);
if(strstr(recvbuf1,"HTTP/1.1 200"))
{
if(strstr(recvbuf2,KEYWORD))
{
printf("hahaha... there"s something found! \n");
close(s); return 0;
}
}
else
{
if(strstr(recvbuf1,"HTTP/1.1 404"))
{
printf("woo! I found one,but dont free...\n");
close(s);
return 0;
}
}
close(s);
printf("sorry.dont hit me please,nexttime i *MUST* find one.\n");
return 0;
}
----------------------------Cut Here-----------------------------------------

  代理猎手欺骗的实现: 一把枪在好人手上可以救人,但落在了坏人手上就。。。:)代理猎手就是这样的枪。除开大量的利用猎手进行扫描而获得非法的服务之后,近来 还有不少人专门利用猎手多线程的特点找寻特定的端口(如 finger(79),31337(BO),12345(BO).....在极有可能造成各种破坏性结果的同时,还占用了大量的带宽;使得网上的正常活动都受到的影响(反正我是非常的不爽啦:)(如何对付这些“好奇心非常强”的同志了?是给他们[A].一个小小的教训; 还是[B].只让他们空喜欢一场?下面就是一个linux (gcc) 的Anti-Porxyht 的实现,本来win95下的我还先做出来,但不好贴上来,而且也不利于大家的理解。总的说来,非阻塞模式的socket(win95)在写daemon时要比阻塞模式下socket(BSD4.3)容易的多,在win95下可以毫不费力的同时监听多个port,而linux下则只有以下几个选择:
  1.多线程
  2.截获每个IP包,然后再根据包里的PORT进行处理;
  3.同时启动多个副本:)
  4.我就不知到了。。。
  1&&2 我都不会,只好用3了。:)
  不过一般只要listen to port 8080 就可以了,因为不论猎手怎么扫,8080都不放过的。同上面的一样,本程序也只是为了向你展示如何欺骗猎手从而通过猎手的验证,并没有多余的功能,在以后我可能会加上. 在写本软件的同时我还花了一段时间测试看猎手是否有overflow 的弱点,在向他发字符传时大小 <=256 我都测了,好象有一次看现象应该是CPU load 100%,可能是我的爱机太 “快”的问题,其余(20-30次都没有异常。可能与猎手是用 c++ 写的用关,c++的串类很少有可能发生 此类情况(overflow).。如果你测试能够通过 发送某个字符串让猎手当机,请告诉我哟!:)尽管是这样,你还是可以加上某个win95&win97&win98 的漏洞,在 accept(ns,....)后传给对方。。。。。。:)(最好是先让它通过检验,让对方正“无比”高兴的时候发给他:)))))))(怎么一提到这上面我的兴趣就来了;)test on slackware 2.0.33(maybe irix6.4) ./phs 8080 --> 表示监听 8080端口,在遭扫描后欺骗对方通过猎手的验证(显示 :free :) ./phs -n 8080 --> 表示监听8080端口,在遭扫描后欺骗对方通过 猎手的验证 (显示:需密码:)同样的,该程序的win95版我也写出,可以监听多个端口,只是兄弟我一没主页,二没ftp,也就无法共享了。

  有的读者可能会问:猎手可以选择不同的字符传来验证,我怎么知道他会向那个网址发送信息,同时他手头的 KEYWORD 是什么了?ohhh,u"re g00d b0y:)这个问题很关键, 测试表明,如果你发给猎手的字符传中没有KEYWORD 的话(但打头是"HTTP/1.1 200") ,猎手会显示“超时”,如果连"HTTP/1.1 200"都没有,只送一个空字符传,猎手显示“无特征串”,送乱串显示“非proxy". 那我们如何解决KEYWORD的问题了?由于我们是服务器方,因此 主动权在我们手中;有两个方法:

1,构建一个大型数据库,如上面程序中的MSG 字符串,把著名的主页的TITLE都加入其中,我想只要包含有该厂商名字的串就可以了;

2。从对方发来的请求代理的命令中过滤出www.xxxx.xxx, 再又发给它,这可通过程序来实现。最好是加上"Corp" "INC. ","LTD."...之类的通用串, (如果你猜口令比较在行的话,这应该不成问题:)
1。2 不相矛盾,可结合使用。 不过还有一种方法:(纸上谈兵:)如果遭攻击时你在场,先发给他一个超时的(或需密码的)信息,一般(我想)对方都会第二次来验证的,这期间“跑去”真正的网站然后在第二次扫描时把真正的KEYWORD 发给他。(再次申明:纸上谈兵;)

  到此为止,这篇文章就要over 了,衷心希望太阳风 同志在看到这篇文章后能把猎手做得更加完美。
(不过最好是留一个overflow的洞来,让我们也过一把隐(^o^)

  这篇文章应该属于揭示软件bug 的那一类,不管怎样划分,我总算是为大家做了点贡献了。”很久“以前就打算写一个关于入侵欺骗的软件,在遭到扫描时(不是猎手这样的,而是nuess,sscan,...之类的hacker‘scanner)遇到21port的连接请求时发一个仿 wuftp?的界面给它。。。。。不过那时我还在linux下,多端口的监听我还不会,最近转到了c++builder门下,发现可以轻而一举的实现之,想一想,选[A] 时整个win95在外部看来就是一个linux
("#ffff00"hat 5.2 apolllo)(对方肯定会用那个wuftpremoteof 拼命的试:)[B] is slackware2.0.35 [C] is?SUNOS 5.5[D] is.....ha....够酷吧:)遇到finger @@localhost时发个超大的passwd给它:)最好连shadow也一起发给他,让他自个乐去吧!:)ohh,对了,再加上一个[E] bsd0.0.18那祖传3代的历史书都要翻出来了:))))))任凭那些hacker(初级)用尽脑浆也想不到我这是一台win95.这个猎手欺骗只不过是尝试一下,说不定几天后就会有人(maybeme)写出BO_SPoof,netspy_spoof...别忘了给我一份:)

时间: 2024-10-14 08:00:27

深入分析代理猎手_代理服务器的相关文章

高速HTTP代理列表_代理服务器

在网上看到的,试了几个,都可以用,就发过来 212.175.113.59 8080 高度匿名 whois 土耳其 CZ88.NET  211.152.35.23 8080 高度匿名 whois 上海市 CZ88.NET  196.33.246.154 8080 高度匿名 whois 南非 CZ88.NET  217.218.42.134 80 高度匿名 whois 伊朗 CZ88.NET  195.248.97.249 8080 高度匿名 whois 英国 CZ88.NET  212.162.1

代理猎手验证数据的设置方法_代理服务器

以代理猎手3.1版为例,首先选择"系统"-->"参数设置",进入代理猎手的"运行参数设置"对话框.选择"验证数据设置",点击添加,验证名可以随意起,验证类型就选择默认的"特征字串",在验证地址中输入一个可以用为验证代理服务器的网址,此处最好添入国外网站的地址,例如"http://www.yahoo.com".如果用的是国内网址,验证出来的代理可能不能出国.特征字串中填入访问验证地址

从头开始学代理(新手必读)(转帖) (一梦浮生)_代理服务器

从头开始学代理(新手必读)(转帖)  (一梦浮生)   扫盲篇 什么是代理服务器?     代理服务器是介于浏览器和Web服务器之间的一台服务器,当你通过代理服务器上网浏览时,浏览器不是直接到Web服务器去取回网页,而是向代理服务器发出请求,由代理服务器来取回浏览器所需要的信息,并传送给你的浏览器.  什么是免费代理服务器?     在使用代理猎手等软件搜索代理服务器地址时,会在验证状态栏中出现类似"要密码"."Free"等字样.如果你把"Free&quo

socks5代理的使用以及ftp多线程下载的简易方法_代理服务器

各位朋友.大家好~ 小弟由于在国外.有时候日子挺无聊的.就想下载点电影看看.个人比较喜欢ftp下载.比较稳定.但是由于很多服务器在国内.国外下载速度很慢.由于实在忍受不了那个下载速度.想了一个暂时的解决办法.大家可以试一下! 所需工具~影音传输带! 代理猎手! That"s all! 1. 到www.google.com 搜索 free socks 5 会出现很多网站.我常去的是http://www.samair.ru/proxy/socks.htm 里面很多的代理.你找sock5类型的.chi

RedHat环境下socks5代理的配置指南教程_代理服务器

最近有不少网友老是问我一些QQ如何利用代理的事.其实是很简单的,通过代理猎手寻找一些socks5代理便可.刚好最近在学习linux系统,于是突然想到用RedHat9来做个socks5代理服务器.ok!说干就干. 1.先在北大天网搜索一下socks5的安装包,发现一大堆,最新版本是socks5-v1.0r11.tar.gz,于是下载到我的RH9的服务器上. 2.解压缩软件包 #tar xvfz socks5-v1.0r11.tar.gz 3.开始编译 #cd socks5-v1.0r11 #./c

MultiProxy 使用图文教程手册_代理服务器

使用代理的意义何在? 最早使用代理大概是中国互联网的发展造成的. 很多网友还记得当年的163和169吧. 那时国家有意分割互联网为相互独立的国内网和国际网.一些聪明的网友发现持用代理可以绕过这个限制,用169的帐号看163的内容. 呵呵,无论从费用和内容上,此举都颇讨人喜欢,也是当年的讨论热潮之一,只怕声势不下后来的所谓超频. 事实上,由于163和169的并网,以及国家在互联网监督性能上的完善加强(在最近的监管中,由于监察是直接通过北电网络的路由器中固化功能来主要承担,基本上可以滤掉所有监管对象

代理服务器的搜索和验证的分析_代理服务器

一.服务器常用端口 在 Internet 上的每一台主机(Hosts)都有唯一的一个地址(IP),但同一台主机可能同时提供一种以上的服务,比如FTP服务.WWW服务等等,那么每一种服务就要占用该主机的一个端口(PORT). 代理服务器常用的端口有: HTTP代理:80/8080/3128/8081/9080 SOCKS代理:1080 FTP代理:21 Telnet代理:23 二.如何搜索代理服务器 从上面的内容我们已经知道,要找代理服务器其实就是要找出该服务器的IP地址.服务类型及所用端口,我们

代理服务器新手应用指南和使用教程_代理服务器

首先我要说明,我们这里要谈的代理,是代理服务器,英文名叫Proxy Server.一般来讲,对于我们这些普通的网民它的作用有三个(撇开一些高深的用处不谈,因为我们未必会用到): 一是通过它,我们可以访问到一些平时不能去的网站.不信你可以马上打开你的浏览器和输入"www.geocities.com"这个网址.怎样?不用看着浏览器在这里空等了,并不是你的网络速度慢,也不是没有这个网站,而是你访问不到它(网络上还有很多这些类型的网站哦).为什么访问不到?这个问题嘛......说法有很多种,大

代理猎手IP地址格式的含义解释_代理服务器

以61.133.90.59:80@HTTP$6&132,810,811#山东省 烟台市的一个代理为例. 61.133.90.59表示为代理服务器的IP地址为61.133.90.59 :80 ":"后的80表示该代理服务器的服务端口为80(21.23.80.1080.3128.8080等) @HTTP "@"后的HTTP表示该代理服务器的类型为HTTP代理(HTTP.FTP.SOCKS4/5.TELNET五类) $ "$"后的数值表示代理服