第3章 探索网络

本章知识点

本章节将介绍多种扫描端口的方式,对于不同的端口或者是不同的主机有着不同的扫描方式。通过合理的对扫描选项的使用可以准确得到目标端口的开放状态,甚至获得目标端口服务名称。

本章选项

表3.1所示为本章节所需Nmap命令表,为方便读者查阅笔者特此整理。

表3.1 本节所需选项

选  项

解  释

-T

时序选项

-p

端口扫描顺序

-sS

TCP SYN扫描

-sT

TCP连接扫描

-sU

UDP扫描

-sN;-sF;-sX

隐蔽扫描

-sA

TCP ACK扫描

-sW

TCP窗口扫描

-sM

TCP Maimon扫描

--scanflags

自定义TCP扫描

-sI

空闲扫描

-sO

IP协议扫描

-b

FTP Bounce扫描

端口是指接口电路中的一些寄存器,这些寄存器分别用来存放数据信息、控制信息和状态信息,相应的端口分别称为数据端口、控制端口和状态端口。

电脑运行的系统程序,其实就像一个闭合的圆圈,但是电脑是为人服务的,它需要接受一些指令,并且按照指令调整系统功能来工作,于是系统程序设计者就把这个圆圈截成很多段,这些线段接口就叫端口(通俗讲是断口,就是中断)。系统运行到这些端口时,先判断端口是否打开或关闭,如果关闭,则是绳子接通了,系统往下运行;如果端口是打开的,系统就得到命令,有外部数据输入,接受外部数据并执行。

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。

UDP是ISO参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是IP协议与上层协议的接口。UDP协议适用端口分别运行在同一台设备上的多个应用程序。

端口如同是一座房间的门,那这间房子有多少个门呢?有65536个之多,也就是说端口的取值范围是0~65535。

在Internet上,各主机间通过TCP/IP协议发送和接收数据包,各个数据包根据其目的主机的IP地址来进行互联网络中的路由选择。可见,把数据包顺利地传送到目的主机是没有问题的。问题出在哪里呢?我们知道,大多数操作系统都支持多程序(进程)同时运行,那么目的主机应该把接收到的数据包传送给众多同时运行的进程中的哪一个呢?显然这个问题有待解决,端口机制便由此被引入进来。

本地操作系统会给那些有需求的进程分配协议端口(protocol port,即我们常说的端口),每个协议端口由一个正整数标识,如80、139、445等。当目的主机接收到数据包后,将根据报文首部的目的端口号,把数据发送到相应端口,而与此端口相对应的那个进程将会领取数据并等待下一组数据的到来。

端口其实就是队,操作系统为各个进程分配了不同的队,数据包按照目的端口被推入相应的队中,等待被进程取用,在极特殊的情况下,这个队也是有可能溢出的,不过操作系统允许各进程指定和调整自己队的大小。

不只接受数据包的进程需要开启它自己的端口,发送数据包的进程也需要开启端口。这样,数据包中将会标识有源端口,以便接受方能顺利地回传数据包到这个端口。

端口扫描是指人为发送一组端口扫描消息,试图以此了解某台计算机的弱点,并了解其提供的计算机网络服务类型(这些网络服务均与端口号相关)。端口扫描是计算机解密高手喜欢的一种方式。攻击者可以通过它了解到从哪里可探寻到攻击弱点。实质上,端口扫描包括向每个端口发送消息,一次只发送一个消息。接收到的回应类型表示是否在使用该端口并且可由此探寻弱点。

需要注意的是,Nmap并不是每次结果都是准确的,所有的结果是根据目标或目标的防火墙反馈回来的报文,虽然Nmap一直在提高自己的准确度,但也不是可以完全避免的,所以我们可能需要通过多种方式扫描,最后才能确认准确的返回数据。

Nmap支持的扫描技术有十几种,我们每次在进行扫描的时候一般只会采用其中的一种办法。有一个非常有趣的现象,在Nmap中的端口扫描方式中,所有的扫描选项都是以-s<x>形式出现的。若是ACK扫描则是-sA,若是UDP扫描则是-sU。

使用Nmap进行扫描的时候,Nmap会把扫描到的端口信息反馈回来,我们从反馈回来的信息就可以判断目标端口情况,甚至知道目标的安全情况如何。

Nmap提供了6个端口状态,帮助我们了解目标。

发现这一点是端口扫描工具的职责所在,每一个端口就可能会是一次被攻击成功的大门,管理员也不会将一个端口随便关闭,这会使合法用户产生不必要的麻烦。当我们使用Nmap进行端口扫描时,如果端口状态为Open,说明此端口对外为开放状态,确定为Open状态便于我们制定下一步的渗透计划。

当端口关闭的时候Nmap也可以轻而易举地将其检测出来,因为接受了Nmap的探测报文并作出了响应,当然,这也不能忽略是管理员的一个欺骗攻击者的把戏,如果发现没有开放的端口,可以等待一会再次扫描一下可能又呈现开放状态了。如果管理员掌握一定的安全技术,可能会使用防火墙对这些端口进行防护,不过,这并不会阻碍我们发现这个端口,如果被未知或已知的防火墙阻挡访问目标端口,Nmap也会提示“我遇到了一些情况,好像被防火墙挡住了。”

前面讲到掌握一定安全技术的管理员会布置一个防火墙设备或者是通过设置路由器的规则阻止Nmap的扫描,当Nmap遇到防火墙设备或是路由器规则的时候,Nmap的报文就会被过滤达到目标端口,这样就会使Nmap无法判断目标端口到底是否开放了。出现被过滤现象并不代表一定是被某些专业的设备过滤了,也许是因为网络堵塞造成的,建议遇到被过滤状态时分不同的时间段再次进行扫描。

未被过滤状态意味着端口可以访问,但是Nmap并不能判断目标端口处于开放状态还是关闭状态,这里需要重申的是目标端口是否可以访问与是否开放并无太大的联系,例如,关闭的端口也可以接受Nmap发出去的探测报文。需要注意的是,当我们使用ACK扫描时才会呈现出这种状态,这时我们可以换一种扫描方式去进行扫描,以便于进一步确认目标端口是否开放。

开放还是过滤的,如果Nmap发出去的探测报文并没有得到目标端口的相应,那可能会是受到了某些专业设备的阻挡,但这也不是完全一个被过滤的状态,这时Nmap就会呈现出目标端口是开放还是被过滤的。出现这种状态不妨换一种扫描方式进一步确认目标端口是开放还是被过滤的。

该状态用于Nmap不能确定端口是关闭的还是被过滤的。值得注意的是,它只可能出现在IPID Idle扫描中。

 

牢记端口的6种状态,这样可以更加直观方便地获得Nmap的第一手数据。

表3.2所示为本章节所需Nmap命令表,表中加粗命令为本小节所需命令——时序选项。

表3.2 本节所需选项

选  项

解  释

-T

时序选项

-p|-F

常用扫描方式

-sS

TCP SYN扫描

-sT

TCP连接扫描

-sU

UDP扫描

-sN;-sF;-sX

隐蔽扫描

-sA

TCP ACK扫描

-sW

TCP窗口扫描

-sM

TCP Maimon扫描

--scanflags

自定义TCP扫描

-sI

空闲扫描

-sO

IP协议扫描

-b

FTP Bounce扫描

在Nmap中使用-T(0-5)可以启用时序选项,对于时序选项这里有0~5不同的选项。

-T0(偏执的):非常慢的扫描,用于IDS逃避。

-T1(鬼祟的):缓慢的扫描,用于IDS逃避。

-T2(文雅的):降低速度以降低对带宽的消耗,此选项一般不常用。

-T3(普通的):默认,根据目标的反应自动调整时间。

-T4(野蛮的):快速扫描,常用扫描方式,需要在很好的网络环境下进行扫描,请求可能会淹没目标。

-T5(疯狂的):极速扫描,这种扫描方式以牺牲准确度来提升扫描速度。

Nmap使用-T0选项对目标进行扫描。

root@Wing:~# nmap -T0 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-10 17:37 CST
Nmap scan report for 192.168.126.131
Host is up (0.00036s latency).
Not shown: 977 closed ports
PORT   STATE SERVICE
21/tcp  open ftp
22/tcp  open ssh
23/tcp  open telnet
25/tcp  open smtp
53/tcp  open domain
80/tcp  open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
1099/tcp open rmiregistry
1524/tcp open ingreslock
2049/tcp open nfs
2121/tcp open ccproxy-ftp
3306/tcp open mysql
5432/tcp open postgresql
5900/tcp open vnc
6000/tcp open X11
6667/tcp open irc
8009/tcp open ajp13
8180/tcp open unknown
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 76.15 seconds
root@Wing:~#


Nmap使用-T1选项对目标进行扫描。

root@Wing:~# nmap -T1 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-10 17:38 CST
Nmap scan report for 192.168.126.131
Host is up (0.00036s latency).
Not shown: 977 closed ports
PORT   STATE SERVICE
21/tcp  open ftp
22/tcp  open ssh
23/tcp  open telnet
25/tcp  open smtp
53/tcp  open domain
80/tcp  open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
1099/tcp open rmiregistry
1524/tcp open ingreslock
2049/tcp open nfs
2121/tcp open ccproxy-ftp
3306/tcp open mysql
5432/tcp open postgresql
5900/tcp open vnc
6000/tcp open X11
6667/tcp open irc
8009/tcp open ajp13
8180/tcp open unknown
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 53.15 seconds
root@Wing:~# 


Nmap使用-T2选项对目标进行扫描。

root@Wing:~# nmap -T2 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-10 17:40 CST
Nmap scan report for 192.168.126.131
Host is up (0.00036s latency).
Not shown: 977 closed ports
PORT   STATE SERVICE
21/tcp  open ftp
22/tcp  open ssh
23/tcp  open telnet
25/tcp  open smtp
53/tcp  open domain
80/tcp  open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
1099/tcp open rmiregistry
1524/tcp open ingreslock
2049/tcp open nfs
2121/tcp open ccproxy-ftp
3306/tcp open mysql
5432/tcp open postgresql
5900/tcp open vnc
6000/tcp open X11
6667/tcp open irc
8009/tcp open ajp13
8180/tcp open unknown
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 36.15 seconds
root@Wing:~# 


Nmap使用-T3选项对目标进行扫描。

root@Wing:~# nmap -T3 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-10 17:47 CST
Nmap scan report for 192.168.126.131
Host is up (0.00036s latency).
Not shown: 977 closed ports
PORT   STATE SERVICE
21/tcp  open ftp
22/tcp  open ssh
23/tcp  open telnet
25/tcp  open smtp
53/tcp  open domain
80/tcp  open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
1099/tcp open rmiregistry
1524/tcp open ingreslock
2049/tcp open nfs
2121/tcp open ccproxy-ftp
3306/tcp open mysql
5432/tcp open postgresql
5900/tcp open vnc
6000/tcp open X11
6667/tcp open irc
8009/tcp open ajp13
8180/tcp open unknown
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 12.17 seconds
root@Wing:~# 


Nmap使用-T4选项对目标进行扫描。

root@Wing:~# nmap -T4 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-10 17:47 CST
Nmap scan report for 192.168.126.131
Host is up (0.00034s latency).
Not shown: 977 closed ports
PORT   STATE SERVICE
21/tcp  open ftp
22/tcp  open ssh
23/tcp  open telnet
25/tcp  open smtp
53/tcp  open domain
80/tcp  open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
1099/tcp open rmiregistry
1524/tcp open ingreslock
2049/tcp open nfs
2121/tcp open ccproxy-ftp
3306/tcp open mysql
5432/tcp open postgresql
5900/tcp open vnc
6000/tcp open X11
6667/tcp open irc
8009/tcp open ajp13
8180/tcp open unknown
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds
root@Wing:~# 


Nmap使用-T5选项对目标进行扫描。

root@Wing:~# nmap -T5 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-10 17:47 CST
Nmap scan report for 192.168.126.131
Host is up (0.00036s latency).
Not shown: 977 closed ports
PORT   STATE SERVICE
21/tcp  open ftp
22/tcp  open ssh
23/tcp  open telnet
25/tcp  open smtp
53/tcp  open domain
80/tcp  open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
1099/tcp open rmiregistry
1524/tcp open ingreslock
2049/tcp open nfs
2121/tcp open ccproxy-ftp
3306/tcp open mysql
5432/tcp open postgresql
5900/tcp open vnc
6000/tcp open X11
6667/tcp open irc
8009/tcp open ajp13
8180/tcp open unknown
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds
root@Wing:~# 


Nmap的-T0~-T5的选项是一个由慢到快的扫描方式。其中,慢的扫描多用于IDS逃避。现在的带宽已经足够了,我们就很少用减少带宽的目的进行慢速扫描。在允许的情况下,我们一般用-T4进行扫描,这样保证了可以在最少的时间内扫描到尽可能精确的数据。

 

-T选项的单一使用并不会有很好的效果,配合-F选项则可以很大程度的提高扫描速度与效果,但切不可追求过快的扫描速度,这会使得到的数据得不到保证。

表3.3所示为本章节所需Nmap命令表,表中加粗命令为本小节所需命令——常用扫描方式。

表3.3 本节所需命令

选  项

解  释

-T

时序选项

-p|-F

常用扫描方式

-sS

TCP SYN扫描

-sT

TCP连接扫描

-sU

UDP扫描

-sN;-sF;-sX

隐蔽扫描

-sA

TCP ACK扫描

-sW

TCP窗口扫描

-sM

TCP Maimon扫描

--scanflags

自定义TCP扫描

-sI

空闲扫描

-sO

IP协议扫描

-b

FTP Bounce扫描

在默认情况下,Nmap对端口的扫描方式是按照从小到大进行的,或者是参照nmap-services中文件列出的端口进行扫描。

通过该选项可以指定一个您想要扫描的端口号,可以指定一个唯一的值也可以指定一个范围,如80~998。

root@Wing:~# nmap -p 445 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-10 19:20 CST
Nmap scan report for 192.168.126.131
Host is up (0.00032s latency).
PORT  STATE SERVICE
445/tcp open microsoft-ds
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds
root@Wing:~# nmap -p 445-1000 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-10 19:20 CST
Nmap scan report for 192.168.126.131
Host is up (0.00027s latency).
Not shown: 552 closed ports
PORT  STATE SERVICE
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds
root@Wing:~# 


如果既想扫描TCP端口又想扫描UDP端口,可以在端口号前加上“T:”或“U:”,分别代表TCP协议与UDP协议。注意,要既扫描UDP又扫描TCP,必须指定-sU以及至少一个TCP扫描类型(如-sS,-sF,或者–sT)。如果没有给定协议限定符,端口号会被加到所有协议列表。

root@Wing:~# nmap -sS -p T:111,U:445 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-10 20:03 CST
Nmap scan report for 192.168.126.131
Host is up (0.00029s latency).
PORT  STATE SERVICE
111/tcp open rpcbind
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 2.12 seconds
root@Wing:~# 


使用该选项可以快速地扫描端口,但并不是所有的端口都会扫描,只会扫描有限的端口,在Nmap中nmap-services包含了默认扫描的端口,也可以用--datadir选项指定自己的nmap-services文件。

root@Wing:~# nmap -F 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-10 20:10 CST
Nmap scan report for 192.168.126.131
Host is up (0.00031s latency).
Not shown: 82 closed ports
PORT   STATE SERVICE
21/tcp  open ftp
22/tcp  open ssh
23/tcp  open telnet
25/tcp  open smtp
53/tcp  open domain
80/tcp  open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
513/tcp open login
514/tcp open shell
2049/tcp open nfs
2121/tcp open ccproxy-ftp
3306/tcp open mysql
5432/tcp open postgresql
5900/tcp open vnc
6000/tcp open X11
8009/tcp open ajp13
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds
root@Wing:~# 


使用该选项不会对端口进行随机顺序扫描,默认情况下,Nmap是随机顺序扫描端口的,一般我们也会选择Nmap进行随机扫描,但也可以使用这个选项来进行排序。

Nmap对端口开放概率的调查结果保存在nmap-services中,在这之中罗列的是开发概率最高的1000个TCP端口,这个功能便于我们发现具体而又有用的端口。

root@Wing:~# nmap --top-ports 100 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-11 13:29 CST
Nmap scan report for 192.168.126.131
Host is up (0.00021s latency).
Not shown: 82 closed ports
PORT   STATE SERVICE
21/tcp  open ftp
22/tcp  open ssh
23/tcp  open telnet
25/tcp  open smtp
53/tcp  open domain
80/tcp  open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
513/tcp open login
514/tcp open shell
2049/tcp open nfs
2121/tcp open ccproxy-ftp
3306/tcp open mysql
5432/tcp open postgresql
5900/tcp open vnc
6000/tcp open X11
8009/tcp open ajp13
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds
root@Wing:~# 


以上输出结果为扫描100个开放率最高的端口。

通过Nmap官方调查的端口开放概率,使用该选项会扫描指定一定概率以上的端口,它跟--top-porst选项较为相似,只是这里的参数作为频率来使用,具体范围在nmap-services文件中已有详细说明。

 

-p选项后面可以直接跟端口号,不需要空格,例如-p80的形式。但大多数情况下,为了Nmap语句的严谨性或便于调试,建议使用空格进行分割。

表3.4所示为本章节所需Nmap命令表,表中加粗命令为本小节所需命令——TCP SYN扫描。

表3.4 本节所需命令

选  项

解  释

-T

时序选项

-p|-F

常用扫描方式

-sS

TCP SYN扫描

-sT

TCP 连接扫描

-sU

UDP扫描

-sN;-sF;-sX

隐蔽扫描

-sA

TCP ACK扫描

-sW

TCP窗口扫描

-sM

TCP Maimon扫描

--scanflags

自定义TCP扫描

-sI

空闲扫描

-sO

IP协议扫描

-b

FTP Bounce扫描

-sS扫描方式是比较常用的一种扫描方式,这得益于它的扫描速度,平均一秒可以扫描上千个端口。SYN的扫描方式是相对来说比较隐蔽的扫描方式,很难被防火墙或管理员发现,因为它并不会进行TCP的链接,在前面讲到端口开放状态时,如果发现目标端口出现被开放或过滤的情况,可以考虑使用SYN扫描的方式进行扫描,SYN扫描可以很明确地区分出端口的开放状态,这是一种高效而且非常有用的扫描方式。

它常常被称为半开放扫描,因为它不打开一个完全的TCP连接即3次握手。TCP连接扫描会调用打开目标上相关端口的连接并完成3次握手,这样做有可能被目标主机察觉,如果使用TCP SYN扫描的话,则不会轻易被目标主机发现。

目标主机端口是关闭的情况下,Nmap的工作流程为向目标主机发送一个SYN包请求连接,如果收到RST包则表明无法连接目标主机,即目标主机端口关闭。如果目标主机端口是开放的,Nmap的工作流程为向目标主机发送一个SYN包,请求连接,目标主机接收到请求后会响应一个SYN/ACK包,当Nmap收到目标主机的响应后,则向目标发送一个RST替代ACK包,连接结束,则此时3次握手并没有完成。

root@Wing:~# nmap -sS 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-10 21:43 CST
Nmap scan report for 192.168.126.131
Host is up (0.00029s latency).
Not shown: 977 closed ports
PORT   STATE SERVICE
21/tcp  open ftp
22/tcp  open ssh
23/tcp  open telnet
25/tcp  open smtp
53/tcp  open domain
80/tcp  open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
1099/tcp open rmiregistry
1524/tcp open ingreslock
2049/tcp open nfs
2121/tcp open ccproxy-ftp
3306/tcp open mysql
5432/tcp open postgresql
5900/tcp open vnc
6000/tcp open X11
6667/tcp open irc
8009/tcp open ajp13
8180/tcp open unknown
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds
root@Wing:~# 


在SYN扫描不能用时,TCP连接扫描会使用默认的TCP扫描。

表3.5所示为本章节所需Nmap命令表,表中加粗命令为本小节所需命令——TCP连接扫描。

表3.5 本节所需命令

选  项

解  释

-T

时序选项

-p|-F

常用扫描方式

-sS

TCP SYN扫描

-sT

TCP连接扫描

-sU

UDP扫描

-sN;-sF;-sX

隐蔽扫描

-sA

TCP ACK扫描

-sW

TCP窗口扫描

-sM

TCP Maimon扫描

--scanflags

自定义TCP扫描

-sI

空闲扫描

-sO

IP协议扫描

-b

FTP Bounce扫描

-sT选项是用于SYN扫描不能使用的时候,它是TCP连接扫描,因为Nmap会在每个端口上完成3次握手,基本不会对目标主机进行泛洪攻击或导致目标主机崩溃,所以TCP连接扫描是端口扫描中最基础、最稳定的扫描方式。

当SYN扫描可用时,它通常是更好的选择。因为Nmap对高层的connect()调用比对原始报文控制更少,所以前者效率较低。TCP扫描不仅花更长时间,需要更多报文得到同样信息,目标机也更可能记录下连接。IDS(入侵检测系统)可以捕获两者,但大部分机器没有这样的警报系统。许多普通UNIX系统上的服务会在syslog留下记录,有时候是一条加密的错误消息。如果管理员在日志里看到来自同一系统的一堆连接尝试,他应该意识到他的系统被扫描了。

Nmap发送一个是SYN包请求,如果收到RST包则表示目标端口是关闭的,如果目标主机接收到请求后响应了一个SYN+ACK包,Nmap向目标主机发送一个ACK包,确认连接,则表示目标端口是开放的。

root@Wing:~# nmap -sT 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-10 21:48 CST
Nmap scan report for 192.168.126.131
Host is up (0.012s latency).
Not shown: 977 closed ports
PORT   STATE SERVICE
21/tcp  open ftp
22/tcp  open ssh
23/tcp  open telnet
25/tcp  open smtp
53/tcp  open domain
80/tcp  open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
1099/tcp open rmiregistry
1524/tcp open ingreslock
2049/tcp open nfs
2121/tcp open ccproxy-ftp
3306/tcp open mysql
5432/tcp open postgresql
5900/tcp open vnc
6000/tcp open X11
6667/tcp open irc
8009/tcp open ajp13
8180/tcp open unknown
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.32 seconds
root@Wing:~# 


表3.6所示为本章节所需Nmap命令表,表中加粗命令为本小节所需命令——UDP扫描。

使用-sU选项可以进行UDP扫描。UDP扫描是非常慢的,很多的安全审核人员忽略了这些端口,这显然是一个错误的做法。

UDP扫描显然也是一种“投机取巧”的办法,很多管理员会忽略这些端口,这是不争的事实,UDP扫描或许可以发现更多可以被黑客利用的端口。UDP扫描发送空的UDP报文到目标端口,这里需要注意的是,UDP头是没有任何数据的,这就使Nmap可以轻松辨别目标端口的开放状态,如果返回ICMP端口不可到达错误就可以认定该端口是关闭的,其他的就可以被认定是被过滤的,如果被响应了则判断目标端口是开放状态。

表3.6 本节所需命令

选  项

解  释

-T

时序选项

-p|-F

常用扫描方式

-sS

TCP SYN扫描

-sT

TCP连接扫描

-sU

UDP扫描

-sN;-sF;-sX

隐蔽扫描

-sA

TCP ACK扫描

-sW

TCP窗口扫描

-sM

TCP Maimon扫描

--scanflags

自定义TCP扫描

-sI

空闲扫描

-sO

IP协议扫描

-b

FTP Bounce扫描

UDP端口扫描通过发送UDP数据包到目标主机并等待相应,它将判断目标端口是否是开放状态,如果目标返回ICMP不可达的错误,说明端口是关闭的,如果得到正确的适当的响应,则说明端口是开放的。

root@Wing:~# nmap -sU -p 80-500 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-11 10:41 CST
Nmap scan report for 192.168.126.131
Host is up (0.00029s latency).
PORT  STATE SERVICE
80/udp closed http
111/udp open  rpcbind
445/udp closed microsoft-ds
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
root@Wing:~# 


由于UDP扫描是相当慢的,所以在这里使用-p选项指定了需要扫描的端口,如果从第一个端口开始扫描是需要花费大量时间的。

 

-p选项指定多个端口的时候可以使用逗号进行端口与端口之间的分割而不是用空格进行分割。

表3.7所示为本章节所需Nmap命令表,表中加粗命令为本小节所需命令——隐蔽扫描。

表3.7 本节所需命令

选  项

解  释

-T

时序选项

-p|-F

常用扫描方式

-sS

TCP SYN扫描

-sT

TCP连接扫描

-sU

UDP扫描

-sN;-sF;-sX

隐蔽扫描

-sA

TCP ACK扫描

-sW

TCP窗口扫描

-sM

TCP Maimon扫描

--scanflags

自定义TCP扫描

-sI

空闲扫描

-sO

IP协议扫描

-b

FTP Bounce扫描

隐蔽扫描有3个选项,分别是-sN、-sF、-sX。

-sN是Null扫描,是通过发送非常规的TCP通信数据包对计算机进行探测,很多情况下Null扫描与Xmas扫描恰好相反,因为Null扫描不会标记任何数据包,若目标主机的相应端口是关闭的,会响应一个RST数据包,若目标端口是开放的则不会响应任何信息。

-sF是FIN扫描,当我们使用TCP SYN扫描时可能会被目标主机的防火墙发现,会阻止SYN数据包,这时我们使用TCP FIN扫描方式会有很好的穿透效果,因为TCP FIN扫描并不需要完成TCP握手。TCP FIN扫描就是向目标端口发送一个FIN包,如果收到目标响应的RST包,则说明目标端口是开放的,如果没有收到RST包则说明目标端口是关闭的。

-sX是Xmas扫描,数据包的FIN、PSH和URG标记位置打开,即标志为1,根据RFC 793规定如果目标主机端口是开放的则会响应一个RST标志包。

这些扫描方式会躲过一些无状态防火墙的过滤,这比前面章节说到的SYN扫描、UDP扫描会有更好的效果,因为这种方式要比SYN扫描方式还要隐蔽,如果扫描不出结果或出现被过滤的情况,可以使用该扫描方式进行扫描。

Stnd001  注意

如果系统不遵循RFC 793,不管端口是否是开放还是关闭的,都会响应RST。

Nmap使用-sN选项扫描。

root@Wing:~# nmap -sN 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-11 11:15 CST
Nmap scan report for 192.168.126.131
Host is up (0.00025s latency).
Not shown: 977 closed ports
PORT   STATE      SERVICE
21/tcp  open|filtered ftp
22/tcp  open|filtered ssh
23/tcp  open|filtered telnet
25/tcp  open|filtered smtp
53/tcp  open|filtered domain
80/tcp  open|filtered http
111/tcp open|filtered rpcbind
139/tcp open|filtered netbios-ssn
445/tcp open|filtered microsoft-ds
512/tcp open|filtered exec
513/tcp open|filtered login
514/tcp open|filtered shell
1099/tcp open|filtered rmiregistry
1524/tcp open|filtered ingreslock
2049/tcp open|filtered nfs
2121/tcp open|filtered ccproxy-ftp
3306/tcp open|filtered mysql
5432/tcp open|filtered postgresql
5900/tcp open|filtered vnc
6000/tcp open|filtered X11
6667/tcp open|filtered irc
8009/tcp open|filtered ajp13
8180/tcp open|filtered unknown
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 1.34 seconds
root@Wing:~# 


Nmap使用-sF选项扫描。

root@Wing:~# nmap -sF 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-11 11:16 CST
Nmap scan report for 192.168.126.131
Host is up (0.0013s latency).
Not shown: 977 closed ports
PORT   STATE      SERVICE
21/tcp  open|filtered ftp
22/tcp  open|filtered ssh
23/tcp  open|filtered telnet
25/tcp  open|filtered smtp
53/tcp  open|filtered domain
80/tcp  open|filtered http
111/tcp open|filtered rpcbind
139/tcp open|filtered netbios-ssn
445/tcp open|filtered microsoft-ds
512/tcp open|filtered exec
513/tcp open|filtered login
514/tcp open|filtered shell
1099/tcp open|filtered rmiregistry
1524/tcp open|filtered ingreslock
2049/tcp open|filtered nfs
2121/tcp open|filtered ccproxy-ftp
3306/tcp open|filtered mysql
5432/tcp open|filtered postgresql
5900/tcp open|filtered vnc
6000/tcp open|filtered X11
6667/tcp open|filtered irc
8009/tcp open|filtered ajp13
8180/tcp open|filtered unknown
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 1.47 seconds
root@Wing:~# 


Nmap使用-sX选项扫描。

root@Wing:~# nmap -sX 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-11 11:17 CST
Nmap scan report for 192.168.126.131
Host is up (0.00034s latency).
Not shown: 977 closed ports
PORT   STATE     SERVICE
21/tcp  open|filtered ftp
22/tcp  open|filtered ssh
23/tcp  open|filtered telnet
25/tcp  open|filtered smtp
53/tcp  open|filtered domain
80/tcp  open|filtered http
111/tcp open|filtered rpcbind
139/tcp open|filtered netbios-ssn
445/tcp open|filtered microsoft-ds
512/tcp open|filtered exec
513/tcp open|filtered login
514/tcp open|filtered shell
1099/tcp open|filtered rmiregistry
1524/tcp open|filtered ingreslock
2049/tcp open|filtered nfs
2121/tcp open|filtered ccproxy-ftp
3306/tcp open|filtered mysql
5432/tcp open|filtered postgresql
5900/tcp open|filtered vnc
6000/tcp open|filtered X11
6667/tcp open|filtered irc
8009/tcp open|filtered ajp13
8180/tcp open|filtered unknown
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 1.46 seconds
root@Wing:~# 


表3.8所示为本章节所需Nmap命令表,表中加粗命令为本小节所需命令——TCP ACK扫描。

使用-sA选项启用TCP ACK扫描,TCP ACK扫描有一个非常致命的缺点,它不能确定端口是否是开放的还是被过滤的。

ACK扫描探测报文只设置ACK标志位(除非使用–scanflags)。当扫描未被过滤的系统时, open(开放的)和closed(关闭的)端口都会返回RST报文。当Nmap把它们标记为unfiltered(未被过滤的),意思是ACK报文不能到达,但至于它们是open(开放的)或者是closed(关闭的)无法确定。不响应的端口或者发送特定的ICMP错误消息的端口都会被标记为filtered(被过滤的)。

表3.8 本节所需命令

选  项

解  释

-T

时序选项

-p|-F

常用扫描方式

-sS

TCP SYN扫描

-sT

TCP连接扫描

-sU

UDP扫描

-sN;-sF;-sX

隐蔽扫描

-sA

TCP ACK扫描

-sW

TCP窗口扫描

-sM

TCP Maimon扫描

--scanflags

自定义TCP扫描

-sI

空闲扫描

-sO

IP协议扫描

-b

FTP Bounce扫描

TCP ACK扫描和TCP SYN扫描类似,这种扫描方法是向目标主机一个端口发送一个只有ACK标志的TCP数据,如果目标主机响应的端口是开启状态,则会返回一个TCP RST数据包。

root@Wing:~# nmap -sA -v 192.168.121.1

Starting Nmap 6.47 ( http://nmap.org

 ) at 2015-06-28 14:17 CST
Initiating Ping Scan at 14:17
Scanning 192.168.121.1 [4 ports]
Completed Ping Scan at 14:17, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 14:17
Completed Parallel DNS resolution of 1 host. at 14:17, 0.01s elapsed
Initiating ACK Scan at 14:17
Scanning 192.168.121.1 [1000 ports]
Completed ACK Scan at 14:17, 0.04s elapsed (1000 total ports)
Nmap scan report for 192.168.121.1
Host is up (0.00020s latency).
All 1000 scanned ports on 192.168.121.1 are unfiltered

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds
      Raw packets sent: 1004 (40.152KB) | Rcvd: 1001 (40.028KB)
root@Wing:~# 


在扫描结果中我们得知1000个端口都没有被过滤(unfiltered),这说明Nmap无法确定这些端口是开放的还是关闭的,若需要确定目标端口是否是开放状态则需要用其他扫描方式进行确认。

表3.9所示为本章节所需Nmap命令表,表中加粗命令为本小节所需命令——TCP窗口扫描。

表3.9 本节所需命令

选  项

解  释

-T

时序选项

-p|-F

常用扫描方式

-sS

TCP SYN扫描

-sT

TCP连接扫描

-sU

UDP扫描

-sN;-sF;-sX

隐蔽扫描

-sA

TCP ACK扫描

-sW

TCP窗口扫描

-sM

TCP Maimon扫描

--scanflags

自定义TCP扫描

-sI

空闲扫描

-sO

IP协议扫描

-b

FTP Bounce扫描

使用-sW选项可以启用窗口扫描,即Windows扫描,这里的Windows并不是指Windows系统,而是扫描方式的一种,窗口扫描方式与ACK扫描方式的原理几乎是一样的,它通过检查返回的RST报文的TCP窗口域判断目标端口是否是开放的。

有时,开放端口用正数表示窗口大小,关闭端口的窗口大小为0,所以,当收到RST包时,根据TCP窗口的值是正数还是0来判断目标端口是开放还是关闭的。

root@Wing:~# nmap -sW -v -F 192.168.121.1

Starting Nmap 6.47 ( http://nmap.org

 ) at 2015-06-28 14:24 CST
Initiating Ping Scan at 14:24
Scanning 192.168.121.1 [4 ports]
Completed Ping Scan at 14:24, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 14:24
Completed Parallel DNS resolution of 1 host. at 14:24, 0.01s elapsed
Initiating Window Scan at 14:24
Scanning 192.168.121.1 [100 ports]
Discovered open port 53/tcp on 192.168.121.1
Discovered open port 554/tcp on 192.168.121.1
Discovered open port 1025/tcp on 192.168.121.1
Discovered open port 443/tcp on 192.168.121.1
Discovered open port 25/tcp on 192.168.121.1
Discovered open port 1720/tcp on 192.168.121.1
Discovered open port 23/tcp on 192.168.121.1
Discovered open port 3306/tcp on 192.168.121.1
Discovered open port 993/tcp on 192.168.121.1
Discovered open port 21/tcp on 192.168.121.1
Discovered open port 113/tcp on 192.168.121.1
Discovered open port 143/tcp on 192.168.121.1
Discovered open port 80/tcp on 192.168.121.1
Discovered open port 995/tcp on 192.168.121.1
Discovered open port 5900/tcp on 192.168.121.1
Discovered open port 111/tcp on 192.168.121.1
Discovered open port 445/tcp on 192.168.121.1
Discovered open port 22/tcp on 192.168.121.1
Discovered open port 1723/tcp on 192.168.121.1
Discovered open port 199/tcp on 192.168.121.1
Discovered open port 110/tcp on 192.168.121.1
Discovered open port 8888/tcp on 192.168.121.1
Discovered open port 135/tcp on 192.168.121.1
Discovered open port 587/tcp on 192.168.121.1
Discovered open port 139/tcp on 192.168.121.1
Discovered open port 8080/tcp on 192.168.121.1
Discovered open port 3389/tcp on 192.168.121.1
Discovered open port 49152/tcp on 192.168.121.1
Discovered open port 8443/tcp on 192.168.121.1
Discovered open port 106/tcp on 192.168.121.1
Discovered open port 1433/tcp on 192.168.121.1
Discovered open port 8009/tcp on 192.168.121.1
Discovered open port 26/tcp on 192.168.121.1
Discovered open port 5051/tcp on 192.168.121.1
Discovered open port 13/tcp on 192.168.121.1
Discovered open port 7/tcp on 192.168.121.1
Discovered open port 5631/tcp on 192.168.121.1
Discovered open port 119/tcp on 192.168.121.1
Discovered open port 49153/tcp on 192.168.121.1
Discovered open port 8008/tcp on 192.168.121.1
Discovered open port 5190/tcp on 192.168.121.1
Discovered open port 1900/tcp on 192.168.121.1
Discovered open port 1029/tcp on 192.168.121.1
Discovered open port 179/tcp on 192.168.121.1
Discovered open port 631/tcp on 192.168.121.1
Discovered open port 3000/tcp on 192.168.121.1
Discovered open port 10000/tcp on 192.168.121.1
Discovered open port 3128/tcp on 192.168.121.1
Discovered open port 1026/tcp on 192.168.121.1
Discovered open port 5432/tcp on 192.168.121.1
Discovered open port 4899/tcp on 192.168.121.1
Discovered open port 6646/tcp on 192.168.121.1
Discovered open port 5800/tcp on 192.168.121.1
Discovered open port 5666/tcp on 192.168.121.1
Discovered open port 465/tcp on 192.168.121.1
Discovered open port 990/tcp on 192.168.121.1
Discovered open port 5009/tcp on 192.168.121.1
Discovered open port 513/tcp on 192.168.121.1
Discovered open port 2000/tcp on 192.168.121.1
Discovered open port 6001/tcp on 192.168.121.1
Discovered open port 3986/tcp on 192.168.121.1
Discovered open port 9/tcp on 192.168.121.1
Discovered open port 548/tcp on 192.168.121.1
Discovered open port 32768/tcp on 192.168.121.1
Discovered open port 37/tcp on 192.168.121.1
Discovered open port 389/tcp on 192.168.121.1
Discovered open port 79/tcp on 192.168.121.1
Discovered open port 543/tcp on 192.168.121.1
Discovered open port 646/tcp on 192.168.121.1
Discovered open port 49156/tcp on 192.168.121.1
Discovered open port 8081/tcp on 192.168.121.1
Discovered open port 5000/tcp on 192.168.121.1
Discovered open port 49157/tcp on 192.168.121.1
Discovered open port 1755/tcp on 192.168.121.1
Discovered open port 7070/tcp on 192.168.121.1
Discovered open port 873/tcp on 192.168.121.1
Discovered open port 1028/tcp on 192.168.121.1
Discovered open port 81/tcp on 192.168.121.1
Discovered open port 5060/tcp on 192.168.121.1
Discovered open port 5357/tcp on 192.168.121.1
Discovered open port 2001/tcp on 192.168.121.1
Discovered open port 2049/tcp on 192.168.121.1
Discovered open port 88/tcp on 192.168.121.1
Discovered open port 6000/tcp on 192.168.121.1
Discovered open port 515/tcp on 192.168.121.1
Discovered open port 49154/tcp on 192.168.121.1
Discovered open port 427/tcp on 192.168.121.1
Discovered open port 2121/tcp on 192.168.121.1
Discovered open port 5101/tcp on 192.168.121.1
Discovered open port 8000/tcp on 192.168.121.1
Discovered open port 1027/tcp on 192.168.121.1
Discovered open port 144/tcp on 192.168.121.1
Discovered open port 544/tcp on 192.168.121.1
Discovered open port 1110/tcp on 192.168.121.1
Discovered open port 444/tcp on 192.168.121.1
Discovered open port 2717/tcp on 192.168.121.1
Discovered open port 9100/tcp on 192.168.121.1
Discovered open port 514/tcp on 192.168.121.1
Discovered open port 49155/tcp on 192.168.121.1
Discovered open port 9999/tcp on 192.168.121.1
Completed Window Scan at 14:24, 0.02s elapsed (100 total ports)
Nmap scan report for 192.168.121.1
Host is up (0.00049s latency).
PORT   STATE SERVICE
7/tcp   open echo
9/tcp   open discard
13/tcp  open daytime
21/tcp  open ftp
22/tcp  open ssh
23/tcp  open telnet
25/tcp  open smtp
26/tcp  open rsftp
37/tcp  open time
53/tcp  open domain
79/tcp  open finger
80/tcp  open http
81/tcp  open hosts2-ns
88/tcp  open kerberos-sec
106/tcp  open pop3pw
110/tcp  open pop3
111/tcp  open rpcbind
113/tcp  open ident
119/tcp  open nntp
135/tcp  open msrpc
139/tcp  open netbios-ssn
143/tcp  open imap
144/tcp  open news
179/tcp  open bgp
199/tcp  open smux
389/tcp  open ldap
427/tcp  open svrloc
443/tcp  open https
444/tcp  open snpp
445/tcp  open microsoft-ds
465/tcp  open smtps
513/tcp  open login
514/tcp  open shell
515/tcp  open printer
543/tcp  open klogin
544/tcp  open kshell
548/tcp  open afp
554/tcp  open rtsp
587/tcp  open submission
631/tcp  open ipp
646/tcp  open ldp
873/tcp  open rsync
990/tcp  open ftps
993/tcp  open imaps
995/tcp  open pop3s
1025/tcp open NFS-or-IIS
1026/tcp open LSA-or-nterm
1027/tcp open IIS
1028/tcp open unknown
1029/tcp open ms-lsa
1110/tcp open nfsd-status
1433/tcp open ms-sql-s
1720/tcp open H.323/Q.931
1723/tcp open pptp
1755/tcp open wms
1900/tcp open upnp
2000/tcp open cisco-sccp
2001/tcp open dc
2049/tcp open nfs
2121/tcp open ccproxy-ftp
2717/tcp open pn-requester
3000/tcp open ppp
3128/tcp open squid-http
3306/tcp open mysql
3389/tcp open ms-wbt-server
3986/tcp open mapper-ws_ethd
4899/tcp open radmin
5000/tcp open upnp
5009/tcp open airport-admin
5051/tcp open ida-agent
5060/tcp open sip
5101/tcp open admdog
5190/tcp open aol
5357/tcp open wsdapi
5432/tcp open postgresql
5631/tcp open pcanywheredata
5666/tcp open nrpe
5800/tcp open vnc-http
5900/tcp open vnc
6000/tcp open X11
6001/tcp open X11:1
6646/tcp open unknown
7070/tcp open realserver
8000/tcp open http-alt
8008/tcp open http
8009/tcp open ajp13
8080/tcp open http-proxy
8081/tcp open blackice-icecap
8443/tcp open https-alt
8888/tcp open sun-answerbook
9100/tcp open jetdirect
9999/tcp open abyss
10000/tcp open snet-sensor-mgmt
32768/tcp open filenet-tms
49152/tcp open unknown
49153/tcp open unknown
49154/tcp open unknown
49155/tcp open unknown
49156/tcp open unknown
49157/tcp open unknown

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds
      Raw packets sent: 104 (4.152KB) | Rcvd: 101 (4.028KB)
root@Wing:~# 


从输出的结果来看是不准确的,如果扫描的端口都是开放状态或者只有少数几个是关闭状态的那就非常可疑了,若100个端口里面只有2个端口是关闭的,则这2个端口也有可能是开放的,这种扫描方式获得的结果可能是不准确的。

如图3.1所示,可以看到窗口大小为32767是正数,该包是HTTP服务(80端口)响应的,这表示当前的端口是开放的。

图片 10

▲图3.1 查看端口开放状态

表3.10所示为本章节所需Nmap命令表,表中加粗命令为本小节所需命令——TCP Maimon扫描。

使用-sM选项就可以启用TCP Maimon扫描。Maimon扫描是用它的发现者Uriel Maimon命名的。他在Phrack Magazine issue #49 (November 1996)中描述了这一技术。Nmap在两期后加入了这一技术。这项技术和Null、FIN及Xmas扫描完全一样,除了探测报文是FIN/ACK。根据RFC 793 (TCP),无论端口开放或者关闭,都应该对这样的探测响应RST报文。然而,Uriel注意到如果端口开放,许多基于BSD的系统只是丢弃该探测报文。

表3.10 本节所需命令

选  项

解  释

-T

时序选项

-p|-F

常用扫描方式

-sS

TCP SYN扫描

-sT

TCP连接扫描

-sU

UDP扫描

-sN;-sF;-sX

隐蔽扫描

-sA

TCP ACK扫描

-sW

TCP窗口扫描

-sM

TCP Maimon扫描

--scanflags

自定义TCP扫描

-sI

空闲扫描

-sO

IP协议扫描

-b

FTP Bounce扫描

root@Wing:~# nmap -sM -T4 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-11 12:32 CST
Nmap scan report for 192.168.126.131
Host is up (0.00024s latency).
All 1000 scanned ports on 192.168.126.131 are closed
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds
root@Wing:~# 


表3.11所示为本章节所需Nmap命令表,表中加粗命令为本小节所需命令——自定义TCP扫描。

表3.11 本节所需命令

选  项

解  释

-T

时序选项

-p|-F

常用扫描方式

-sS

TCP SYN扫描

-sT

TCP连接扫描

-sU

UDP扫描

-sN;-sF;-sX

隐蔽扫描

-sA

TCP ACK扫描

-sW

TCP窗口扫描

-sM

TCP Maimon扫描

--scanflags

自定义TCP扫描

-sI

空闲扫描

-sO

IP协议扫描

-b

FTP Bounce扫描

使用--scanflags选项可以启用自定义TCP扫描,这属于Nmap高级用法的一种,Nmap还有很多高级用法本书都会一一介绍,该选项可以通过指定任意的TCP标志位来进行扫描,这会让读者有意外的收获。

--scanflags选项可以是一个数字标记值,如9(PSH和FIN),但使用字符名更容易些。只要是URG、ACK、PSH、RST、SYN、FIN的任何组合就可以。例如,--scanflags URGACKPSH RSTSYNFIN设置了所有标志位,但是这对扫描没有太大用处。标志位的顺序不重要,并且标志位之间没有空格。

除了使用指定的TCP标志位,Nmap会和基本的扫描类型一样工作,若不指定基本类型Nmap就会使用SYN扫描。

root@Wing:~# nmap -sT --scanflags SYNURG 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-11 12:49 CST
Nmap scan report for 192.168.126.131
Host is up (0.016s latency).
Not shown: 977 closed ports
PORT   STATE SERVICE
21/tcp  open ftp
22/tcp  open ssh
23/tcp  open telnet
25/tcp  open smtp
53/tcp  open domain
80/tcp  open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
1099/tcp open rmiregistry
1524/tcp open ingreslock
2049/tcp open nfs
2121/tcp open ccproxy-ftp
3306/tcp open mysql
5432/tcp open postgresql
5900/tcp open vnc
6000/tcp open X11
6667/tcp open irc
8009/tcp open ajp13
8180/tcp open unknown
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.26 seconds
root@Wing:~# 


一般我们在非一般场景使用该选项。

表3.12所示为本章节所需Nmap命令表,表中加粗命令为本小节所需命令——空闲扫描。

表3.12 本节所需命令

选  项

解  释

-T

时序选项

-p|-F

常用扫描方式

-sS

TCP SYN扫描

-sT

TCP连接扫描

-sU

UDP扫描

-sN;-sF;-sX

隐蔽扫描

-sA

TCP ACK扫描

-sW

TCP窗口扫描

-sM

TCP Maimon扫描

--scanflags

自定义TCP扫描

-sI

空闲扫描

-sO

IP协议扫描

-b

FTP Bounce扫描

使用-sI选项就可以启用空闲扫描。空闲扫描是Nmap高级用法,允许进行端口完全欺骗扫描。可以使攻击者能够不使用自己的IP向目标主机发送数据包,它可以利用不活跃的僵尸主机反弹给攻击者一个旁通信道,从而进行端口扫描。IDS会把不活跃的僵尸主机当作攻击者,这是一种非常隐蔽的扫描方法。

root@Wing:~# nmap -sI www.0day.co:80 192.168.126.131
WARNING: Many people use -Pn w/Idlescan to prevent pings from their true IP. On the other hand, timing info Nmap gains from pings can allow for faster, more reliable scans.

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-11 13:05 CST
Idle scan using zombie www.0day.co (210.209.122.11:80); Class: Incremental
Nmap scan report for 192.168.126.131
Host is up (0.051s latency).
Not shown: 977 closed|filtered ports
PORT   STATE SERVICE
21/tcp  open ftp
22/tcp  open ssh
23/tcp  open telnet
25/tcp  open smtp
53/tcp  open domain
80/tcp  open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
1099/tcp open rmiregistry
1524/tcp open ingreslock
2049/tcp open nfs
2121/tcp open ccproxy-ftp
3306/tcp open mysql
5432/tcp open postgresql
5900/tcp open vnc
6000/tcp open X11
6667/tcp open irc
8009/tcp open ajp13
8180/tcp open unknown
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 21.96 seconds
root@Wing:~# 


这里是利用僵尸主机为www..0day.co的主机对192.168.126.131进行空闲扫描,如果有IDS,IDS则会把www0day.co当作扫描者。

上面的演示中主要用的是僵尸主机的80端口,如果要使用另外的端口可以在僵尸主机后加入“冒号端口号”(例如www.0day.co:445)。需要注意的是选择的端口必须不能被自己的Nmap主机或目标主机过滤掉并且该端口必须为开放的,我们可以事先对僵尸主机进行端口扫描。

表3.13所示为本章节所需Nmap命令表,表中加粗命令为本小节所需命令——IP协议扫描。

表3.13 本节所需命令

选  项

解  释

-T

时序选项

-p|-F

常用扫描方式

-sS

TCP SYN扫描

-sT

TCP连接扫描

-sU

UDP扫描

-sN;-sF;-sX

隐蔽扫描

-sA

TCP ACK扫描

-sW

TCP窗口扫描

-sM

TCP Maimon扫描

--scanflags

自定义TCP扫描

-sI

空闲扫描

-sO

IP协议扫描

-b

FTP Bounce扫描

使用-sO选项就可以启用IP协议扫描。这里的“O”不是数字“0”而是大写字母“O”。该选项会确定目标端口的协议类型,这并不是一种严格的端口扫描方式,因为它并不是扫描TCP、UDP端口号,而是IP协议号。IP协议扫描可以帮助用户确定目标主机哪些是支持IP协议的,例如TCP、ICMP、IGMP。虽然它便利的是IP协议号并不是TCP或UDP端口,但仍可以使用-p选项选择需要扫描的协议号。它不是在UDP报文的端口域上循环,而是在IP协议域的8位上循环,发送空的IP报文头。

root@Wing:~# nmap -sO -T4 192.168.126.131

Starting Nmap 6.40 ( http://nmap.org

 ) at 2015-06-11 13:25 CST
Warning: 192.168.126.131 giving up on port because retransmission cap hit (6).
Nmap scan report for 192.168.126.131
Host is up (0.00038s latency).
Not shown: 179 open|filtered protocols, 75 closed protocols
PROTOCOL STATE SERVICE
1    open icmp
6    open tcp
MAC Address: 00:0C:29:E0:2E:76 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 72.51 seconds
root@Wing:~# 


从输出的结果可以得知目标主机有两个IP协议是开放的,这两个协议分别是ICMP和TCP,对应的协议标号是1和6。这里需要注意的是,协议扫描关注的不是ICMP端口不可到达的消息,关注的是ICMP协议不可到达的消息。例如,Nmap从目标主机接收到任何协议的响应,Nmap就会把那个协议标记为Open。ICMP不可到达的错误,例如类型3代号2,Nmap会标记为Closed,其他的ICMP不可到达协议会标记为Filtered。如果一直接受不到响应,Nmap就会标记为Open|Filtered。

表3.14所示为本章节所需Nmap命令表,表中加粗命令为本小节所需命令——FTP Bounce扫描。

表3.14 本节所需命令

选  项

解  释

-T

时序选项

-p|-F

常用扫描方式

-sS

TCP SYN扫描

-sT

TCP连接扫描

-sU

UDP扫描

-sN;-sF;-sX

隐蔽扫描

-sA

TCP ACK扫描

-sW

TCP窗口扫描

-sM

TCP Maimon扫描

--scanflags

自定义TCP扫描

-sI

空闲扫描

-sO

IP协议扫描

-b

FTP Bounce扫描

使用-b选项就可以进行FTP Bounce Scan扫描。它允许用户连接到一台FTP服务器,然后要求文件送到一台第三方服务器,这种扫描方式已经很少被支持了,但这也不失是一种躲避防火墙的好办法,或许用户能获取到更多可靠的结果。