20201024 -
目录
主动扫描系列文章(1):nmap的基础使用
主动扫描系列文章(2):masscan/zmap扫描主机与端口
主动扫描系列文章(3):nmap与masscan的配合使用
0. 引言
关于nmap的使用,这种文章网上满天飞,本篇文章不打算讲多细致的东西,仅仅是记录一些基础的使用方法,用作后续翻阅的记录。
nmap能干什么就不用说了,在主动探测的领域算是一顶一的大拿,使用方法也不是很难,我这段时间也发现了一些能够图形化来使用nmap的程序,也有一些基于b/s架构的web操作方式,同时,为了能够更快速的进行扫描,通过masscan+nmap的方式来实现快速扫描,关于这部分内容会在另一篇文章中进行具体介绍。本篇文章主要参考了一篇基础的介绍文章[1]。
1. nmap的功能
nmap的主要功能是通过主动发包的形式来探测目的IP的一些信息,这些信息包括以下这些内容:
- 主机发现(主机是否存活)
- 端口发现(检测主机开放的端口)
- 服务发现(检测主机中开放的端口都运行着哪些服务以及版本)
- 操作系统检测(检测目的IP所运行的操作系统)
- 漏洞检测(利用NSE脚本来进行探测)
上述功能中,漏洞检测我没有使用过,但是github上能找到一些相关的脚本。其他的功能都在自己的网络中进行过测试,但对于操作系统检测和服务发现的功能,并不一定能够得到非常准确的结果,这部分可能就需要一些其他的手段来实现了。
2. nmap使用方法
2.1 简单用法
最简单的方法,莫过于直接加一个目标IP进行扫描的过程。
nmap 10.0.0.1
nmap 10.0.0.1/16
经过测试(环境:nmap 7.80 centos7),默认进行syn扫描,同时扫描的端口是1-1024加上一些namp-services列出的端口[2]。在nmap的帮助文档中,提到需要拥有一定的权限才能使用原始套接字来进行sS扫描过程。
注意:使用yum安装nmap时,在阿里云的yum源上,只有6.4版本的nmap,版本比较老了,在后面介绍的服务发现的功能中很多主机都不能准确发现,因为自己下载了rpm包进行了7.8的安装。
2.2 目标IP的指定方式
在前面的方式中,已经写出两种方式,一种是直接写IP,如果是多个目标,可以空格隔开;子网就是直接写CIDR的方式。还有一种方式是通过文件的形式,文件的内容是一行IP或者是一个子网。
nmap -iL ip.txt
有时候可能排除一些IP,比如在某个子网中不要扫描网关,再比如某个IP已经扫描过了,不需要再次扫描。
nmap 10.0.0.1/24 --exclude 10.0.0.1
nmap 10.0.0.1/24 --excludefile exclude_file
以上内容都可以通过nmap --help
来查看。
另外,可以只打印出来要扫描的目的IP。
nmap -sL 10.0.0.1/24
2.3 扫描技术
在nmap的帮助文档中,列举了非常多的扫描技术,这里不打算全部介绍,仅仅介绍一些用到的。
(1)syn扫描
这种扫描就是通过仅仅发送一个syn包,mirai僵尸网络和masscan在扫描的时候都是使用的这种方式,通过raw_socket编程来实现。
nmap -sS 10.0.0.1
(2)全连接扫描
nmap -sT 10.0.0.1
(3)UDP扫描
nmap -sU 10.0.0.1
(4)FIN扫描
这种是应用于某些部署在IDS/IPS之后的机器。
nmap -sF 10.0.0.1
(5)ping扫描
仅用于主机存货扫描
nmap -sP 10.0.0.1
(6)版本检测
在扫描端口开放的同时,查看其上所运行的软件版本,当然在执行版本探测之前,还是要使用syn扫描来发现端口。
nmap -sV 10.0.0.1
(7)idle扫描
nmap -sI 10.0.0.1
这种扫描方式相对来说比较高级,这里不展开介绍,只需要理解,这种方式不需要跟目标IP进行流量交互。
2.4 OS探测
使用方法
nmap -O 10.0.0.1
该部分探测的方式,是通过一系列的手段,查看系统协议栈中的指纹来实现识别,具体的指纹可以在/usr/share/nmap
(centos7下安装)中找到,关于这部分的具体识别方法可以看文章[3]。在实验室中进行了一些扫描,对于一些打印机能够识别到这个是打印机,但是并不能识别出来具体型号,会误报。对于摄像头就更不用提了。关于这边指纹后续会更深入来了解。
在文章[1]中指出,指定参数-PN
可以不发送ping请求,以此来躲避防火墙。在进行操作系统检测的时候,有两个参数可以添加。
- 当无法得到准确的检测结果的时候,一般是无法满足端口要求,使用参数
--osscan-limit
- 猜测最相近的操作系统,
--osscan-guess
不过这部分的检测结果,当前场景下,我是不太相信的。识别效果是能够识别出来这个是什么东西,但是具体型号不对,比如说这里有一个华为的防火墙,我能识别出来这是防火墙,但是具体型号不对,当然这也不能算是错误吧,毕竟可能虽然不同的型号,可能他们内置的软件是一样的。
2.5 小节
在本篇文章中,简单介绍了nmap的基础使用方法,但是也挖了很多坑,主要包括以下内容:
- 漏洞检测的脚本如何编写?或者说我自己怎么写nse的脚本呢
- 关于nmap使用的操作系统指纹具体是什么原理
- 怎么和masscan结合起来
还有一个问题比较关键,其实也是之前的时候一直比较关注的,那就是是否支持多线程工作方式,在使用一些开源的框架的时候,比如ivre,会发现扫描的过程非常满,我看过他的工作方式,他是使用的多进程的方式,就是开了多个进程同时工作,但nmap自己也有相应的快速方式,这个是需要后续进阶使用的时候需要了解的。
参考
[1]Nmap from Beginner to Advanced [Updated 2019]
[2]nmap扫描开放端口
[3]Nmap是怎么识别主机指纹的