渗透测试之Nmap命令

  • Post author:
  • Post category:其他



https://www.2cto.com/article/201505/396643.html

1.介绍

相信很多朋友在这之前已经对nmap有所了解,或者已经使用过nmap了,这里做一下简单的介绍。nmap(Network Mapper)最初由Gordon Fyodor Lyon于1997年创建。nmap可以用来扫描一个网络,监控服务,列出网络主机等等。namp还可以提供操作

系统

的类型、开放端口信息,可用过namp的配置实现。

根据官网http://namp.org介绍,nmap包含众多脚本,这些脚本的功能从猜测Apple Filing Protocol密码到确认是否与X-servers建立连接等等。

Nmap家族还包括:

ZenMap——Nmap的图形界面版。 Ncat——基于netcat,扩展了一些功能,如:ncat链、SSL支持、支持二进制等。 Ncrack——测试已部署的认证系统和密码强度,支持常用协议。 Ndiff——用于网络基线测试,对比Nmap扫描结果之间的差异。 Nping——允许将自己构造的数据包整合在扫描过程中,并能够对原始数据报进行操控。

2. Nmap常用扫描选项和类型

Nmap命令语法如下:

namp – {type(s)} -{opt(s)} {target}

常用选项:

扫描选项 名称 功能 -g 指定源端口 使用特定源端口发送数据包 –spoofmac Mac欺骗 创建虚假mac,随机化mac地址 -S 源Ip地址 伪造源IP,或指定源IP -e 选择网口 选择发送和接受数据的网口 -F 快速扫描 namp-services文件中默认扫描减到100个端口 -p 确定端口范围 选择扫描端口 -N NDS解析 执行反向lookup -R 反向lookup 强制反向lookup -A 激进型 启用许多扫描选项,如版本扫描和脚本扫描(慎用)

常用扫描类型:

扫描类型 名称 功能 -sA ACK扫描 检查端口是否开放,可用于探测防火墙 -sP Ping扫描 快速发现网络 -sR PRC扫描 定位PRC,对成功扫描的机器记录 -sS TCP SYN扫描 快速和隐蔽的扫描,半开放扫描 -sU UDP扫描 确定符合特定UDP端口是否开放 -sX XMAS扫描 隐蔽扫描,扫描特定配置的防火墙 -sL 列出扫描对象 列出要扫描的IP,使用-n选项确保不向网络中发数据包 -sO IP协议扫描 寻找使用IP协议的主机 -sM FIN/ACK 隐蔽扫描,适用于unix系统。查找RST数据包 -sI 闲置扫描 僵尸主机扫描,非常隐蔽

输出格式:

输出格式 名称 功能 -oA 所有 可检索的、常规的和XML文件 -oG 可检索的 可检索格式 -oX XML XML格式 -oN 常规 常规格式,适合人

阅读

3. 基本扫描

在这里,我开始对上一篇搭建的Ubuntu虚拟主机进行基本扫描,只进行简单的扫描,确定那些端口是开放的,使用-A选项(-A 选项扫描非常易于被发现,不适合在需要隐蔽条件下使用)。

# nmap -A 192.168.50.12

\

从结果看,可以判定目标主机开放了TCP的80端口,运行了Apache server 2.2.22版本,目标操作系统为Ubuntu

Linux

2.6.X|3.X。 此外,-A选项启用了traceroute命令,根据结果显示,距离目标主机只有一条路由。

4. 隐蔽扫描

网络扫描的过程包括发送特殊够早的数据包给目标主机和对返回的结果进行基于某种标准的检查。从扫描结果中,我们可以知道那些主机在线,运行了哪些服务以及这些服务的版本信息等。

在一个安全的网络中,我们有可能根据需要来对抗IDS的异常行为捕捉。发送数据包的数量和速度,流量是否异常等,防火墙一般都会标记。为减少被检测到的概率,我们可以采取一些措施。

控制时间。

nmap控制扫描时间选项:

-T(0~5): 控制扫描进度,避免被检测的最简单形式。0是最温和的,5是最激进的,只能在局域网中使用。 –max_hostgroup: 将扫描的主机数量限制在每次一个。 –max_retries: 一般不需要修改此选项,如果是紧急情况且不在意扫描过程中可能错过一个包含潜在

漏洞

的主机,可以将这个选项设为0. max_parallelism 10: 一次仅允许10个探测请求。 scan_delay 两次探测之间停顿。

尝试几个选项:

# nmap -P0 -n -sS --max_hostgroup 1 --max_retries 0 --max_parallelism 10 192.168.50.0/24

\

从结果看,有两个主机在线,其中一个主机开放了80端口。

5. 其他扫描

5.1 SYN扫描

使用-sS选项对我们的

虚拟机

Ubuntu(192.168.50.12)发起一个完全开发的扫描。结果如下:

syn

结果表明,至少192.168.50.12主机至少开放了3个端口,要确保使用不同类型的扫描对目标网络扫描,否则可能丢失一些很重要的信息导致测试结果相差很大。

5.2 NULL扫描

选用NULL扫描,再来看看结果:

null

结果令我们很失望,所有的端口都处于Z喎�”http://www.2cto.com/kf/ware/vc/” target=”_blank” class=”keylink”>vcGVuL2ZpbHRlcmVk17TMrKGjztLDx7/J0tSywrLixL+x6tb3u/qwstewwcu3wLvwx72jrLTTveG5+8nPv7SjrM7Sw8fKx87et6i78bXD09DQp9DFz6LBy6GjJm5ic3A7PGJyIC8+DQrXoqO6dWJ1bnR1v8nS1Mq508N1Zne53MDtu/nT2tb3u/q1xGlwdGFibGVzt8C78Me9oaPV4rj2t8C78Me9yN3S18Xk1sPH0rfHs6POyLaooaMmbmJzcDs8YnIgLz4NCiQgc3VkbyB1ZncgZW5hYmxlICO/qsb0t8C78Me9Jm5ic3A7PGJyIC8+DQokIHN1ZG8gdWZ3IGRpc2FibGUgI7nYsdW3wLvwx70mbmJzcDs8YnIgLz4NCiZuYnNwOzxiciAvPg0KyOe5+87Sw8ew0bLiytTEv7Hq1ve7+rXEt8C78Me9udi19KOs1PK94bn7yOfPwqO6Jm5ic3A7PGJyIC8+DQombmJzcDs8aW1nIGFsdD0=”clw” data-ke-=”” src=”http://www.2cto.com/uploadfile/Collfiles/20150504/20150504091209229.png” title=”\” />

从结果上看,NULL扫描也会扫描出结果,只不过标注上了open/filtered。

5.3 ACK扫描

再有防火墙的情况下,我们没用从NULL扫描中获取有效信息,现在进行ACK扫描。

ac

仍然没有扫描到有效信息,为了测试ACK扫描和NULL扫描,我们增加一个设置,在目标主机配置https服务并在防火墙增加一条规则,允许https的访问,即开放443端口。(可在Ubuntu上执行sudo ufw allow 443命令。)

NULL扫描依然是以上结果,没有扫描到有效信息。但是再执行ACK扫描时,结果可就不同了。

wack

从扫描结果得知有一个443端口没有被过滤掉。

6. IDLE扫描

6.1 空闲扫描

前两篇文章已经介绍了Nmap命令的一些基本选项和若干类型的扫描,下面继续来介绍Nmap的一个扫描类型——空闲扫描。

为了降低被检测到的机率,我们通常需要转嫁责任,这时可以使用空闲扫描(idle scan),让一个僵尸主机承担扫描任务。

nmap.org官网上详细讲述了空闲扫描的原理,可以在https://nmap.org/book/idlescan.html了解空闲扫描的所有信息。

使用空闲扫描(-sI)需要注意一个问题,就是要找一台TCP序列预测成功率高的僵尸主机,这个僵尸主机必须尽可能的空闲,比如说网络打印机就是一个很好地选择,因为网络打印机不仅存在着恒定的网络资源,而且很难预测它们的TCP序列。

空闲扫描的原理:

向僵尸主机放松SYN/ACK数据包,获得带有分片ID(IPID)的RST报文。 发送使用僵尸主机IP地址的伪数据包给目标主机。 如果目标主机端口关闭,就会向僵尸主机响应RST报文。如果目标端口开放,目标主机向僵尸主机响应SYN/ACK报文,僵尸主机发现这个非法连接响应,并向目标主机发送RST报文,此时IPID号开始增长。 通过向僵尸主机发送另一个SYN/ACK报文已退出上述循环并检查将是主机RST报文中的IPID是否每次增长2,同时目标主机的RST每次增长1。 重复上述步骤直到检测完所有的端口。


6.2寻找僵尸主机

空闲扫描的第一步就是寻找僵尸主机,我们可以通过下面这条命令(-v 详细信息,-O

系统

检测,-Pn 无ping,-n 无域名解析)来获得主机的TCP序列预测率。

# nmap -v -O -Pn -n 192.168.50.16

zomb

从结果上看,这个主机不是太理想,网络距离只有一跳(自己搭建的环境,试验用足够了),但作为一个僵尸主机还是可以的。预测难度越高,一台主机用作僵尸主机的可能性就越小。我们还可以连续生成ID来增加扫描成功的概率。


6.3 idle扫描应用

使用以下命令扫描,并启动wireshark抓包。

# nmap -p 22,23,53,80,443,8888,3960 -Pn -sI 10.128.***.**(僵尸主机IP) 222.**.**.**(目标主机IP) <喎�"/kf/ware/vc/" target="_blank" class="keylink">vcHJlPg0KPHA+yrnTwy1wxvS2r9LR1qpUQ1C2y7/atcTJqMPoo6y92sqhyrG85KO7zai5/S1Qbse/tfeyu8rK08NwaW5no6jErMjPysfKudPDtcSjqaOsLXNJxvS2r7/Vz9DJqMPoo6y688Pm0sC0zsrHvanKrNb3u/q6zcS/serW97v6tcRpcLXY1rehoyZuYnNwOzwvcD4NCjxwPjxpbWcgYWx0PQ=="idle" data-ke-="" src="/uploadfile/Collfiles/20150504/20150504091156206.png" title="\" />

查看wireshark抓包情况,可以看到从僵尸主机到目标主机之间有一些异常的网络流量。

wires

从结果上看,Nmap命令在僵尸主机和目标主机网络上产生了很多流量,我们需要这些流量来增加IPID的值,从而获知目标主机端口是否开放。