史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 網路軟硬體架設技術文件
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2003-06-02, 12:40 PM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 代理獵手深度分析報告及欺騙手段

代理獵手是太陽風同志辛勤工作的成果,沒有太陽風一年多來的不斷耕耘,就沒有今天精彩的代理獵手,因此讓我們在文章的開始對太陽風同志表示真誠的問候!
首先要說的是以前我並沒用過該軟體,手頭的版本還是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
快取-last-checked: Tuesday, 04-May-99 04:15:50 GMT
Proxy-agent: Netscape-Proxy/2.5

<html>

<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<title>Maxtor Corporation - Creative Solutions for Information Storage</title>
-------------------------------------------------------------------------
肯定它還檢查了另外的特徵傳,但沒有什麼好的辦法,只好一個一個的試了。添入第一行,「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 中的」\n";行了嗎?且慢,最重要的
就是最後的8bits!!!!!!!!!
"0x0d 0x0a 0x0d 0x0a"
連續的兩個"\n\n",當初我就是沒有看到它,始終得不到正確的答案。
(在程序通不過測試後,我只好手動的找尋答案也不行,最後再看了一邊log,才發現問題所在,
就像 linux 中 mail 指令以一個Enter鍵加上一個點代表信箋的結束一樣,send代理指令是
以連續的兩個Enter鍵結束.
下面是代理獵手的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 <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 site
#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> [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);
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\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].一個小小的教訓; 還是
.只讓他們空喜歡一場?
下面就是一個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,也就無法共享了。
---Cut Here------------------------------------------

/* Pr0xy_Spoofer (m4yb3 c4ll 1t: Anti-ProxyHunt
* by zer9
* mail:zer9@21cn.com
* pass on slackware2.0.33
* cc phs.c -o phs
* usage: ./phs <-n> port &
*/

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <signal.h>
#include <sys/socket.h>

#define MSG_OK "HTTP/1.1 200\n"
#define MSG_NOFREE "HTTP/1.1 404\n"

//u can join that u think the target for searching to use the keyword;
#define MSG "yahoo china usa Maxtor Corp nease sohoo sina\
sina lycos cpcw 263 163 169 zg169 s3 \
\n"

#define TIMEOUT 30
#define true 1
#define false 0

void alarm_handler(int w)
{
alarm(0);
}
void usage(void)
{
printf("Pr0xyHunt Sp00fer 0.01 by zer9 mail:zer9@21cn.com\n");
printf("usagehs -n [bindport] \n");
}

int main(int argc,char *argv[])
{
struct sockaddr_in server,client;
int s,ns,clientlen,BindPort;
int NO_FREE;
char recvbuf[3000];

if(argc==1||argc>3)
{
usage();
return 0;
}
if(argc==2)
{
NO_FREE=false;
if(!(BindPort=atoi(argv[1])))
{
usage();
return -1;
}
}
if(argc==3)
if(strcmp(argv[1],"n"))
{
NO_FREE=true;
if(!(BindPort=atoi(argv[2])))
{
usage();
return -1;
}
}
if((s=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("socket");
return -1;
}
bzero((char *)&server,sizeof(server));
bzero((char *)&client,sizeof(client));
bzero(recvbuf,sizeof(recvbuf));
server.sin_family=AF_INET;
server.sin_port=htons(BindPort);
server.sin_addr.s_addr=INADDR_ANY;
if(bind(s,(struct sockaddr *)&server,sizeof(server))<0)
{
perror("bind");
return -1;
}
if(listen(s,5)!=0)
{
perror("listen");
return -1;
}
while(1) {
clientlen=sizeof(client);
if((ns=accept(s,(struct sockaddr *)&client,&clientlen))<0)
{
perror("accept");
close(s);
return -1;
}
signal(SIGALRM,alarm_handler);
alarm(TIMEOUT);
recv(ns,recvbuf,sizeof(recvbuf),0);
sleep(1);

//if MSG_OK to MSG_FREE->something on proxyhunt: no free
if(!NO_FREE)
send(ns,MSG_OK,strlen(MSG_OK),0);
else send(ns,MSG_NOFREE,strlen(MSG_OK),0);

sleep(1);
send(ns,MSG,strlen(MSG),0);
alarm(0);
close(ns);
}
close(s);
close(ns);
return 0;
}

---Cut Here-------------------------------------------------

看完這段源程,有的讀者可能會問:獵手可以選項不同的字串傳
來驗證,我怎麼知道他會向那個網址發送信息,同時他手頭的
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 了,衷心希望太陽風同志在看到這篇文章後能把獵手做得更加完美。
----------
這篇文章應該屬於入侵欺騙吧,或者屬於揭示軟體bug的那一類,不管怎樣劃分,我總算是為大家做了點貢獻了。」很久「以前就打算寫一個關於入侵欺騙的軟體,在遭到掃瞄時(不是獵手這樣的,而是nuess,sscan,...之類的scanner)遇到21port的連接請求時發一個仿wuftp 的界面給它。。。。。不過那時我還在linux下,多連接阜的監聽我還不會,最近轉到了c++builder門下,
發現可以輕而一舉的實現之,想一想,選〔A] 時整個win95在外部看來就是一個linux (redhat 5.2 apolllo)(對方肯定會用那個wuftp remote of 拚命的試:)
is slackware 2.0.35 [C] is SUNOS 5.5
[D] is ..... ha....夠酷吧:)遇到finger @@localhost
時發個超大的passwd給它:)最好連shadow也一起發給他,讓他自個樂去吧!:)ohh,對了,再加上一個[E]bsd 0.0.18那祖傳3代的歷史書都要翻出來了:))))))
任憑那些hacker(初級)用盡腦漿也想不到我這是一台win95.這個獵手欺騙只不過是嘗試一下,說不定幾天後就會有人(maybe me)寫出BO_SPoof,netspy_spoof...別忘了給我一份:
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 02:35 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1