端口扫描及服务识别#
这部分重点介绍nmap
常见参数搭配用法,这也是我一直想弄懂的,借写文章的机会来梳理一下
这篇文章先介绍在已知主机的情况下对主机进行端口扫描,最后补充下前面文章遗留的问题:
用nmap zmap massca
对 C 段进行扫描
御剑高速 TCP 全端口扫描工具#
属于纯端口扫描工具
工具主要针对一段 IP 段内的详细全端口检测,下载地址就不提供了很好搜,用软件扫一下我网站的真实 ip 看下结果:
还是有一些端口扫描不到,不过速度还是非常快的
censys.io#
这是一个在线服务器扫描网站,能扫描网站的服务器信息,暂且把它归为端口扫描工具:
扫描速度还是很快的,而且识别出了我用的是腾讯云的 CDN,扫描出了服务器的真实 ip 以及三个端口 (虽然还是没扫全),值得推荐!
nmap#
如果是自己去网上找 nmap 用法,由于每个师傅的用法不同以及 nmap 版本更新中的参数作用变化等原因
你可能会在不同的师傅那看到某个参数不同的解释和用法 (踩坑的人对自己踩过的坑总是显得尤为在意)
所以,直接查看官方文档:https://nmap.org/book/man.html
虽然官方中文文档也有,但是它是根据Nmap4.5.0
版本来介绍的,而截至写文章时Nmap
的版本是7.70
故要看最新的用法还是用谷歌浏览器翻译英文文档看好了
nmap 安装及配置#
Linux
比如Kali
中是自带的,就不说了,我们这里下载的是Window
下的便捷版:
下载完我们先配置一下环境变量,就不用每次进到nmap
的目录打开命令行了:
nmap 参数解释#
nmap
有六种常用的端口状态:
以下为官方文档翻译过来的参数,我将一部分一部分做讲解
参考文章:
选择目标:
这个就很简单了:
- 扫描网站:
nmap soapffz.com
- 扫描内网网段:
nmap 192.168.2.0/24
或者nmap 192.168.2.3-5
选择目标这里的参数基本都用不到
主机发现:
-sn
和-Pn
是对立的,前者使用ping
扫描,禁用端口扫描,后者禁用ping
扫描,为什么会有这两个选项呢?
因为如果主机屏蔽了 ping 请求,Nmap 可能会认为该主机没有开机。这将使得 Nmap 无法进行进一 步检测,比如端口扫描、服务版本识别和操作系统识别等探测工作。为了克服这一问题,就需要禁用 Nmap 的主机检测功能。在指定这个选项之后,Nmap 会认为目标主机已经开机并会进行全套的检测工作,所以,一般来说在这两个选项之前我们更倾向于使用后者
一般建议使用-Pn
选项
另外域名解析会浪费一部分时间,虽然默认是有时会解析域名,但是我建议设置为-n
从不进行DNS
解析以节约解析时间。
扫描方法:
从参数解释中我们可以看出-sT
选项是默认的也是最不推荐的,一般我们使用半开扫描-sS
。
当发现可能有防火墙时,我们可以使用-sA
或-sW
选项来尝试绕过防火墙扫描。
另外,我们也可以使用-sU
UDP 扫描方式来探测常见的 UDP 端口,可能会有意外收获。
扫描端口及扫描端口的方式:
个人建议,在快速概览主机端口的时候使用选项--top-ports 1000
当你想要完整的扫描报告的时候,还是需要所有端口都扫一遍-p1-65535
服务 / 版本检测:
-sV
建议使用,但是后面的-A
选项的功能中包含这个功能
脚本扫描:
-sC
建议使用,但是后面的-A
选项的功能中包含这个功能
操作系统检测:
这里的--osscan-guess
可能会在你想知道对方的主机系统时派上用场。
时间和性能:
时间和性能这里,一般用不到指定并行数量和发包速度这么详细。
时序模板默认为-T3
,也就是normal
不做任何优化
防火墙 / IDS 逃脱和防御:
当你已经探测到可能有防火墙时,可以使用-F
选项来减小探测包的大小,从而绕过防火墙。
-D
选项构造虚假 ip 也是经常被用到的,RND
生成随机假的IP
地址这个选项不建议使用,因为如果生成的 ip 对应的诱饵主机是关闭的或者不存在的,那么就不可能发送扫描的命令给目标主机,容易造成目标主机崩溃
建议直接使用ping
某个网站的 ip (禁止ping
的网站除外),使用网站的ip
作为诱饵主机
使用Me
代表自己的真实地址,比如同时使用soapffz.com
网站ip
和我电脑真实ip
一起快速扫描nmap.org
:
输出报告:
建议使用-open -vv
选项来输出详细信息并且只包含打开或可能打开的端口
报告输出建议使用-oX
生成.XML
的报告,或者直接-oA
选项一次输出.nmap .xml .gnmap
三种报告
杂项:
当你使用-A
选项时,相当于同时使用了以下四个命令:
至于NSE脚本
的漏洞探测脚本部分本篇不做介绍,因为本篇是针对端口和服务的扫描,漏洞的扫描将在下篇漏洞扫描器中讲到。
nmap 常用扫描#
** 在 nmap 运行的时候,如果我们可以像其他编程一样打 “断点”,直接按键盘的 d 键就行了,如果想知道运行的进度可以按下 X 键 **
我们用上面所学到的参数来扫描以下我的网站 (假设已绕过 CDN 获得了真实 ip,因为扫描 CDN 节点没有意义)
最终期望的结果是:
通过一条命令获得所有开放的端口,猜测端口上开启的服务,猜测服务器版本信息并尽可能地节省时间
是的,我打我自己.jpg
先尝试下默认的-sT
扫描方式,快速扫描 100 个常见端口并打印详细信息:
1. 从结果中可以看到使用了ping
消耗了 1.05s,DNS
查询消耗了 3.86s 2. 我是直接扫描ip
的你要查询DNS
干啥,扫描的方式是完整的一次TCP
三次握手
接下来尝试下禁ping
,使用TCP
同步扫描,也就是半开扫描
,使用更快的扫描速度,尝试获取每个端口的服务及版本信息,扫描常见 1000 个端口,禁止使用DNS
查询:
1. 可以看到扫描的方式变为了SYN Stealth Scan
即 SYN 秘密扫描 2. 在增加了扫描的端口数量后,我们比上一次多扫出了一个888
端口 3. 另外加了-sV
选项之后扫描报告中多了一列VERSION
,也就是服务的版本
耗费的时间只增加了一点点,但是扫描的结果比上一次更加全面了
我们在刚才的基础上使用-sA
ACK 扫描方式,使用更快速的方式,扫描所有端口,并且尽可能地探测操作系统:
可以看到在相同情况下-sA
选项比-sS
更耗费时间
所以一般只有在对方存在防火墙想要绕过时才建议使用-sA
选项,平时使用-sS
足够
sA/sW/sM
这三种探测方式消耗的时间排序:sM
> sW
> sA
另外三种扫描方式sN/sF/sX
暂时没用到,后面用到再做介绍
最后给出能目前我知道的能扫描出所有端口及详细信息,最节省时间的nmap
命令:
效果如下 (为了节省时间我只扫描前 13000 个端口):
果然我的12315
端口不在常用端口里面,直到我指定范围才扫描出来
操作系统猜测最有可能为Linux4.4
或Linux4.0
,实际上是3.10
但是这条命令还不是完美的,因为我指定了范围,我希望能以最快的速度扫描所有端口
但是即使是-sS
也不太给力,从上面这两个例子我们可以看出nmap
对全端口扫描并不在行
可以和后面介绍的无状态端口扫描器Masscan
配合起来使用,实现 “精准制导”。
zmap#
ZMap 是一个开源网络扫描工具,可以帮助研究人员快速的进行全网检测。只需要一台机器和足够上行网络速度,就可以以达到千兆以太网的理论值速度并在 45 分钟内扫描全网络 IPv4 地址。
它是由我们前面介绍的censys.io
的站长开发的工具。
GitHub 地址:
ZMap is a fast single packet network scanner designed for Internet-wide network surveys.
zmap
不支持 Windows,我们这里使用一台Ubuntu Desktop 18.04.1 LTS
来安装和使用zmap
执行:sudo apt install zmap -y
即可完成安装
常用参数如下:
虽然zmap
的-p
选项是指定端口,但是不能用1-65535
这样的参数
zmap
的用途更多的偏向于扫描指定范围内主机的某个指定端口是否开放,比如:
使用zmap
扫描临时获得baidu.com
的 C 段:123.125.114.1/24 的8080
端口:
基本 1s 就能扫完,但是这与本文扫描指定主机的所有端口目标不太符合,这里就不再继续介绍
Masscan#
Masscan 号称是最快的互联网端口扫描器,最快可以在六分钟内扫遍互联网。
masscan
虽然能在Windows
下使用,但是要配置MinGW
等编译环境,所以在此做演示我们也使用Ubuntu
环境
安装方式:
如果需要在任何位置使用masscan
命令的话,执行:
masscan
常用选项:
先介绍下本文的原本目标,扫描指定 ip 的所有端口:
使用这条命令的话速度比nmap
的-sS
还要慢一大截,这是因为默认情况下,
Masscan 扫描速度为每秒 100 个数据包,这是相当慢的。
你也可以使用--rate
选项并指定一个值,我们比较下使用默认 100 发包速度和加快发包速率的结果:
由此可见发包个数与扫描出来的端口数量成反比
其他的参数,保存,加载配置什么的,都没什么的好说的,核心就是直接指定端口扫就行了。
端口扫描及服务识别总结#
如果只是简单的扫描以下常见的端口,用御剑高速 TCP 全端口扫描工具
或者censys.io
已经完全足够
当然,有条件的话还是非常建议直接使用nmap
,对上面的参数解释和用法最后归结为以下几条:
另外nmap
还有很多用法比如主机探测部分我没有一一比较,后面我用到的时候会回来更新这篇文章。
当然,nmap
的-sS
扫描常用端口及猜测端口对应的服务信息配合上masscan
不改变速率的全端口扫描
基本上就能满足这篇文章的初衷 - 扫描指定服务器的所有端口及信息了。
本文完。