- 本片介绍的是Namp的Linux Kali操作系统下的使用,Nmap在Windows操作系统下的使用,点击文章===>javascript:void(0)
- 功能概述:Nmap是主动扫描工具,用于对指定的主机进行扫描
- 历史背景:Nmap是由Gordon Lyon设计并实现的,与1997开始发布,最初设计的目的是希望打造一款强大的端口扫描工具,但是随着发展,Nmap已经变为全方面的安全工具
- “NSE”脚本引擎:Nmap中的该引擎提供了可以向Nmap添加新的功能模块
- nmap是一个强大的工具,如果想要深入了解,可以参考书籍《诸神之眼——Nmap网络安全审计技术揭秘》
Nmap可以实现的功能
如果你对一台计算机进行审计(扫描)的话,可以获取以下信息:
- 目标主机是否在线
- 目标主机所在网络的拓扑
- 目标主机开发的端口
- 目标主机所使用的操作系统
- 目标主机所运行的服务以及版本,例如Apache hpptd 2.2.14、OpenSSH 5.3pl、Debian 3ubuntu4
- 目标主机所存在的漏洞,例如弱口令、ms08_067、ms10_054等
二、对主机地址进行扫描Nmap的打开使用
- nmap的使用是不需要进入某个进程的,而是直接在命令行输入namp+选项来进行操作
①对单个主机进行扫描
- 命令格式:nmap 主机IP
例如下面我们对IP为192.168.43.137的主机进行扫描,显示的内容如下
- 第1行:Nmap的版本以及扫描开始的时间
- 第2行:是一个标题,生成的是关于192.168.43.137主机的报告
- 第3行:给出了目标主机的当前状态,“up”意味着该主机处于联网状态
- 第4行:在进行的1000个端口中,有998个端口时关闭的(不加任何选项,nmap默认扫描1000个端口)
- 第5、6、7:代表当前主机开发的端口以及端口对应的服务
- 第8行:该主机的MAC地址,以及网卡的类型
- 最后一行:总结信息(扫描了一台主机,共耗时10.34秒)
-sn选项(主机在线检查)
- nmap不加任何选项时,会扫描目标主机的在线状态、以及端口扫描。使用-sn选项:可以只检测目标主机是否在线
例如:可以看到目标主机192.168.43.54处于在线状态
②对多个不连续的主机进行扫描
- 格式:nmap [目标1 目标2 目标3.....]
例如下面我们对192.168.43.137、192.168.43.54、192.168.43.88三个主机进行扫描,扫描之后,各个主机信息分开看到只有2个主机处于在线状态
③对连续范围内的主机进行扫描
- 格式:nmap [IP地址范围]
例如:下面我们检测192.168.43.1-255范围内的主机有多少处于联网状态,可以看到有3个主机处于联网状态
三、使用协议对主机进行扫描④对整个子网进行扫描
nmap还支持使用CIDR的方式来扫描整个子网
- 格式:nmap [IP地址/掩码位数]
例如:我们检查192.168.43.1子网下的所有主机有多少在线,可以看到与刚才扫描连续范围内的主机结果是一样的
①屏蔽ping协议扫描(-PN选项)
概念:通过nmap再进行其他扫描之前,都会对目标进行一个ping扫描,如果对目标没有ping,那么就会结束整个扫描过程。有些主机就利用了这种特性,其实目标在线,但是采取了某种手段屏蔽了ping扫描,那么我们的nmap就扫描不到这个主机了。屏蔽ping扫描的功能就是:在nmap扫描的过程中,不论目标主机能不能ping通,都要将整个扫描过程完成
- 格式:nmap -PN [目标]
②仅适用ping协议进行扫描(-sP选项)
概念:与-PN选项相反,适用此选项则只对目标采取ping协议,因为只采用ping协议扫描,所以扫描速度较快
- 格式:nmap -sP [目标]
③使用ARP协议对主机进行扫描(-PR选项)
概念:如果目标主机与自己处于同一网段下,那么就可以使用ARP协议进行扫描,这个扫描速度最快,且最为精准
- 格式:nmap -PR [目标]
④使用TCP协议对主机进行扫描(-sT、-sS选项)
三次握手过程:主动端先发送SYN报文,被动端回应SYN+ACK报文,然后主动端再回应ACK
概念:利用三次握手原理,namp向目标先发送SYN报文,如果对方回应SYN+ACK,说明目标在线
- 全开扫描(-sT选项):完成了3次握手的扫描称为“全开扫描”
- 半开扫描(-sS选项):由于3次握手中,最后一步的意义不大,所以扫描的时候,第三步没有进行的扫描称为“半开扫描”
建议:建议使用半开扫描,因为这种扫描速度最快,并且不容易被目标的日志记录
四、端口扫描⑤使用UDP协议对主机进行扫描(-sU选项)
UDP协议比TCP协议简单,但是不如TCP协议方便,并且耗时很长
- 格式:nmap -sU [目标]
- nmap对端口的扫描一般采用TCP协议,并且不给出其它参数选项时,只默认扫描1000个端口
对目标端口扫描时,扫描到的端口状态有以下5种:
- open:应用程序在该端口接受TCP连接/UDP报文
- closed:关闭的端口对于nmap也是可访问的,它接受nmap探测报文并作出响应,但是没有应用程序在其上监听
- filtered:由于包过滤阻止探测报文达到端口,nmap无法确定端口是否开放。过滤可能来自专业的防火墙设备,路由规则或者主机上的软件防火墙
- unfiltered:未被过滤状态意味着端口可访问,但是nmap无法确定它是开发还是关闭。只有映射防火墙规则集的ACK扫描才会把端口分类到这个状态
- open|filtered:无法确定端口是开放还是过滤,开放的端口不响应就是一个例子
①扫描全部端口
- 格式:nmap -p "*" [目标]
②扫描指定端口
- 格式:nmap -p 端口号 [目标]
五、扫描操作系统类型③扫描使用频率最高的n个端口
该方法是扫描使用频率最高的n个端口,而不是扫描前n个端口
- 格式:nmap --top-ports 端口数量 [目标]
- 功能:nmap可以扫描目标主机,并且猜测目标主机属于哪种操作系统。例如我们知道了目标系统为Windows XP,那么就不必再使用针对Linux系统的渗透测试的方法了等等。越老旧的操作系统意味着越容易被渗透,所以我们在进行渗透的时候往往希望找到目标网络中那些比较老的系统
- 原理:nmap通过向目标主机发送探针,然后根据目标主机的回应猜测系统。这种探针大都以TCP和UDP数据包的形式,检查的细节包括初始序列号(ISN)、TCO选项、IP标识符(ID)数字时间戳、显示拥塞通知(ECN)、窗口大小等,每个操作系统对于探针都会做出不同的相应,nmap将这些响应特征提取并记录在一个数据库中,每回nmap扫描时都与这个文件对比。探针和响应特征的对应关系存放在nmap安装目录的namp-os-db文件中
- 注意:因为nmap只是将响应特征与数据文件对比,然后对目标主机进行猜测,所以结果可能有多种,猜测结果也不一定为真
- 命令格式:nmap -O [目标]
每回nmap扫描时,回去验证如下参数:
- ①操作系统的供应商名字,例如微软或者sun
- ②操作系统的名字,例如Windows、MaX OS X、Linux
- ③操作系统的版本,例如XP、2000、2003、2008
- ④当前设备的类型,例如通用计算机、打印服务器、媒体播放器、路由器、WAP或者电力装置等
六、 目标服务类型扫描演示案例
- 例如我们扫描的主机可能为Linux 3.x或者4.x版本
- 概念:之前使用nmap对主机进行扫描,已经显示了一些端口与端口对应的服务,但是这些信息只是从数据库文件中读取的,事实上端口所运行的真实服务并非你所看到的服务,因此就需要使用nmap的某些选项来进行扫描
- 命令格式:nmap -sV [目标]
扫描过程
- 首先进行端口扫描,默认情况下使用SYN扫描
- 进行服务识别,发送探针报文,得到返回确认值,确认服务
- 进行版本识别,发送探针报文,得到返回的报文信息,分析得出服务的版本
nmap-services数据库:
- 当你用nmap对目标进行扫描时,namp会告诉你哪些端口分别对应着什么服务和进行,但是该数据库记录的知识标准化的“端口与服务对应”概念,例如http是80、ftp是21。但是某些主机可能在这些端口上运行着别的服务,因此不使用-sV选项,nmap扫描到的也不一定是正确的结果
nmap-service-probes数据库:
- 使用了-sV选项后,nmap扫描目标主机之后,版本探针会询问这些端口,到底是什么服务在运行。nmap-service-probes数据库包含查询不同服务的探针报文和解析识别相应的匹配表达式
- 数据库完成:当nmap从某个服务收到相应,但不能在数据库中找到匹配时,它就打印一个特殊的fingerprint和一个URL给使用者提交。如果此时使用者确实知道什么服务运行在端口,那么就可以花费几分钟提交这份报告,然后记录在数据库文件中,从而让nmap完善
- 演示案例:扫描一个主机所运行的服务以及服务对应的版本号(VERSION)
- 概念:如果想记录一次扫描的结果,并且保存在文件中,可以使用以下命令。文件默认保存在当前目录下
- 命令格式:nmap -oX 文件名 [目标]
例如:将此次扫描结果保存为.xml文件