Nmap渗透测试详解(一)
如今,Nmap享有“扫描之王”盛誉。
Nmap诞生于1996年。在这个信息爆炸的互联网时代,Nmap依然保持着充沛的活力以及旺盛的生命力。原因如下:
知名度高:只要是黑客,肯定知道Nmap,否则就不能称为一名黑客。Nmap绝对是著名的网络安全工具。
功能强大:也许Nmap 在不少人眼里是一个网络端口扫描以及远程操作系统、服务鉴别工具。其实除了这些基础功能外,Nmap还具备相对完整的信息收集、数据库渗透、网络渗透测试等功能。Nmap 在强大的脚本支持下几乎可以做到我们想做的任何网络扫描测试
Nmap介绍
Nmap英文全称为“Network Mapper”(网络映射器)。Nmap是一款开放源代码的网络探测和安全审核的工具,它的设计目标不仅可以扫描单个主机,更重要地是可以快速地扫描大型网络。Nmap以新颖的方式使用原始IP报文来发现网络上有哪些主机,这些主机提供什么服务(应用程序名和版本),服务运行在什么操作系统(包括版本信息),他们使用什么类型的报文过滤器/防火墙,以及一些其他功能。虽然Nmap通常用于安全审核,许多系统管理员和网络管理员也用它来做一些日常的工作,比如查看整个网络的信息、管理服务升级计划,以及监视主机和服务的运行。
Nmap的基本功能有3个,一是探测一组主机是否在线,其次是扫描主机端口,嗅探所提供的网络服务,还可以推断主机所用的操作系统。Nmap 可用于扫描仅有两个节点的LAN,直至500个节点以上的网络。Nmap还允许用户定制扫描技巧。通常,一个简单的使用ICMP协议的Ping 操作可以满足一般需求;也可以深入探测UDP或者TCP端口,直至主机所使用的操作系统;还可以将所有探测结果记录到各种格式的日志里,供进一步分析操作。
Nmap输出的是扫描目标的列表,以及每个目标的补充信息,至于是哪些信息则依赖于所使用的选项。Open(开放的)意味着目标机器上的应用程序正在该端口监听连接/报文。Filtered(被过滤的)意味着防火墙,过滤器或者其他网络障碍阻止了该端口被访问,Nmap无法得知它是Open(开放的)还是Closed(关闭的)。Closed(关闭的)端口上面没有应用程序监听,但是它们随时可能开放。
Nmap-Script功能的使用。在Nmap的安装目录的share/nmap/scripts里,已经有多种写好的脚本提供,使用这些脚本可以轻易地发起渗透测试。
Nmap工作原理
Nmap使用TCP/IP协议栈指纹准确地判断目标主机的操作系统类型,Nmap工作原理如下:
测试 | 描述 |
---|---|
T1 | 发送TCP数据包(Flag=SYN)到开放TCP端口 |
T2 | 发送一个空的TCP数据包到开放的TCP端口 |
T3 | 发送TCP数据包(Flag=SYN,URG,PSH,FIN)到开放的TCP端口 |
T4 | 发送TCP数据包(Flag=ACK)到开放的TCP端口 |
T5 | 发送TCP数据包(Flag=SYN)到关闭的TCP端口 |
T6 | 发送TCP数据包(Flag=ACK)到开放的TCP端口 |
T7 | 发送TCP数据包(Flag=URG,PSH,FIN)到关闭的TCP端口 |
Nmap对目标主机进行一系列的测试,利用测试结构建立相应目标主机的Nmap指纹,然后Nmap会对指纹进行匹配,最终输出相应的结果。
Nmap语法
Nmap固定语法格式如下:
Nmap 【空格】【选项|多选项|协议】【空格】【目标】
选项与多选项之间也是用空格进行分割的,如果某些选项需要指定某些数据,那么在这些选项与指定的数据之间也需要用空格进行分割。
注意:所有的选项与命令以及选项参数都用空格进行分割的,有时候选项与参数知己可以不用空格分割,如-p80,-p为选项,80为参数。为了让Nmap语法更加严谨,建议严格按照空格进行分割。
Nmap的图形界面工具Zenmap
Nmap不仅有命令行的输入方式,还有图形界面,极大地方便了操作。
Zenmap便是它的图形用户界面,它是一个跨平台的开源应用,不仅方便初学者使用,同时为高级使用者提供了很多高级特性。频繁的扫描能够被存储,激进型重复运行。命令行工具提供了直接与Nmap的交互操作。扫描结果能够被存储以便于时候查阅。存储的扫描可以被比较,以辨别其异同。
Nmap的基本知识点
全面扫描
选项 | 解释 |
---|---|
-A(即All) | 全面扫描/综合扫描,一种完整扫描目标信息的扫描方式 |
Nmap全面扫描的选项为-A,优点:它可以全面扫描指定IP或域名的所有端口及其目标系统信息等。缺点:它需要等待较长的时间。
如:nmap -A 192.168.126.129
扫描指定段
在Nmap里我们可以指定扫描一个C段,这个功能不需要其他额外的选项,只需要使用“-”连接即可
如:nmap 192.168.126.1-200(扫描192.168.126.1到192.168.126.200这个段)
一次简单的扫描
该扫描方式可以针对IP或域名进行扫描,扫描方式迅速,可以很方便地发现目标端口的开放情况以及主机在线情况。
如:nmap 192.168.126.129
Ping扫描
选项 | 解释 |
---|---|
-sP(即scan ping缩写) | Ping扫描 |
Ping扫描只进行Ping,然后显示出在线的主机。扫描时只需要加入-sP选项就可以很方便地启用Ping扫描,使用该选项时,Nmap仅进行Ping扫描,然后会显出做出相应的主机,使用该选项扫描可以轻易地获取目标信息而不会被轻易发现。在默认情况下,Nmap会发送一个ICMP回声请求和一个TCP报文到目标端口。Ping扫描的优点是不会返回太多的信息造成对结果的分析,并且这是一个很高效的扫描方式。
如:nmap -sP 192.168.126.129/24
无Ping扫描
选项 | 解释 |
---|---|
-P0(0表示无,即无Ping扫描) | 无Ping扫描 |
无Ping扫描通常用于防火墙禁止Ping的情况下,它能确定正在运行的机器。默认情况下,Nmap只对正在运行的主机进行高强度的探测,如端口扫描、版本探测或者操作系统探测用-P0禁止主机发现会让Nmap对每一个指定的目标IP地址进行所要求的扫描,这可以穿透防火墙,也可以避免被防火墙发现。需要注意的是,-P0的第二个字符是数字0而不是字母o。
注意:无Ping扫描可以躲避某些防火墙的防护,可以在目标主机禁止Ping的情况下采用。
格式为:“nmap -P0 【协议1,协议2】【目标】”
协议1 | ICMP协议 |
---|---|
协议2 | IGMP协议 |
协议6 | TCP协议 |
协议17 | UDP协议 |
如果没有指定任何协议,Nmap会默认使用协议1,协议2进行扫描
如:nmap -P0 192.168.126.129
若想知道这些协议是如何判断目标主机是否存活可以使用 --packet-trace选项
如:nmap -P0 --packet-trace scanme.nmap.org
指定TCP,UDP,IGMP协议向目标主机发送包并判断目标主机是否在线
如:nmap -P0 6,17,2 --packet-trace scanme.nmap.org
TCP SYN Ping扫描
选项 | 解释 |
---|---|
-PS(即Ping SYN缩写) | TCP SYN Ping扫描 |
TCP协议是面向连接的、可靠的传输层协议,允许发送和接收字节流形式的数据,为了让服务器和客户端以不同的速度产生和消费数据,TCP提供了发送和接收两个缓冲区。TCP提供全双工服务,数据同时能双向流动。通信的每一方都有发送和接收两个缓冲区,可以双向发送数据。TCP在报文里加上一个递进的确认序列号来告诉发送者,接收者期望收到的下一个字节,如果在规定时间内,没有收到关于这个包的确认响应,则重新发送此包,这保证了TCP为一种可靠的传输层协议。
-PS选项发送一个设置了SYN标志位的空TCP报文。默认目的端口为80(可以通过改变nmap.h)文件里的DEFAULT_TCP_PROBE_PORT值进行配置,但不同的端口也可以作为选项指定,甚至可以指定一个以逗号分隔的端口列表(如_PS22,23,25,80,115,3306,3389),在这种情况下,每个端口会并发地扫描。
通常情况下,Nmap默认Ping扫描是采用TCP ACK和ICMP Echo请求对目标进行是否存活的响应,当目标主机的防火墙阻止这些请求时,我们可以采用TCP SYN Ping扫描来进行对目标主机存活的判断。
如:nmap -PS 192.168.126.129
TCP ACK Ping扫描
选项 | 解释 |
---|---|
-PA(即Ping ACK 缩写) | TCP ACK Ping扫描 |
使用-PA选项可以进行TCP ACK Png扫描,它与TCP SYN Ping扫描是类似的,唯一的区别是设置TCP的标志位是ACK而不是SYN,使用这类方式扫描可以探测组织SYN包或ICMP Echo请求的主机。
很多防火墙会封锁SYN报文,所以Nmap提供了TCP SYN Ping扫描与TCP ACK Ping扫描
两种探测方式,这两种方式可极大地提高通过防火墙的概率,我们还可同时采用-PS与-SA来既发送SYN又发送ACK。在采用TCP ACK Ping扫描时,Nmap会发送一个ACK标志的TCP包给目标主机,若目标主机不是存活状态则不响应请求,若目标主机在线则会返回一个RST包。
进行TCP ACK Ping扫描:
如:nmap -PA 192.168.126.129
同时使用-PS与-PA选项:
如:nmap -PA -PS 192.168.126.129
UDP Ping扫描
选项 | 解释 |
---|---|
-PU (即Ping UDP缩写) | UDP Ping扫描 |
-PU选项是发送一个空的UDP报文到指定端口。若不指定端口则默认为40125.该默认值可以通过在编译时改变nmap.h文件里的DEFAULT-UDP-PROBE-PORT值进行配置。默认采用这样一个奇怪的端口是因为对于开放端口,很少会使用这样的扫描方式。
采用UDP Ping扫描时Nmap会发送一个空的UDP包到目标主机,若目标主机响应则返回一个ICMP端口不可达错误,若目标主机不是存活状态则会返回不同的ICMP错误信息。
如:nmap -PU 192.168.126.129
ICMP Ping Types扫描
选项 | 解释 |
---|---|
-PE(即ICMP Echo缩写) | 向目标发送ICMP Echo数据包 |
-PP(即ICMP Ping缩写) | ICMP时间戳Ping扫描 |
-PM(即ICMP Mask缩写) | ICMP地址掩码Ping扫描 |
使用-PE;-PP;-PM选项可以进行ICMP Ping Types扫描。ICMP(Internet Control Message Protocol)是Internet控制报文协议。它是TCP/IP协议的一个子协议,用于在IP主机、路由器之间传递控制信息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
Nmap发送一个ICMP type8(回声请求)报文到目标IP地址,从运行的主机得到一个type0(回声响应)报文。
-PE选项简单地来说是通过向目标发送ICMP Echo数据包来探测目标主机是否在线,正因为许多主机的防火墙会禁止这些报文,所以仅仅ICMP扫描对于互联网上的目标通常是不够的。但对于系统管理员监视一个内部网络,它们可能是实际有效的途径。使用选项打开该回声请求功能。
-PP选项是ICMP时间戳Ping扫描,虽然大多数的防火墙配置不允许ICMP Echo请求,但由于配置不当可能回复ICMP时间戳请求,所以可以使用ICMP时间戳来确定目标主机是否存活。
-PM选项可以进行ICMP地址掩码Ping扫描。此扫描方式会试图用备选的ICMP等级Ping指定主机,通常有不错的穿透防火墙的效果。
(1)使用ICMP Echo扫描方式
如:nmap -PE 192.168.126.129
(2)使用ICMP时间戳Ping扫描
如:nmap -PP 192.168.126.129
(3)使用ICMP地址掩码Ping 扫描
如:nmap -PM 192.168.126.129
ARP Ping扫描
选项 | 解释 |
---|---|
-PR (即Ping ARP缩写) | ARP Ping扫描 |
-PR选项通常在扫描局域网时可采用。地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议,其功能是:主机将ARP请求广播到网络上的所有主机,并接收返回消息,确定目标IP地址的物理地址,同时将IP地址和硬件地址存入本机ARP缓存内,下次请求时直接查询ARP缓存。
ARP Ping扫描是Nmap对目标进行一个ARP Ping的过程,尤其在内网的情况下,采用ARP Ping扫描方式是最有效的,在本地局域网内防火墙不会禁止ARP请求,这就导致它比其他Ping扫描都更加高效,在内网里采用ARP Ping是非常有效的。在默认情况下,若Nmap发现目标主机就在它所在的局域网上,会进行ARP扫描。即使指定了不同的Ping类型(如-PI或者-PS),Nmap也会对任何相同局域网上的目标机使用ARP。若不想用ARP 扫描,可以指定–send-ip。
如:nmap -PR 192.168.126.129
列表扫描
选项 | 解释 |
---|---|
-sL (即scan List缩写) | 列表扫描 |
列表扫描是主机发现的退化形式,它仅仅列出指定网络上的每台主机,不发送任何报文到目标主机。默认情况下,Nmap仍然会对主机进行反向域名解析以获取它们的名字。
如:nmap -sL 192.168.126.129/24
扫描一个IPv6地址
选项 | 解释 |
---|---|
-6(即IPv6缩写) | 扫描IPv6地址 |
IPv6是Internet Protocol Version 6 的缩写,是IPv4的下一代IP协议。
Nmap很早就支持IPv6的扫描,在Nmap选项后加入-6选项就可以对IPv6扫描。
IPv6将会逐渐替换IPv4,但在一段相当长的时间内,IPv4还会大量地存在。若需要扫描IPv6地址,则需要在语句的IPv6目标地址前面加上-6选项。
如:nmap -6 fe80::20c:29ff:;fee0:2e76
路由跟踪
选项 | 解释 |
---|---|
–traceroute | 路由跟踪 |
采用–traceroute选项即可进行路由跟踪,它可以帮助用户了解网路偶的同行情况,通过此选项可以轻松地查出从本地计算机到目标之间所经过的网络节点,并可以看到通过各个节点的时间。
如:nmap --traceroute www.baidu.com
后面内容请见Nmap渗透测试详解(二)。