probeport]>:
Idlescan
-sY/sZ:
SCTPINIT/COOKIE-ECHOscans
-sO:
IPprotocolscan
-b:
FTPbouncescan
参数
释义
-sS/sT/sA/sW/sM
指定使用TCPSYN/Connect()/ACK/Window/Maimonscans的方式来对目标主机进行扫描
-sU
指定使用UDP扫描方式确定目标主机的UDP端口状况
-sN/sF/sX
指定使用TCPNull,FIN,andXmasscans秘密扫描方式来协助探测对方的TCP端口状态
--scanflags
定制TCP包的flags
-sI
指定使用idlescan方式来扫描目标主机(前提需要找到合适的zombiehost)
-sY/sZ
使用SCTPINIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况
-sO
使用IPprotocol扫描确定目标机支持的协议类型
-b
使用FTPbouncescan扫描方式
除了所有前面讨论的扫描方法,Nmap提供选项说明那些端口被扫描以及扫描是随机还是顺序进行。
默认情况下,Nmap用指定的协议对端口1到1024以及nmap-services文件中列出的更高的端口在扫描。
PORTSPECIFICATIONANDSCANORDER:
-p:
Onlyscanspecifiedports
Ex:
-p22;-p1-65535;-pU:
53,111,137,T:
21-25,80,139,8080,S:
9
-F:
Fastmode-Scanfewerportsthanthedefaultscan
-r:
Scanportsconsecutively-don'trandomize
--top-ports:
Scanmostcommonports
--port-ratio:
Scanportsmorecommonthan
参数
释义
-p
扫描指定的端口
-F
快速模式,仅扫描TOP100的端口
-r
不进行端口随机打乱的操作(如无该参数,nmap会将要扫描的端口以随机顺序方式扫描,以让nmap的扫描不易被对方防火墙检测到)
--top-ports
扫描开放概率最高的number个端口(nmap的作者曾经做过大规模地互联网扫描,以此统计出网络上各种端口可能开放的概率。
以此排列出最有可能开放端口的列表,具体可以参见文件:
nmap-services。
默认情况下,nmap会扫描最有可能的1000个TCP端口)
--port-ratio
扫描指定频率以上的端口。
与上述--top-ports类似,这里以概率作为参数,让概率大于--port-ratio的端口才被扫描。
显然参数必须在在0到1之间,具体范围概率情况可以查看nmap-services文件
服务和版本探测
把Nmap指向一个远程机器,它可能告诉端口25/tcp、80/tcp和53/udp是开放的。
使用包含大约2,200个著名的服务的nmap-services数据库,Nmap可以报告那些端口可能分别对应于一个邮件服务器(SMTP)、web服务器(HTTP)和域名服务器(DNS)。
在用某种其它类型的扫描方法发现TCP或者UDP端口后,版本探测会询问这些端口,确定到底什么服务正在运行。
nmap-service-probes数据库包含查询不同服务的探测报文和解析识别响应的匹配表达式。
Nmap试图确定服务协议(如ftp,ssh,telnet,http),应用程序名(如ISCBind,Apachehttpd,Solaristelnetd),版本号,主机名,设备类型(如打印机,路由器),操作系统家族(如Windows,Linux)以及其它的细节,如是否可以连Xserver,SSH协议版本,或者KaZaA(用户名)。
当然,并非所有服务都提供所有这些信息。
如果Nmap被编译成支持OpenSSL,它将连接到SSL服务器,推测什么服务在加密层后面监听。
当发现RPC服务时,NmapRPCgrinder(-sR)会自动被用于确定RPC程序和它的版本号。
Nmap用下列的选项打开和控制版本探测。
SERVICE/VERSIONDETECTION:
-sV:
Probeopenportstodetermineservice/versioninfo
--version-intensity:
Setfrom0(light)to9(tryallprobes)
--version-light:
Limittomostlikelyprobes(intensity2)
--version-all:
Tryeverysingleprobe(intensity9)
--version-trace:
Showdetailedversionscanactivity(fordebugging)
参数
释义
-sV
指定让Nmap进行版本侦测
--version-intensity
指定版本侦测强度(0-9),默认为7。
数值越高,探测出的服务越准确,但是运行时间会比较长
--version-light
指定使用轻量侦测方式(intensity2)
--version-all
尝试使用所有的probes进行侦测(intensity9)
--version-trace
显示出详细的版本侦测过程信息
操作系统类型鉴别
Nmap最著名的功能之一是用TCP/IP协议栈指纹技术(Fingerprinting)进行远程操作系统探测。
每个Fingerprint包括一个自由格式的关于OS的描述文本,和一个分类信息,它提供供应商名称(如Sun),操作系统(如Solaris},OS版本(如10),和设备类型(通用设备,路由器,switch,游戏控制台等)。
操作系统检测可以进行其它一些测试,这些测试可以利用处理过程中收集到的信息。
例如运行时间检测,使用TCP时间戳选项(RFC1323)来估计主机上次重启的时间,这仅适用于提供这类信息的主机。
另一种是TCP序列号预测分类,用于测试针对远程主机建立一个伪造的TCP连接的可能难度。
采用下列选项启用和控制操作系统检测:
OSDETECTION:
-O:
EnableOSdetection
--osscan-limit:
LimitOSdetectiontopromisingtargets
--osscan-guess:
GuessOSmoreaggressively
参数
释义
-O
指定Nmap进行OS侦测
--osscan-limit
限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口)
--osscan-guess
大胆猜测对方的主机的系统类型。
由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统
【实验过程】
(1)安装和运行Nmap。
安装过程中保留默认包含的Winpcap和Zenmap组件。
第一次安装的是课程FTP上的6.0版本,但是发现不能ping到室友的主机而且安装过程有如下错误。
故从网上下载了6.4版本,安装过程无错误,且能ping到室友主机,工作正常。
以下实验在6.4版本下完成。
(2)进入“命令提示符”窗口,运行nmap,查看可用参数(请贴出截图)。
可见版本号为6.40,及各个可用参数。
(3)主机发现:
进行连通性监测,判断目标主机1和2是否可连通,运行如下命令:
Nmap-sP172.18.34.24(主机1,Ubuntu)
Nmap-sP172.18.34.132(主机2,Win7)
目标主机1和2均存活,MAC地址及其网卡的厂商品牌如下图。
(4)使用常规扫描方式对目标主机进行TCP端口扫描,运行如下命令:
Nmap-sT172.18.34.24(主机1)
Nmap-sT172.18.34.132(主机2)
主机1的端口及开放情况:
主机2的端口及开放情况:
(5)使用SYN半扫描方式对目标主机进行TCP端口扫描,运行如下命令:
Nmap-sS172.18.34.24(主机1)
Nmap-sS172.18.34.124(主机2)
主机1的端口及开放情况:
主机2的端口及开放情况:
上述两次扫描中,使用常规扫描方式所花费的时间比SYN半扫描方式慢,在主机1的两次扫描差异很大,使用常规扫描方式所花费的时间比SYN半扫描方式慢了接近20倍,而在主机2上只是慢了一倍。
这是因为半开放扫描,不需要通过完整的握手,就能获得远程主机的信息。
Nmap发送SYN包到远程主机,但是它不会产生任何会话.因此不会在目标主机上产生任何日志记录,因为没有形成会话,这样子的扫描速度也更快,相对于需要调用系统的connect()的默认的扫描模式需要完成三次握手的速度而言。
(6)对目标主机进行UDP端口扫描,运行如下命令:
Nmap-sU172.18.34.24(主机1)
Nmap-sU172.18.34.134(主机2)
主机1的端口及开放情况:
主机2的端口及开放情况:
(7)探测目标主机主机开放端口上所提供的服务及其类型和版本信息,运行如下命令:
Nmap-sV172.18.34.24(主机1)
Nmap-sV172.18.34.134(主机2)
主机1的端口及其服务版本信息:
主机2的端口及其服务版本信息:
(8)探测目标主机的操作系统类型,运行如下命令:
Nmap-O-PO172.18.34.24(主机1)
Nmap-O-PO172.18.34.134(主机2)
主机1操作系统类型信息
主机2操作系统类型信息
(9)在命令窗口运行Zenmap.exe(即Nmap的图形化前端程序)。
在“Target”文本框中输入扫描目标IP地址/主机名称(172.16.1.101),然后在"Profile”预定义配置下拉框中选择扫描配置"IntenseScan,noPing",然后点击菜单项“Profile"->"EditSelectedProfile",切换到“Scan”选项卡,勾选上“Operatingsystemdetection”和“Versiondetection”后点击“SaveChanges”按钮保存扫描配置,最后点击“Scan”按钮开始扫描。
可以看到最后的扫描参数为nmap-sV-T4-O-A-v-Pn172.18.34.124172.18.34.24
主机1的开放端口、服务版本、操作系统类型信息:
主机2的开放端口、服务版本、操作系统类型信息:
【实验体会】
扫描器是一把双刃剑。
系统或网络管理员可以利用它来检测其所管理的网络和主机中存在哪些漏洞,以便及时打上补丁,增加防护措施,或用来对系统进行安全等级评估。
然而,黑客可以利用它来获取主机信息,寻找具备某些弱点的主机,为进一步攻击做准备。
正如这次实验所看到的,通过Nmap简单地进行扫描,就得到了其他主机的os,开放端口、服务版本等信息,如果被非法利用,后果可能会很严重。
所以用户要减少开放的端口,关闭不必的服务,合理地配置防火墙,以防范扫描行为,这点实验中扫描的Ubuntu主机就做得很好,只有一个端口被扫描到了。