<p style="margin-left:.0001pt; margin-right:0; text-align:center">Nmap是一个综合的、功能全面的端口扫描工具主机发现。nmap可以用来查找目标网络中在线主机。默认情况下,nmap通过icmp回应请求、向443端口发送TCP SYN包、向80端口发送TCP ACK包和icmp时间戳请求方式发现目标主机服务/版本。nmap发现端口后,可以进一步检查服务协议、应用程序名称、版本号、主机名、设备类型和操作系统信息。操作系统识别:nmap向远程主机发送系列数据包,并检查回应。然后与操作系统指纹数据库进行比较,并打印出匹配结果的细节。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">在Kali操作机的终端中输入nmap -h即可查看Nmap的帮助文档:</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">
<img alt="" src="https://i-blog.csdnimg.cn/direct/78c8b1fddf634058985744778a33da1f.png" />
</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">相关参数的含义与用法:</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">①扫描目标时用到的相关参数</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-iL:从文件中导入目标主机或目标网段。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-iR:随机选择目标主机。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">--exclude:后面跟的主机或网段将不在扫描范围内。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">--excludefile:导入文件中的主机或网段将不在扫描范围中。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">②与主机发现方法相关的参数</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-sL:List Scan(列表扫描),仅列举指定目标的IP,不进行主机发现。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-sn:只进行主机发现,不进行端口扫描。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-Pn:将所有指定的主机视作已开启,跳过主机发现的过程。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-PS/PA/PU/PY[port list]:使用TCP SYN/ACK或SCTP INIT/ECHO方式来发现主机。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-PE/PP/PM:使用ICMP echo、timestamp、netmask请求包来发现主机。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-PO[protocol list]:使用IP协议包探测对方主机是否开启。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-n/-R:-n表示不进行DNS解析;-R表示总是进行DNS解析。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">--dns-servers <serv1,[serv2],...>:指定DNS服务器。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">--system-dns:指定使用系统的DNS服务器。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">--traceroute:追踪每个路由节点。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">③与常见的端口扫描方法相关的参数</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-sS/sT/sA/sW/sM:指定使用TCP SYN/Connect( )/ACK/Window/Maimon的方式来对目标主机进行扫描。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-sU:指定使用UDP扫描的方式确定目标主机的UDP端口状态。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-sN/sF/sX:指定使用TCP Null/FIN/Xmas 秘密扫描的方式协助探测对方的TCP端口状态。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">--scanflags <flags>:定制TCP包的flags。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-sI:指定使用Idle scan的方式扫描目标主机(前提是找到合适的zombie host)。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-sY/sZ:使用SCTP INIT/COOKIE-ECHO扫描SCTP协议端口的开放情况。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-sO:使用IP protocol扫描确定目标主机支持的协议类型。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-b <FTP relay host>:使用FTP bounce scan扫描方式。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">④跟端口参数与扫描顺序的设置相关的参数</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-p <port ranges>:扫描指定的端口。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-F:Fast Mode(快速模式),仅扫描Top 100的端口。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-r:不进行端口随机打乱的操作(如无该参数,Nmap会将要扫描的端口以随机顺序的方式进行扫描,让Nmap的扫描不易被对方检测到)。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">--top-ports <number>:扫描开放概率最高的number个端口。(Nmap作者曾做过大规模的互联网扫描,以此统计网络上各种端口可能开放的概率,并排列出最有可能开放端口的列表。默认情况下Nmap会扫描最有可能的1000个TCP端口,通过number可以指定扫描多少个最有可能开放的端口)。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">--port-ratio <ratio>:扫描指定频率以上的端口。与上述--top-ports类似,这里以概率作为参数,概率大于--port-ratio的端口才被扫描。显然参数必须在0~1之间,想了解具体的概率范围可以查看nmap-services文件。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">⑤与版本侦测相关参数</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-sV:指定让Nmap进行版本侦测。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">--version-intensity <level>:指定版本侦测的强度(0~9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">--version-light:指定使用轻量级侦测方式(intensity 2)。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">--version-all:指定使用所有的probes进行侦测(intensity 9)。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">--version-trace:显示出详细的版本侦测过程信息。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">在了解了上面的参数及含义之后,再来看用法会更好理解。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">扫描命令格式:</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">nmap + 扫描参数 + 目标地址/网段</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">比如下面的扫描示例:</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">nmap -T4 -A -v ip地址</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-A:表示表示使用进攻性(Aggressive)方式扫描;</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-T4:表示指定扫描过程使用的时序(Timing)级别为4,时序共6个级别(0~5),级别越高扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通信状况良好的情况下推荐使用T4。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">-v:表示显示冗余(verbosity)信息,在扫描过程中显示扫描的细节,有助于让用户了解当前的扫描状态。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">假设Windows 2008(w08)目标主机地址为:192.168.1.180。</p>
<p>
<img alt="" src="https://i-blog.csdnimg.cn/direct/77bcd80917384a269727da40fbbec2e0.png" />
</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">对结果返回详细的描述输出可使用参数-vv。</p>
<p>
<img alt="" src="https://i-blog.csdnimg.cn/direct/9c3a3344f8fe48cc8585c2239619f6a4.png" />
</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">使用-sT来实现tcp全连接扫描nmap -sT 192.168.1.180,与目标端口进行三次握手,尝试建立连接,如果建立连接成功,则说明端口开放,扫描速度较慢。优点:精准度较高;缺点:由于在检测每个端口时都需要进行三次握手,所以速度较慢,同时由于需要建立连接,可能会被目标主机记录下来,所以安全性不高。</p>
<p>
<img alt="" src="https://i-blog.csdnimg.cn/direct/de9c4a712d7847dd86854a122781dd61.png" />
</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">用SYN扫描(-sS),该选项也称为“半开连接”或者“SYN stealth”。nmap发送syn包后等待回应,如果接收SYS/ACK包说明端口开放,如果收到RST包,说明端口关闭;如果没有回应或者回应icmp不可达错误消息,则说明端口被过滤。由于进行TCP三次握手连接,所以安全性(隐蔽性)高,扫描速度快(在有权限的情况下nmap默认使用的是该选项进行扫描)。</p>
<p>
<img alt="" src="https://i-blog.csdnimg.cn/direct/e59453b90ddf41d9827c69485b7b1ded.png" />
</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">使用参数-sN进行扫描nmap -sN -p 21,22,80,1433,3306,3389 192.168.1.180,即NULL扫描,不会设置任何控制位,参数-p选项针对特定的端口进行扫描。</p>
<p>
<img alt="" src="https://i-blog.csdnimg.cn/direct/c62bb1acfa2045d2908cd331a567e473.png" />
</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">参数-sV探测服务版本nmap -sV 192.168.1.180。</p>
<p>
<img alt="" src="https://i-blog.csdnimg.cn/direct/2eb5d6b8df284f38a2aecdc8efa8d17d.png" />
</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">参数-oX在当前目录下生成dk.html,用于保存扫描信息nmap -sV -p 21,22,80,1433,3306,3389 192.168.1.180 -oX dk.html。</p>
<p>
<img alt="" src="https://i-blog.csdnimg.cn/direct/dd88d25a0a844a8bb466447a7a6191ba.png" />
</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">命令cat dk.html查看扫描信息。</p>
<p>
<img alt="" src="https://i-blog.csdnimg.cn/direct/3008e5dd8b75413b98ec5a61d6fcaa95.png" />
</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">nmap路由跟踪,路由追踪功能,能够帮助网络管理员了解网络通行情况,同时也是网络管理人员很好的辅助工具,通过路由器追踪可以轻松的查出从我们电脑所在地到目的地之间经常的网络节点,并可以看到通过各个结点所花费的时间。</p>
<p>
<img alt="" src="https://i-blog.csdnimg.cn/direct/f01802397c8248fc969275fc8fc5f552.png" />
</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">nmap探测操作系统类型。</p>
<p>
<img alt="" src="https://i-blog.csdnimg.cn/direct/91b4ec285d2f4822a81f87ed48499333.png" />
</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">扫描多个目标地址:如果目标地址不在同一个网段,或在同一个网段但不连续且数量不多,可以使用该方法进行扫描。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">nmap IP地址1 IP地址2 IP地址3 ...</p>
<p>
<img alt="" src="https://i-blog.csdnimg.cn/direct/ac46bd19c4784c46ac936f1d90594e43.png" />
</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">扫描一个范围内的目标地址</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">可以指定扫描一个连续的网段,中间使用"-"连接。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">nmap 192.168.1.1-20 </p>
<p>
<img alt="" src="https://i-blog.csdnimg.cn/direct/c4524370b100447eb4cc233600a6df42.png" />
</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">或者,直接扫描整个网段:nmap 192.168.1.0/24,需要扫描的时间很长。</p>
<p>
<img alt="" src="https://i-blog.csdnimg.cn/direct/e36de3d43b0c402f918b455c0df0056a.png" />
</p>
<p>
<img alt="" src="https://i-blog.csdnimg.cn/direct/4c12cf406b8e4d8d865702143444f427.png" />
</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">扫描主机列表target.txt中的所有目标地址</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">扫描target.txt中的地址或者网段。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">#创建target.txt文件</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">root@kali:~# echo '192.168.1.56' > scan.txt</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">root@kali:~# echo '192.168.1.254' >> scan.txt</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">root@kali:~# echo '192.168.1.194' >> scan.txt</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">root@kali:~# nmap -iL scan.txt</p>
<p>
<img alt="" src="https://i-blog.csdnimg.cn/direct/31e46efed4424ffab4446d5983a4fe2b.png" />
</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">探测防火墙状态</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">可以利用FIN扫描的方式探测防火墙的状态。FIN扫描用于识别端口是否关闭,收到RST回复说明该端口关闭否则就是open或filtered状态。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">root@kali:~# nmap -sF 127.0.0.1</p>
<p>
<img alt="" src="https://i-blog.csdnimg.cn/direct/e6731d150b0c46c09641da35a66c64b9.png" />
</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">Nmap输出的是扫描列表,包括端口号、端口状态、服务名称、服务版本及协议。通常端口状态有下面的6种:</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">open:开放的,表示应用程序正在监听该端口的连接,外部可以访问。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">filtered:被过滤的,表示端口被防火墙或其他网络设备阻止,不能访问。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">closed:关闭的,表示目标主机未开启该端口。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">unfiltered:未被过滤的,表示Nmap无法确定端口所处的状态,需进一步探测。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">open/filtered:开放的或被过滤的,Nmap不能识别。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">closed/unfiltered:关闭的或被过滤的,Nmap不能识别。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left">了解了以上的状态,在渗透测试过程中,将有利于我们确定下一步应该采取什么方法或手段。</p>
<p style="margin-left:.0001pt; margin-right:0; text-align:left"></p>