Nmap传统上被描述为端口扫描工具,因此Nmap也是一个极其流行的黑客工具,用于获取目标信息,特别是侦查工作。众所周知,侦查被认为是任何渗透测试中最重要的方面之一。当建立实际目标或IP的信息时,该工具确实最适合使用。
Nmap特色用途
主机探测:探测网络上的主机,例如列出响应TCP和ICMP请求、icmp请求、开放特别端口的主机 端口扫描:探测目标主机所开放的端口 版本检测:探测目标主机的网络服务,判断其服务名称及版本号 系统检测:探测目标主机的操作系统及网络设备的硬件特性 支持探测脚本的编写:使用Nmap的脚本引擎(NSE)和Lua编程语言
Nmap识别的端口状态
状态1:open(开放的)
应用程序正在该端口接收 TCP 连接或者 UDP 报文 发现这一点常常是端口扫描 的主要目 标。安全意识强的人们知道每个开放的端口 都是攻击的入口。攻击者或者入侵测试者想 要发现开放的端口。而管理员则试图关闭它们或者用防火墙保护它们以免妨碍了合法用 户。非安全扫描可能对开放的端口也感兴趣,因为它们显示了网络上哪些服务可供使用
状态2:closed(关闭的)
关闭的端口对于 Nmap 也是可访问的(它接受 Nmap 的探测报文并作出响应), 但没有应用 程序在其上监听。它们可以显示该 IP 地址上(主机发现,或者 ping 扫描)的主机正在运 行 up 也对部分操作系统探测有所帮助。因为关闭的关口是可访问的,也许过会儿值得 再扫描一下,可能一些又开放了。系统管理员可能会考虑用防火墙封锁这样的端口。那 样他们就会被显示为被过滤的状态,下面讨论。
状态3:filtered(被过滤的)
由于包过滤阻止探测报文到达端口, Nmap 无法确定该端口是否开放。过滤可能来自专业 的防火墙设备,路由器规则 或者主机上的软件防火墙。这样的端口让攻击者感觉很挫折 因为它们几乎不提供 任何信息。有时候它们响应 ICMP 错误消息如类型 3 代码 13 (无法 到达目标: 通信被管理员禁止),但更普遍的是过滤器只是丢弃探测帧, 不做任何响应 这迫使 Nmap 重试若干次以防万一探测包是由于网络阻塞丢弃的。这使得扫描速度明显 变慢。
状态4:unfiltered(未被过滤的)
未被过滤状态意味着端口可访问,但 Nmap 不能确定它是开放还是关闭。只有用于映射 防火墙规则集的 ACK 扫描才会把端口分类到这种状态。用其它类型的扫描如窗口扫描, SYN 扫描,或者 FIN 扫描来扫描未被过滤的端口可以帮助确定 端口是否开放。
状态5:open|filtered(开放或者被过滤的)
当无法确定端口是开放还是被过滤的,Namp 就把该端口划分成 这种状态。开放的端口不 响应就是一个例子。没有响应也可能意味着报文过滤器丢弃 了探测报文或者它引发的任 何响应。因此 Nmap 无法确定该端口是开放的还是被过滤的。UDP,IP 协议, FIN,Null 和 Xmas 扫描可能把端口归入此类。
状态6:closed|filtered(关闭或者被过滤的)
该状态用于 Nmap 不能确定端口是关闭的还是被过滤的。它只可能出现在 IPID Idle 扫 描中。
补充说明
Nmap 输出的是扫描目标的列表,以及每个目标的补充信息,至于是哪些信息则依赖于所使用的选项。“所感兴趣的端口表格”是其中的关键。那张表列出端口号,协议,服务名称和状态。状态可能是 open(开放的),filtered(被过滤的), closed(关闭的),或者 unfiltered(未被过 滤的)。Open(开放的)意味着目标机器上的应用程序正在该端口监听连接/报文。filtered(被过滤的) 意味着防火墙,过滤器或者其它网络障碍阻止了该端口被访问,Nmap无法得知它是open(开放的) 还是closed(关闭的)。closed(关闭的)端口没有应用程序在它上面监听,但是他们随时可能开放。当端口对 Nmap 的探测做出响应,但是Nmap 无法确定它们是关闭还是开放时,这些端口就被认为是unfiltered(未被过滤的) 如果Nmap报告状态组合open|filtered 和closed|filtered时,那说明Nmap无法确定该端口处于两个状态中的哪一个状态。当要求 进行版本探测时,端口表也可以包含软件的版本信息。当要求进行 IP 协议扫描时 (-sO),Nmap提供关于所支持的 IP 协议而不是正在监听的端口的信息。除了所感兴趣的端口表,Nmap还能提供关于目标机的进一步信息,包括反向域名,操作系统检测,设备类型,和MAC 地址。
Nmap用法
在nmap的所有参数中,只有目标参数是必须给出的。其最简单的形式是在命令行直接输入一个主机名或者一个IP地址。如果你希望扫描某个IP地址的一个子网,你可以在主机名或者IP地址的后面加上/掩码。掩码在0(扫描整个网络)到32(只扫描这个主机)。使用/24扫描C类地址,/16扫描B类地址。
示例1 – timing参数
使用“-A”标志,就可以开始扫描,命令如下:
>nmap -A -T4 http://192.168.1.102 # timing参数可以指定nmap扫描的速度。参数如下: T0 => paranoid 慢速网络扫描,串行扫描,两次扫描间隔5分钟。扫描速度极慢。 T1 => Sneky 慢速网络扫描,串行扫描,两次扫描间隔15秒,扫描速度较慢。 T2 => Polite 中速网络扫描,串行扫描,两次扫描间隔400毫秒,扫描速度慢。 T3 => Normal 中速网络扫描,并行扫描,两次扫描间隔0秒,扫描速度正常。 T4 => Aggressive 快速网络扫描,并行扫描,两次扫描间隔0秒,扫描速度较快。 T5 => Normal 快速网络扫描,并行扫描,两次扫描间隔0秒,扫描速度极快。 -sS 使用SYN+ACK的方法,使用TCP SYN, -sT 使用TCP的方法,完成3次握手 -sU 使用UDP的方法 -sP ICMP ECHO Request 送信,有反应的端口进行调查 -sF FIN SCAN -sN 全部FLAG OFF的无效的TCP包送信,根据错误代码判断端口情况 -P0 无视ICMP ECHO request的结果,SCAN -p scan port range 指定SCAN的目端口的范围1-100, 或者使用25,100的方式 -O 侦测OS的种类 -oN 文件名 通常格式文件输出 -oX 文件名 通过DTD,使用XML格式输出结果 -oG 文件名,grep容易的格式输出 -sV 服务的程序名和版本SCAN
示例2 – 探测操作系统类型和版本
>nmap -O 192.168.1.102 >nmap -A -T4 192.168.1.102
示例3 – ARP扫描
#探测本网段存活的设备 >nmap -PR 192.168.1.0/24 #完成后,查看ARP表 >cat /proc/net/arp
示例4 – Ping扫描
#列出对扫描做出响应的主机 >nmap -sP 192.168.1.0/24 #仅列出指定网络上的每台主机,不发送任何报文到目标主机,被动 >nmap -sL 192.168.1.0/24
示例5 – 主机开放的端口
#可以指定一个以逗号分隔的端口列表(如-PS 22,23,25,80) >nmap -PS 192.168.1.102
示例6 – UDP ping探测主机
>nmap -PU 192.168.1.0/24
示例7 – 高频率扫描选项
#SYN扫描,又称为半开放扫描,不打开一个完全的TCP连接,执行速度很快 >nmap -sS 192.168.1.0/24
示例8 – SYN扫描
#指定IP范围指定端口 >nmap -sS 192.168.1.1-30 -p 80
示例9 – 探测端口的服务和版本
>nmap -sV 192.168.1.1 -p 1-65535
示例10 – 扫描思科路由器
#思科路由器会在以下端口中运行了常见的服务。列举出以下端口开放的主机,可以定位到路由器设备可能的IP地址及端口状态。 >nmap -p1-25,80,512-515,2001,4001,6001,9001 10.20.0.1/16
示例11 – 扫描路由器操作系统
#与通用PC扫描方式类似,使用-O选项扫描路由器的操作系统。-F用于快速扫描最可能开放的100个端口,并根据端口扫描结果进一步做OS的指纹分析。 >nmap -O -F -n 192.168.1.1
示例12 – 扫描指定IP开放端口
>nmap -sS -p 1-65535 -v www.baidu.com -sS: 半开扫描,很少系统会把它计入系统日记。但是要root权限。 -p:指定端口。 -v:显示扫描过程,推荐使用。
示例13 – 探测主机操作系统
>nmap -O www.baidu.com #全面探测系统 >nmap -v -A www.baidu.com -A: 全面系统检测,启用脚本检测。
示例14 – 穿透防火墙进行扫描
>nmap -Pn -A www.baidu.com
示例15 – 实例脚本引擎
nmap -p 80 --script=xxx.nse www.baidu.com
示例16 – 扫描指定端口是否开放
#扫描x.x.x.x/21的2048 IP地址的80端口是是否开放,并只显示开放的主机。 >nmap -sT -p 80 -oG – –open x.x.x.x/21
示例17 – 扫描文件里所有IP开放80端口的主机
>nmap -p 80 -iL “D:\ip.txt” –open # 扫描x.x.x.x/18下的所有IP的8080端口,并把扫描结果保存入D盘nmap.txt。 >nmap -sS -p 8080 -T4 -Pn –open -oG d:\nmap.txt x.x.x.x/18
示例18 – 禁用DNS名称解析进行扫描
#加快Nmap扫描速度(它们可能需要很长时间),只需添加将禁用DNS解析的标志即可 >nmap -p 80 -n 8.8.8.8 #追加将改变扫描的速度。这很重要,因为快速扫描将触发防火墙和入侵检测系统。 -T4T10
示例19 – 检测服务/守护进程版本
>nmap -sV 192.168.1.102
示例20 – 基于TCP或UDP协议扫描
#TCP Nmap 命令 >nmap -sT 192.168.102 #UDP Nmap 命令 >nmap -sU 192.168.1.102
示例21 – nmap执行CVE检测
>nmap -Pn --script vuln 192.168.1.102
示例22 – Nmap发起DOS 攻击
#测试自己或客户的网络作为压力测试,验证服务如何应对DoS攻击。请勿恶意使用!!! >nmap 192.168.1.102 -max-parallelism 700 -Pn --script http-name-of-known-hack --script-args http-name-of-known-hack.runforever=true
示例23 – Nmap发起暴力攻击
#仅作为内部测试验证使用,请勿恶意使用!!! >nmap -sV --script http-wordpress-brute --script-args 'userdb=users.txt,passdb=passwds.txt,http-wordpress-brute.hostname=domain.com, http-wordpress-brute.threads=3,brute.firstonly=true' 192.168.1.102 #针对FTP,端口 21 运行一个 FTP 服务,因此标志(用于端口)和 21 用于必要的端口。-p >nmap --script ftp-brute -p 21 192.168.1.102
示例24 – 检测远程主机上的恶意软件感染
# Nmap检测恶意软件。使用Google恶意软件检查资源. >nmap -p123 --script http-google-malware http://clientinfectedsitexyz.com
示例25 – 结合Nmap和Nikto
>nmap -p80 192.168.1.0/24 -oG - | nikto.pl -h -
示例26 – 列举网络的所有主机,nmap扫描
#列出baidu.com网络的所有主机,让nmap进行扫描。 >host -l baidu.com | cut-d -f 4 | ./nmap -v -iL –