将telnet用于网络诊断和攻击

本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。
msn: yfydz_no1@hotmail.com
来源:http://yfydz.cublog.cn
1. 概述
 
telnet是几乎所有操作系统都带的一个远程访问工具,通常使用之访问目标的TCP23端口以实现远程登录获取一个shell进行远程操作,而telnet除了此功能外,其实也是一个网络诊断、探测和攻击有利工具,因为其可实现最基本的TCP连接操作。

2. 命令格式
 
telnet命令基本格式为:
telnet server_address [server_port]
其中server_port指定要连接到服务器的TCP端口值,如果没有该参数缺省为23,有则连接到指定的任何端口。

3. 检测服务器某端口是否打开
 
在命令行上执行命令:
telnet server_address server_port
如果服务器端口是打开的,完成TCP连接的三次握手后,对于Linux系统会现实如下提示:
Trying server_address...
Connected to server_address.
Escape character is '^]'.
 
如果是Windows系统,则命令行窗口会清屏。
 
如果服务器端口是关闭的或该端口数据被防火墙拒绝,将出现连接失败的结果。

4. 完成明文文本协议并探测服务器
 
在没有相应协议的客户端时,可以用telnet完成各种明文文本协议,可以判断服务器正常与否,并能了解服务器的一些基本信息,具体协议数据格式可以参考各种协议的RFC。(以下说明中用户敲入的数据用黑斜体表示,屏幕显示的用正常字体)
 
4.1 HTTP
C:>telnet www.cublog.cn 80
(cmd窗口清屏,敲入下面数据,注意大小写:)
HEAD / HTTP/1.0(回车)
(回车)

HTTP/1.1 200 OK
Date: Mon, 20 Feb 2006 02:18:18 GMT
Server: Apache/2.0.54 (Unix) PHP/5.1.1
X-Powered-By: PHP/5.1.1
Connection: close
Content-Type: text/html; charset=GB2312
 
失去了跟主机的连接。
C:\>
 
这时可以看到从服务器返回的数据信息,可看出CU的服务器使用的是Apache 2.0.54,PHP解释器是5.1.1,这样可以查找该版本服务器代码是否有相关漏洞而进行下一步的攻击。

4.2 FTP
 
FTP通信通常需要两个连接,主连接用telnet可以连上,数据连接如果是被动模式也可以用另一个telnet连接来获取数据,如果是主动模式就必须自己写一个服务器监听某端口,然后通过PORT命令指定该端口让服务器来连接。
 
C:>telnet ftp.kernel.org 21
(cmd窗口清屏,服务器返回下面的数据)
220 Welcome to ftp.kernel.org.
(输入用户名,敲入:)
user anonymous(回车)
331 Please specify the password.
(输入口令,敲入:)
pass anonymous@(回车)
230-                        Welcome to the
230-
230-                    LINUX KERNEL ARCHIVES
230-                        ftp.kernel.org
230-
......省略
230-For comments on this site, please contact <ftpadmin@kernel.org>.
230-Please do not use this address for questions that are not related to
230-the operation of this site.  Please see our homepage at
230-http://www.kernel.org/ for links to Linux documentation resources.
230-
230 Login successful.
(进入被动模式,敲入:)
pasv(回车)
227 Entering Passive Mode (204,152,191,37,28,225)
(列目录敲入:)
list(回车)
(
此时在另一个cmd窗口敲入下面的命令,回车,其中7393=28*256+225,即可看到服务器传回的目录数据
:
C:\>telnet 204.152.191.37 7393
drwxrwx---    2 536      528          4096 May 21  2001 for_mirrors_only
drwx------    2 0        0           16384 Oct 02 09:20 lost+found
drwxrwsr-x    9 536      536          4096 Sep 26 22:48 pub
lrwxrwxrwx    1 0        0               1 Oct 03 04:41 usr -> .
lrwxrwxrwx    1 0        0              10 Oct 03 04:41 welcome.msg -> pub/README

失去了跟主机的连接。
C:\>
)
150 Here comes the directory listing.
226 Directory send OK.
(退出,敲入:)
quit(回车)
221 Goodbye.

失去了跟主机的连接。
C:\>
 
4.3 SMTP、POP3
和FTP类似,命令大小写无关,也是一开始输入user和pass登录,其他操作类似,理论上是可以通过telnet来发送接收邮件的,只要你不怕麻烦,在此不举例了。
 
5. 命令调试
 
telnet可用于任何使用明文进行通信的协议的调试,telnet到对方端口后,所输入的数据都会直接传到对方,如果使用telnet可以正确操作而自己编写的程序不能正确操作,可确定是程序出了问题。
 
同样,使用telnet可以用来检测某些功能是否正确,如防火墙URL的重组功能,因为telnet的数据即刻发送,最多的缓冲是按行,所以一个完整的URL会在不同的数据包中传输,可用这种方法来检查重组功能是否正确,如:
 
c:>telnet www.cublog.cn 80
(cmd窗口清屏,敲入下面数据,注意大小写:)
GET /u/12313/index.php HTTP/1.1(回车)
Host: www.cublog.cn(回车)
(回车)
 
这时服务器应该返回数据,同时在防火墙上可检查是否提取出完整的URL,完整的URL是Host字段加第一行中的第二个字段组成的:www.cublog.cn/u/12313/index.php。

6. 网络攻击
 
可以用telnet来发送特殊构造的数据来实现网络攻击,而不必写专门的程序,如phrack63中描述的FTP/IRC跟踪漏洞攻击(在我的前一篇文章中有说明),只需要先编写一个最基本的服务器程序模拟子连接,该服务器监听TCP6667端口,一旦有连接,就将特定数据发送给对方,主连接的FTP连接命令操作为:
(现在假定在TCP6667端口监听的服务器已经启动)
telnet victim_ftp 21
(cmd窗口清屏,服务器返回下面的数据)
敲入:
user username(回车,用户名)
pass password(回车,口令)
PORT a,b,c,d,26,11(回车,告诉服务器本机打开的6667端口,a,b,c,d为本机IP)
STOR irc.txt(回车,上载含有特殊IRC命令数据的文件,该文件事先定义好)
 
这时就可以通过命令:
telnet victim_ftp port_specified_by_irc
就可以访问目标机的端口
 
7. 结论
 
telnet是一个功能很强大的工具,不光是只能访问TCP23端口,往往可以用来实现很多你所意想不到的各种功能,越是基本的工具往往能作更多的事。

你可能感兴趣的:(linux,PHP,C#,网络协议,防火墙)