tcpdump
说实在的,对于 tcpdump 这个软体来说,你甚至可以说这个软体其实就是个骇客软体,因为他不但可以分析封包的流向,连封包的内容也可以进行‘监听’,如果你使用的传输资料是明码的话,不得了,在 router 上面就可能被人家监听走了!很可怕呐!所以,我们也要来了解一下这个软体啊!(注:这个 tcpdump 必须使用 root 的身份执行)
如果你是第一次看 tcpdump 的 man page 时,肯定一个头两个大,因为 tcpdump 几乎都是分析封包的表头资料,使用者如果没有简易的网路封包基础,要看懂粉难呐!所以,至少您得要回到网路基础里面去将 TCP封包的表头资料理解理解才好啊! ^_^!至于那个范例一所产生的输出范例中,我们可以约略区分为数个栏位,我们以范例一当中那个特殊字体行来说明一下:
- 01:33:40.41:这个是此封包被撷取的时间,‘时:分:秒’的单位;
- IP:透过的通讯协定是 IP ;
- 192.168.1.100.22 > :传送端是 192.168.1.100 这个 IP,而传送的 port number 为 22,您必须要了解的是,那个大于 (>) 的符号指的是封包的传输方向喔!
- 192.168.1.11.1190:接收端的 IP 是 192.168.1.11,且该主机开启 port 1190 来接收;
- P 116:232(116):这个封包带有 PUSH 的资料传输标志,且传输的资料为整体资料的 116~232 byte,所以这个封包带有 116 bytes 的资料量;
- ack 1 win 9648:ACK与 Window size 的相关资料。
再来,一个网路状态很忙的主机上面,你想要取得某部主机对你连线的封包资料而已时,使用 tcpdump 配合管线命令与正规表示法也可以,不过,毕竟不好捉取!我们可以透过 tcpdump 的表示法功能,就能够轻易的将所需要的资料独立的取出来。在上面的范例一当中,我们仅针对 eth0 做监听,所以整个 eth0 介面上面的资料都会被显示到荧幕上,不好分析啊!那么我们可以简化吗?例如只取出 port 21 的连线封包,可以这样做:
瞧!这样就仅提出 port 21 的资讯而已,且仔细看的话,你会发现封包的传递都是双向的,client 端发出‘要求’而 server 端则予以‘回应’,所以,当然是有去有回啊!而我们也就可以经过这个封包的流向来了解到封包运作的过程。举例来说:
- 我们先在一个终端机视窗输入‘ tcpdump -i lo -nn ’ 的监听,
- 再另开一个终端机视窗来对本机 (127.0.0.1) 登入‘ssh localhost’
上表显示的头两行是 tcpdump 的基本说明,然后:
- 第 3 行显示的是‘来自 client 端,带有 SYN 主动连线的封包’,
- 第 4 行显示的是‘来自 server 端,除了回应 client 端之外(ACK),还带有 SYN 主动连线的标志;
- 第 5 行则显示 client 端回应 server 确定连线建立 (ACK)
- 第 6 行以后则开始进入资料传输的步骤。
更神奇的使用要来啦!如果我们使用 tcpdump 在 router 上面监听‘明码’的传输资料时,例如 FTP 传输协定,你觉得会发生什么问题呢?我们先在主机端下达‘ tcpdump -i lo port 21 -nn -X ’然后再以 ftp 登入本机,并输入帐号与密码,结果你就可以发现如下的状况:
上面的输出结果已经被简化过了,你必须要自行在你的输出结果当中搜寻相关的字串才行。从上面输出结果的特殊字体中,我们可以发现‘该 FTP 软体使用的是 vsftpd ,并且使用者输入 dmtsai 这个帐号名称,且密码是 mypasswordisyou’嘿嘿!你说可不可怕啊!如果使用的是明码的方式来传输你的网路资料?所以我们才常常在讲啊,网路是很不安全低!
另外你得了解,为了让网路介面可以让 tcpdump 监听,所以执行 tcpdump 时网路介面会启动在‘错乱模式 (promiscuous)’,所以你会在 /var/log/messages 里面看到很多的警告讯息,通知你说你的网路卡被设定成为错乱模式!别担心,那是正常的。至于更多的应用,请参考 man tcpdump 啰!
nc, netcat
这个 nc 可以用来作为某些服务的检测,因为他可以连接到某个 port 来进行沟通,此外,还可以自行启动一个 port 来倾听其他用户的连线呐!非常的不错用!如果在编译的时候给予‘GAPING_SECURITY_HOLE’参数的话,嘿嘿!这个软体还可以用来取得用户端的 bash 哩!可怕吧!我们的 CentOS 比较人性化,并没有给予上面的参数,所以我们不能够用来作为骇客软体~但是用来取代 telnet 也是个很棒的功能了!(有的系统将执行档改名为 netcat 啦!)
这个最简单的功能与 telnet 几乎一样吧!可以去检查某个服务啦!不过,更神奇的在后面,我们可以建立两个连线来传讯喔!举个例子来说,我们先在 client 端的地方启动一个 port 来进行倾听:
然后在主机端的地方,也利用 nc 来连线到用户端,并且输入一些指令看看喔!
此时,在主机端我们可以打入一些字,你会发现在 client 端会同时出现你输入的字眼呐!如果你同时给予一些额外的参数,例如利用标准输入与输出 (stdout, stdin) 的话,那么就可以透过这个连线来作很多事情了!当然 nc 的功能不只如此,你还可以发现很多的用途喔!请自行到您主机内的 /usr/share/doc/nc-1.10/scripts 目录下看看这些 script ,有帮助的呐!不过,如果你需要额外的编译出含有 GAPING_SECURITY_HOLE 功能,以使两端连线可以进行额外指令的执行时,就得要自行下载原始码来编译了!