4.5 如何使用Nmap进行服务发现
如何进行更精确的服务发现呢?Nmap提供了更精确的服务及版本检测选项,可通过添加选项-sV进行服务和版本检测。服务和版本检测还有更多的选项。
首先进行端口扫描,默认情况下使用SYN扫描。
其次进行服务识别,发送探针报文,得到返回确认值,确认服务。
最后进行版本识别,发送探针报文,得到返回的报文信息,分析得出服务的版本。
在发现开放的TCP端口或者UDP端口之后,服务发现程序将会对这些端口进行探测,以此确定该端口运行的具体服务。如果在扫描某个UDP端口后仍然无法确定该端口是open还是filtered,那么该端口状态就被标记为open|filtered。版本探测将试图从这些端口引发一个响应(就像它对开放端口做的一样),如果成功,就把状态改为open。open|filtered TCP端口用同样的方法对待。Nmap-service-probes数据库包含查询不同服务的探测报文和解析识别响应的匹配表达式。版本检测程序会将探测结果与Nmap-service-probes数据库中的内容进行比较,如果与其中的某一项匹配成功,就可以确认目标端口运行的具体服务。当Nmap从某个服务收到响应,但不能在数据库中找到匹配时,它就打印一个特殊的fingerprint和一个URL方便给你提交,如果确实知道端口运行什么服务,可以花两分钟提交自己的发现,让每个人受益。
可以使用以下选项打开和控制版本检测。
-sV(版本探测)
打开版本探测。也可以用-A同时打开操作系统探测和服务发现。
--allports(不为版本探测排除任何端口)
通常,Nmap在进行版本探测时不会对目标的全部端口进行扫描,而是会跳过一些端口,例如端口号为9100的TCP端口。如果对这个端口进行扫描,而目标又恰好是一台打印机的话,这台打印机就有可能会将所有的数据都打印出来。如果确实有必要的话,也可以使用--allports扫描所有的端口。
--version-intensity <intensity>(设置版本扫描强度)
当进行版本扫描(-sV)时,Nmap发送一系列探测报文,每个报文都被赋予一个1到9之间的值。这里的强度水平说明了应该使用哪些探测报文。数值越高,服务越有可能被正确识别。然而,高强度扫描花更多时间。强度值必须在0和9之间。默认是7。
--version-light(打开轻量级模式)
--version-light其实就相当于--version-intensity 2。这种轻量级模式使版本扫描速度快了许多,不过使用这种模式对服务进行扫描成功的几率也小一些。
--version-all(尝试每个探测)
--version-all其实就相当于version-intensity 9,保证对每个端口尝试所有探测报文。
--version-trace(跟踪版本扫描活动)
这将会使Nmap打印出关于正在进行的扫描的详细调试信息。它是你用--packet-trace所得到的信息的子集。
-sR(RPC扫描)
这种方法和许多端口扫描方法联合使用。它对所有被发现开放的TCP/UDP端口执行SunRPC程序NULL命令,试图确定它们是否RPC端口,如果是,可以确定是什么程序和版本号。
刘开该如何使用本章中学到的知识呢?上一章刘开已经找到了目标的IP,下一步是找出这个目标的服务,要知道很多软件上运行的服务都是存在漏洞的。
扫描的结果如下。
Starting Nmap 7.30 ( https://nmap.org ) Nmap scan report for bogon (192.168.153.131) Host is up (0.00018s latency). Not shown: 998 closed ports PORT STATE SERVICE VERSION 21/tcp open ftp Microsoft ftpd 5.0 80/tcp open http PMSoftware Simple WebServer 2.2 MAC Address: 00:0C:29:90:DF:C3 (VMware)Device type: general purposeRunning: Microsoft Windows 7 Nmap done: 1 IP address (1 host up) scanned in 54.10 seconds
刘开经过扫描发现了目标主机上居然安装着PMSoftware Simple WebServer 2.2,要知道Windows 7并不像Windows XP和Windows 2003那样存在大量的漏洞,但是这一款PMSoftware Simple WebServer软件上存在着简单Web服务器连接缓冲区溢出漏洞。
现在刘开只需要向目标发送一个恶意的HTTP请求,从而引起目标应用程序的缓冲区溢出,就可以最终控制目标计算机。但是这一切又如何实现呢?
对版本扫描检测的讲解到此为止,更加深入的部分会在第12章进行介绍。