nmap 地表最强大的端口扫描器
Nmap是渗透测试人员使用的最著名的扫描工具, 本文介绍了一些端口相关的基础知识, 以及Nmap的一些核心功能以及一些有用的命令.
端口
网络上的计算机要提供某种服务, 需要通过某个端口来完成. 端口不对应任何的硬件, 是一个软件层的抽象.
端口的范围在1到65335, 常见的端口有22(ssh), 80(http), 3306(mysql), 5900(vnc)等等. 端口的范围有三个分段:
| port range | usage |
|----------------|--------------------|
| 1 to 1024 | well-known port |
| 1024 to 49151 | registed port |
| 49151 to 65535 | any thing you like |
unix/linux 主机上的 /etc/services 文件记录了常见端口
less /etc/services
端口扫描和nmap
检查服务器是否开放了某个端口的操作称为端口扫描, 可以批量扫描一个子网内的所有计算机.
nmap就是这么一个命令, 是Network Mapper的缩写.
它是一个开源的Linux命令行工具,用于扫描网络中的IP地址和端口,并检测已安装的应用程序.
Nmap允许网络管理员查找在其网络上运行的设备,发现开放的端口和服务,并检测漏洞.
Nmap无需复杂配置, 支持简单的命令(例如,检查主机是否启动)和通过Nmap脚本引擎进行复杂脚本.
Nmap的其他功能包括:
- 能够快速识别单个或多个网络上的所有设备,包括服务器、路由器、交换机、移动设备.
- 帮助识别在系统上运行的服务,包括Web服务器、DNS服务器和其他常见应用程序, Nmap还可以以合理的准确性检测应用程序版本,以帮助检测现有的漏洞.
- Nmap可以找到有关在设备上运行的操作系统的信息。它可以提供操作系统版本等详细信息,从而在渗透测试期间更容易计划其他方法.
- 在安全审计和漏洞扫描期间,您可以使用Nmap脚本引擎中的现有脚本攻击系统.
- Nmap有一个名为Zenmap的图形用户界面。它可以帮助您开发网络的可视化映射,以获得更好的可用性和报告.
使用
基本扫描
扫描网络上的活动设备列表是网络映射的第一步。有两种类型的扫描可用于此:
Ping扫描—扫描给定子网上启动和运行的设备列表.
nmap -sP 192.168.1.1/24
扫描单个主机—扫描单个主机的1000个知名端口。这些端口是SQL、SNTP、apache等流行服务使用的端口.
nmap www.baidu.com
Starting Nmap 7.93 ( https://nmap.org ) at 2023-04-15 20:19 CST
Nmap scan report for www.baidu.com (110.242.68.4)
Host is up (0.042s latency).
Other addresses for www.baidu.com (not scanned): 110.242.68.3
Not shown: 997 filtered tcp ports (no-response)
PORT STATE SERVICE
21/tcp open ftp
80/tcp open http
443/tcp open https
隐形扫描
隐形扫描通过发送SYN数据包和分析响应来执行。如果收到SYN/ACK,则表示端口已打开,可以打开TCP连接.
然而,隐形扫描永远不会完成3向握手,这使得目标很难确定扫描系统.
nmap -sS scanme.nmap.org
可以使用“-sS”命令执行隐形扫描. 隐形扫描速度更慢,不像其他类型的扫描那样具有攻击性,因此您可能需要等待一段时间才能获得响应.
版本扫描
查找应用程序版本是渗透测试的关键部分.
可以从特定版本的服务的公共漏洞和漏洞(CVE)数据库中找到现有漏洞. 然后,可以使用Metasploit等开发工具攻击机器.
nmap -sV scanme.nmap.org
要进行版本扫描,使用“-sV”命令. Nmap将提供其版本的服务列表. 版本扫描并不总是100%准确,但它确实使您离成功进入系统又近了一步.
操作系统扫描
除了服务及其版本外,Nmap还可以使用TCP/IP指纹提供有关底层操作系统的信息. Nmap还将尝试在操作系统扫描期间找到系统正常运行时间.
nmap -sV scanme.nmap.org
可以使用osscan-limit等附加标志将搜索限制为几个预期目标. Nmap将显示每个操作系统猜测的置信度百分比.
操作系统检测并不总是准确的,但它有助于探测者更接近他们的目标。
激进的扫描
Nmap有一个攻击性模式,可以启用操作系统检测、版本检测、脚本扫描和跟踪路由. 可以使用-A参数执行攻击性扫描.
nmap -A scanme.nmap.org
激进的扫描比常规扫描提供的信息要好得多. 然而激进的扫描也会发出更多的探测,并且更有可能在安全审计期间被检测到(容易暴露自己).
扫描多个主机
Nmap具有同时扫描多台主机的能力。当您管理庞大的网络基础设施时,此功能会派上用场.
您可以通过多种方法扫描多个主机:
将所有IP地址写在一行中,以同时扫描所有主机。
nmap 192.164.1.1 192.164.0.2 192.164.0.2
使用星号(*)一次扫描所有子网。
nmap 192.164.1.*
添加逗号来分隔地址结尾,而不是键入整个域。
nmap 192.164.0.1,2,3,4
使用连字符指定IP地址范围
nmap 192.164.0.0–255
端口扫描
端口扫描是Nmap最基本的功能之一, 可以通过多种方式扫描端口.
使用-p参数扫描单个端口
nmap -p 973 192.164.0.1
如果指定端口类型,则可以扫描有关特定类型连接的信息,例如TCP连接.
nmap -p T:7777, 973 192.164.0.1
一系列端口可以通过用连字符分隔来扫描它们
nmap -p 76–973 192.164.0.1
还可以使用-top-ports标志来指定要扫描的顶部n个端口
nmap --top-ports 10 scanme.nmap.org
从文件扫描
如果想扫描一个大的IP地址列表,您可以通过导入包含IP地址列表的文件来完成.
nmap -iL /input_ips.txt
上述命令将生成“input_ips.txt”文件中所有给定域的扫描结果.
除了简单地扫描IP地址外,您还可以使用其他选项和标志.
浏览和导出扫描结果
渗透测试可以持续几天甚至几周, 导出Nmap结果有助于避免冗余工作,并有助于创建最终报告.
详细输出: -v verbsoe
nmap -v scanme.nmap.org
详细输出提供了有关正在执行的扫描的更多信息。监控Nmap在网络上执行的分步操作是有用的, 对于初学者特别有用.
输出到文本
Nmap扫描也可以导出到文本文件。它将与原始命令行输出略有不同,但它将捕获所有基本的扫描结果.
nmap -oN output.txt scanme.nmap.org
XML输出
Nmap扫描也可以导出到XML, 导入扫描结果时易于解析.
nmap -oX output.xml scanme.nmap.org
多种格式一起导出, 还可以使用-oA命令一次以所有可用格式导出扫描结果.
nmap -oA output scanme.nmap.org
上述命令将在三个文件中导出扫描结果——output.xml,output.Nmap和output.gnmap
Nmap帮助
Nmap有一个内置的帮助命令,列出了可以使用的所有标志和选项, 考虑到Nmap附带的命令行参数数量,它通常很方便.
nmap -h
Nmap脚本引擎
Nmap脚本引擎(NSE)是一个非常强大的工具,可以使用它来编写脚本和自动化许多网络功能.
可以找到大量分布在Nmap上的脚本,或者根据您的要求编写自己的脚本, 甚至可以使用Lua编程语言修改现有脚本.
Zenmap
Zenmap是Nmap的图形用户界面。这是一个免费的开源软件,可帮助您启动并运行Nmap。
除了提供可视化网络映射外,Zenmap还可以保存和搜索扫描件以备将来使用.
Zenmap非常适合想要在不通过命令行界面的情况下测试Nmap功能的初学者.
参考资料
https://github.com/jasonniebauer/Nmap-Cheatsheet