Nmap全称Network Mapper(网络映射器),是一款开源的网络探测和安全审核工具,其设计初衷是为了能够快速扫描大型网络,扫描单个主机当然也是没有问题。使用nmap扫描端口状态时,可能为以下几种状态:Open(开放的),意味着目标机器上的应用程序正在该端口监听连接/报文; filtered(被过滤的) 意味着防火墙,过滤器或者其它网络障碍阻止了该端口被访问,Nmap无法得知 它是开放的还是关闭的;closed(关闭的) 意味着端口上没有应用程序在监听,但他们随时可能开放;当端口对Nmap的探测做出响应,但是Nmap无法确定它们是关闭还是开放时,这些端口就被认为是 unfiltered(未被过滤的) ;如果Nmap报告状态组合 open|filtered 和 closed|filtered时,那说明Nmap无法确定该端口处于两个状态中的哪一个状态。
主要功能 主机发现 ping扫描:-sPping扫描只进行ping,然后列出在线的主机,例如可以用ping扫描快速发现一个C段所有存活的主机。
无ping扫描:-P0无ping扫描通常用在目标主机防火墙禁止ping的情况下,可以避免被防火墙发现。格式为:nmap -p0[协议1,协议2,...] <目标>
若不指定协议,则默认使用协议1、2、4。这里协议的数字即IP报文首部中的协议,TCP为6,ICMP为1,IGMP为2,UDP为17。更多协议号可参考IP协议号列表。例如下面指定使用TCP、IGMP、UDP判断主机是否存活:
nmap默认情况下使用TCP ACK和ICMP Eho请求对目标进行探测,若目标主机防火墙对这些请求禁止时,就可以使用TCP SYN Ping进行目标主机是否存活的探测。
默认端口为80,也可以使用逗号分隔端口列表,例如:
这里的-v代表增加显示的详细程度,-vv代表更加详细。
TCP ACK Ping扫描:-PA与TCP SYN Ping扫描区别是这里使用的TCP标志位是ACK而不是SYN,使用这种扫描方式可以探测阻止SYN包或ICMP Echo请求的主机。这种方式下,nmap会发送一个ACK标志的TCP包给目标主机,如果目标不存活则不响应该请求,目标主机在线则会返回一个RST包。
UDP Ping 扫描:-PU发送一个空的UDP包到目标主机,如果目标主机响应则返回以ICMP端口不可达错误,如果目标主机不是存活状态则返回各种ICMP错误信息。(这部分我看书上抓到了一个icmp的不可达报文,我自己并没有抓到该报文,不知道是哪里出了问题)同样可以指定端口,例如:
该选项需要使用root权限运行。
ICMP Ping Types扫描:-PE;-PP;-PMICMP全称Internet Control Message Protocol,用于在主机、路由器间传递控制消息。-PE是向目标发送ICMP Echo数据包来探测主机是否在线,-PP是ICMP时间戳扫描,防火墙一般会禁止ICMP Echo请求,但配置不当时有可能回复ICMP时间戳请求,-PM进行ICMP地址掩码ping扫描。
ARP Ping扫描:-PR多用在扫描局域网时,因为局域网防火墙一般不会禁止ARP请求,默认情况下如果我们扫描的目标主机就在同一个局域网上,会自动使用ARP扫描。
列表扫描:-sL列表扫描仅仅列出每台主机,不会发送任何报文到主机上。默认情况下nmap会进行反向域名解析获取它们的名字。例如:
禁止DNS反向解析:-n还是上面的例子,添加-n类型后:
可以看到不再对目标IP进行反向域名解析。
反向解析域名:-R与-n相反,-R表示永远对服务器进行反向域名解析,多用在绑定了域名的服务器上,以便让我们更加清楚哪一个ip上部署了什么网站。而-n多用在我们仅仅想单纯扫描一段IP,以节省时间。
使用系统域名解析器:--system-dns在进行域名解析时,默认nmap会发送查询到主机上配置的域名服务器来解析域名,也可以使用指定的域名解析服务器。
扫描IPv6地址:-6 路由跟踪:--traceroute路由跟踪可以帮助用户查出从本地计算机到目标之间所经过的网络节点,并可以看到通过各个节点的时间。例如:
需要使用root权限
SCTP INIT Ping扫描:-PYSCTP全称Stream Control Transmission Protocol,流控制传输协议,是一个传输层协议,可以看作是TCP协议的改进。SCTP INIT Ping通过向目标主机发送INIT包来判断目标主机是否存活。
网络探索 时序选项:-T-T 用于指定时序,共有0~5 6个选项,0最慢,5最快,慢的扫描多用于IDS逃避,一般使用-T4进行扫描,可以在尽可能短的时间做到尽可能精确的扫描。
一些常用的扫描类型-p用来指定一个扫描的端口号,也可以用来指定一个范围。如果想指定TCP的端口或UDP的端口,可以在端口号前添加“T:”或“U:”,若不指定协议限定符,则端口号会被添加到所有协议列表。
-F用于快速扫描端口,只会扫描有限的端口来提升速度。
-r使用该选项可以避免对端口进行随机顺序的扫描,默认是随机进行扫描的。
--top-ports后跟数字,可以指定扫描开发概率最高的前若干个端口。
--port-ratio后面跟频率,扫描一定概率以上开放的端口,与--top-ports类似,保存在nmap-services文件中。
TCP SYN扫描:-sS扫描速度较快,隐蔽性也较好,是一种常用的扫描方式。因为它不打开一个完全的TCP连接,也被称为半开扫描。TCP连接扫描会调用打开目标上相关端口并完成3次握手,这样做容易被目标主机察觉,使用半开扫描不容易被察觉。
nmap先向目标主机发送一个SYN包请求连接,若收到RST表明无法连接目标主机,即主机端口关闭。若端口开放,则会响应一个SYN/ACK包,此时三次握手尚未进行完成,nmap收到相应后向目标发送一个RST代替ACK包,连接未建立,但nmap已经知道端口开放了。如下图所示:
TCP 连接扫描:-sT理解了tcp半开扫描,自然就能理解tcp连接扫描,除非SYN扫描不能使用,否则SYN扫描将是比TCP连接扫描更好的选择。
UDP扫描:-sUUDP扫描往往速度较慢,也很容易被管理员忽略,UDP头没有任何数据,就使得nmap可以轻松判断端口的开放状态,若果返回ICMP端口不可达,就可以断定其实关闭的,其他的就可以被认定是被过滤的,若被响应则可以判断其实开放的。
隐蔽扫描:-sN;-sF;-sX-sN为NULL扫描,通过发送非常规的TCP数据包对计算机进行探测,若目标主机端口关闭,则会响应一个RST,若端口开放,则不会响应任何信息。
-sF为FIN扫描,当我们使用TCP SYN扫描时可能被目标主机的防火墙发现,会阻止SYN数据包,使用TCP FIN扫描不需要完成TCP握手就会有很好的穿透效果,若收到RST响应,则说明目标端口时开放的,否则为关闭的。
-sX为Xmas扫描,数据包的FIN、PSH和URG标记位置置为1,若目标系统遵循RFC793且端口开放,则目标主机会响应一个RST。若目标主机不遵循RFC793,则无论端口是否开放,都会响应RST。
TCP ACK扫描:-sA与TCP SYN扫描类似,该方法是向目标主机端口发送一个只有ACK标志的TCP数据,如果目标主机端口开放,则会返回一个TCP RST数据包。例如:
(我觉得这种扫描方式不是特别准确,因为无论我测试的端口有没有开放,都得到了RST包,且nmap对端口状态都显示unfiltered)
TCP窗口扫描,与ACK原理类似,通过检查RST报文判断目标端口是否开放。
TCP Maimon扫描:-sM和NULL、FIN、Xmas扫描完全一样,除了探测报文是FIN/ACK。
自定义TCP扫描:--scanflags可以自定义标志位,可以是:URG、ACK、PSH、RST、SYN、FIN中的任意组合,标志位之间不需要空格。不常用,非一般场景使用。
空闲扫描:-sI允许进行端口完全欺骗扫描,可以使攻击者不使用自己的IP向目标主机发送数据包,可以利用不活跃的僵尸主机反弹给攻击者一个旁通信道,IDS会把僵尸主机当做攻击者,是很隐蔽的扫描方法。
如下图所示,当我们筛选发送源可以看到192.168.137.6(即Kali)并没有向目标主机192.168.137.1直接发送数据包,而是利用了“僵尸主机”192.168.137.130,指定的端口必须是对192.168.137.6开放的。
IP协议扫描:-sO不是一种严格的端口扫描方式,并不扫描TCP、UDP端口号,而是IP协议号。可以帮助用户确定目标主机支持哪些IP协议,例如TCP、UDP、IGMP。如下图所示:
FTP Bounce扫描:-b它利用存在漏洞的 FTP 服务器对目标主机进行扫描,格式为nmap -b [username:password@server:port] [host]
username:password@server:port。其中,server 是指 FTP 服务的名字或 IP 地址,port为ftp服务端口,若为默认21则可以是省略,如果 FTP 服务器允许匿名用户登录的话,则可以省略 username:password。
写的大都是个人学习笔记,如有错误欢迎指正,如有疑问,欢迎讨论!
【文章出处:抗攻击防御ddos http://www.558idc.com/krgf.html 复制请保留原URL】