十大黑客工具之nmap( 四 )


探测主机是否在线:全面扫描时探测主机是否在线和简单扫描完全一致
探测端口是否打开:全面扫描时探测主机端口开放和简单扫描完全一致
探测端口服务具体版本:每个协议都不一样,总之就是确定端口开放了之后,和该端口进行更多的数据交互,以获得更多的信息 。在下一节的版本探测中有更深入的研究
nmap -T4 -A -v 192.168.1.250

十大黑客工具之nmap

文章插图
 

十大黑客工具之nmap

文章插图
 
探测指定端口的开放状态
在默认情况下,Nmap对端口的扫描方式是从小到大进行的,或者是参照 nmap-services 中文件列出的端口进行扫描 。-p选项可以指定一个端口号或者一个端口范围 。若既想扫描TCP端口又想扫描UDP端口,则需要在端口号前加上T:或U:来分别代表TCP和UDP协议 。注意,要既扫描TCP又扫描UDP,则需要指定-sU及至少一个TCP扫描类型(-sS(半连接扫描),-sT(全连接扫描)等),如果没有给定协议限定符,端口号会被加到所有协议列表 。
例: nmap -p 80-445 192.168.1.250 扫描目标主机的80-445端口的开放情况
十大黑客工具之nmap

文章插图
 
从上面的图中可以看到,若只简单的指定一个端口范围,Nmap会默认以TCP SYN方式扫描目标端口,若既想扫描目标TCP端口又想扫描UDP的端口,则需要指定扫描方式以及端口 。
例: nmap -sS -sU -p T:80,U:445 192.168.1.250 以半连接的TCP SYN方式扫描目标主机的80端口,以UDP方式扫描目标主机的445端口
十大黑客工具之nmap

文章插图
 
探测N个最有可能开放的端口例:nmap -sS -sU --top-ports 100 192.168.1.250
十大黑客工具之nmap

文章插图
 
参数:
  • -sS表示使用TCP SYN方式扫描TCP端口;
  • -sU表示扫描UDP端口;
  • --top-ports 100表示扫描最有可能开放的100个端口(TCP和UDP分别100个端口) 。
四:版本侦测版本侦测,用于确定目标主机开放端口上运行的具体的应用程序及版本信息 。
Nmap提供的版本侦测具有如下的优点:
  • 高速 。并行地进行套接字操作,实现一组高效的探测匹配定义语法 。
  • 尽可能地确定应用名字与版本名字 。
  • 支持TCP/UDP协议,支持文本格式与二进制格式 。
  • 支持多种平台服务的侦测,包括Linux/Windows/Mac OS/FreeBSD等系统 。
如果检测到SSL,会调用openSSL继续侦测运行在SSL上的具体协议(如HTTPS/POP3S/IMAPS) 。
如果检测到SunRPC服务,那么会调用brute-force RPC grinder进一步确定RPC程序编号、名字、版本号 。
支持完整的IPv6功能,包括TCP/UDP,基于TCP的SSL 。
通用平台枚举功能(CPE)
广泛的应用程序数据库(nmap-services-probes) 。目前Nmap可以识别几千种服务的签名,包含了180多种不同的协议 。
版本侦测原理
版本侦测主要分为以下几个步骤:
  • 首先检查open与open|filtered状态的端口是否在排除端口列表内 。如果在排除列表,将该端口剔除 。
  • 如果是TCP端口,尝试建立TCP连接 。尝试等待片刻(通常6秒或更多,具体时间可以查询文件nmap-services-probes中Probe TCP NULL q||对应的totalwaitms) 。通常在等待时间内,会接收到目标机发送的“WelcomeBanner”信息 。nmap将接收到的Banner与nmap-services-probes中NULL probe中的签名进行对比 。查找对应应用程序的名字与版本信息 。
  • 如果通过“Welcome Banner”无法确定应用程序版本,那么nmap再尝试发送其他的探测包(即从nmap-services-probes中挑选合适的probe),将probe得到回复包与数据库中的签名进行对比 。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定 。
  • 如果是UDP端口,那么直接使用nmap-services-probes中探测包进行探测匹配 。根据结果对比分析出UDP应用服务类型 。
  • 如果探测到应用程序是SSL,那么调用openSSL进一步的侦查运行在SSL之上的具体的应用类型 。
  • 如果探测到应用程序是SunRPC,那么调用brute-force RPC grinder进一步探测具体服务 。
版本侦测用法
比如目标主机把SSH的22号端口改成了2222端口,那么如果使用普通扫描只会发现2222端口是开启的,并不能知道2222号端口上运行的程序,通过加参数 -sV 进行版本扫描,可以探测到目标主机上2222端口运行的是SSH服务


推荐阅读