banner
肥皂的小屋

肥皂的小屋

github
steam
bilibili
douban

信息收集-端口扫描及服务识别

端口扫描及服务识别#

这部分重点介绍nmap常见参数搭配用法,这也是我一直想弄懂的,借写文章的机会来梳理一下

这篇文章先介绍在已知主机的情况下对主机进行端口扫描,最后补充下前面文章遗留的问题:

nmap zmap massca对 C 段进行扫描

御剑高速 TCP 全端口扫描工具#

属于纯端口扫描工具

工具主要针对一段 IP 段内的详细全端口检测,下载地址就不提供了很好搜,用软件扫一下我网站的真实 ip 看下结果:

image

还是有一些端口扫描不到,不过速度还是非常快的

censys.io#

这是一个在线服务器扫描网站,能扫描网站的服务器信息,暂且把它归为端口扫描工具:

image

扫描速度还是很快的,而且识别出了我用的是腾讯云的 CDN,扫描出了服务器的真实 ip 以及三个端口 (虽然还是没扫全),值得推荐!

nmap#

如果是自己去网上找 nmap 用法,由于每个师傅的用法不同以及 nmap 版本更新中的参数作用变化等原因

你可能会在不同的师傅那看到某个参数不同的解释和用法 (踩坑的人对自己踩过的坑总是显得尤为在意)

所以,直接查看官方文档:https://nmap.org/book/man.html

虽然官方中文文档也有,但是它是根据Nmap4.5.0版本来介绍的,而截至写文章时Nmap的版本是7.70

故要看最新的用法还是用谷歌浏览器翻译英文文档看好了

nmap 安装及配置#

Linux比如Kali中是自带的,就不说了,我们这里下载的是Window下的便捷版:

image

下载完我们先配置一下环境变量,就不用每次进到nmap的目录打开命令行了:

image

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选项来尝试绕过防火墙扫描。

另外,我们也可以使用-sUUDP 扫描方式来探测常见的 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 个常见端口并打印详细信息:

image

1. 从结果中可以看到使用了ping消耗了 1.05s,DNS查询消耗了 3.86s 2. 我是直接扫描ip的你要查询DNS干啥,扫描的方式是完整的一次TCP三次握手

接下来尝试下禁ping,使用TCP同步扫描,也就是半开扫描,使用更快的扫描速度,尝试获取每个端口的服务及版本信息,扫描常见 1000 个端口,禁止使用DNS查询:

image

1. 可以看到扫描的方式变为了SYN Stealth Scan即 SYN 秘密扫描 2. 在增加了扫描的端口数量后,我们比上一次多扫出了一个888端口 3. 另外加了-sV选项之后扫描报告中多了一列VERSION,也就是服务的版本

耗费的时间只增加了一点点,但是扫描的结果比上一次更加全面了

我们在刚才的基础上使用-sAACK 扫描方式,使用更快速的方式,扫描所有端口,并且尽可能地探测操作系统:

image

可以看到在相同情况下-sA选项比-sS更耗费时间

所以一般只有在对方存在防火墙想要绕过时才建议使用-sA选项,平时使用-sS足够

sA/sW/sM这三种探测方式消耗的时间排序:sM > sW > sA

另外三种扫描方式sN/sF/sX暂时没用到,后面用到再做介绍

最后给出能目前我知道的能扫描出所有端口及详细信息,最节省时间的nmap命令:

效果如下 (为了节省时间我只扫描前 13000 个端口):

image

image

果然我的12315端口不在常用端口里面,直到我指定范围才扫描出来

操作系统猜测最有可能为Linux4.4Linux4.0,实际上是3.10

image

但是这条命令还不是完美的,因为我指定了范围,我希望能以最快的速度扫描所有端口

但是即使是-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端口:

image

基本 1s 就能扫完,但是这与本文扫描指定主机的所有端口目标不太符合,这里就不再继续介绍

Masscan#

Masscan 号称是最快的互联网端口扫描器,最快可以在六分钟内扫遍互联网。

masscan虽然能在Windows下使用,但是要配置MinGW等编译环境,所以在此做演示我们也使用Ubuntu环境

安装方式:

如果需要在任何位置使用masscan命令的话,执行:

masscan常用选项:

先介绍下本文的原本目标,扫描指定 ip 的所有端口:

使用这条命令的话速度比nmap-sS还要慢一大截,这是因为默认情况下,

Masscan 扫描速度为每秒 100 个数据包,这是相当慢的。

你也可以使用--rate选项并指定一个值,我们比较下使用默认 100 发包速度和加快发包速率的结果:

image

image

由此可见发包个数与扫描出来的端口数量成反比

其他的参数,保存,加载配置什么的,都没什么的好说的,核心就是直接指定端口扫就行了。

端口扫描及服务识别总结#

如果只是简单的扫描以下常见的端口,用御剑高速 TCP 全端口扫描工具或者censys.io已经完全足够

当然,有条件的话还是非常建议直接使用nmap,对上面的参数解释和用法最后归结为以下几条:

另外nmap还有很多用法比如主机探测部分我没有一一比较,后面我用到的时候会回来更新这篇文章。

当然,nmap-sS扫描常用端口及猜测端口对应的服务信息配合上masscan不改变速率的全端口扫描

基本上就能满足这篇文章的初衷 - 扫描指定服务器的所有端口及信息了。

本文完。

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.