如果我们想扫描全网端口开放情况该怎么办?这种…
如果我们想扫描全网端口开放情况该怎么办?这种场景主要的需求是快速,全网 IP 的数量有 2 的 32 次方个,如何在短时间内扫描全网端口开放情况,网络空间搜索引擎在做端口扫描的时候使用的是什么技术?
业界知名的快速端口扫描工具有两种,分别是 zmap 和 masscan,常规端口扫描方式,在验证端口是否开放的时候,发送完数据包之后,等待目标返回数据包,这其中有一个等待的时间,如果遇到网络环境比较差,延时就会变长,所以就有大佬设计了另外一种扫描方式,将发生数据包和接收数据包分成两个阶段,将等待时间消除,发包程序只管发包,收包程序获得反馈之后,将结果进行记录,这样就能尽可能的减少等待的时间,从而提升扫描的速度。
Zmap
Zmap 是美国密歇根大学研究者开发出一款工具。在第 22 届 USENIX 安全研讨会,以超过 nmap 1300 倍的扫描速度声名鹊起。相比大名鼎鼎的 nmap 全网扫描速度是他最大的亮点。在千兆网卡状态下,45 分钟内扫描全网络 IPv4 地址。
官方地址:
除了 Zmap 之外,还有不少别的程序,比如:
1、ZGrab 获取端口 banner 信息,支持 HTTP, HTTPS, SSH, Telnet, FTP, SMTP, POP3, IMAP, Modbus, BACNET, Siemens S7, 和Tridium Fox。
2、ZDNS 收集网络上存在域传送漏洞的 DNS 服务器上的 DNS 解析记录,支持 A, AAAA, ANY, AXFR, CAA, CNAME, DMARC, MX, NS, PTR, TXT, SOA, 和 SPF 记录。
这些扫描数据都可以在线下载,数据存储网站:
使用 Zmap 的前提条件是需要一个具有公网 IP 的服务器,并且带宽大小决定了扫描的速度,开源项目地址:
安装方式:
我的测试服务器是 Centos 8,所以需要编译安装:
yum install cmake gmp-devel gengetopt libpcap-devel flex byacc json-c-devel libunistring-devel
安装必要环境报错,缺少 gengetopt 、libpcap-devel 、 json-c-devel 、libunistring-devel,需要一一手动安装:
# install gengetopt
rpm -vi https://forensics.cert.org/centos/cert/8/x86_64/gengetopt-2.23-1.el8.x86_64.rpm
# install libpcap-devel
rpm -vi http://mirror.centos.org/centos/8/PowerTools/x86_64/os/Packages/libpcap-devel-1.9.1-4.el8.x86_64.rpm
# install json-c-devel
http://mirror.centos.org/centos/8/PowerTools/x86_64/os/Packages/json-c-devel-0.13.1-0.2.el8.x86_64.rpm
# install libunistring-devel
rpm -vi http://mirror.centos.org/centos/8/PowerTools/x86_64/os/Packages/libunistring-devel-0.9.9-3.el8.x86_64.rpm
然后下载代码,编译安装:
git clone https://github.com/zmap/zmap/
cd zmap
cmake .
make -j4
make install
安装完成之后,查看帮助信息:
zmap -h
使用场景一:扫描全网 80 端口
命令参数(1M带宽,随机扫描 1000 个 IP,数据结果到 result.csv):
zmap --bandwidth=1M --target-port=80 --max-targets=1000 --output-file=results.csv
or
zmap -B 1M -p 80 -n 1000 -o results.csv
使用场景二:扫码指定网段的 53 端口
命令参数:
zmap -p 53 8.8.8.0/24
使用场景三:敏感目标禁止扫描
有些比较敏感的 IP 段或者 IP,可以通过编辑 /etc/zmap/blacklist.conf
文件排除,比如上面的操作,排除 IP 8.8.8.8
:
结果中未发现黑名单中的 IP。
Masscan
这个工具的原理有 zmap 类似,5 分钟内可以扫描完全部互联网,一秒能发 1 亿数据包,项目地址:
该项目有多个发布版本,支持 Windows、linux 等多个平台,本次编译以 centos 8 为例,而 Windows 版查看附件:
git clone https://github.com/robertdavidgraham/masscan
cd masscan
make
make install
安装完成之后,查看软件帮助信息:
masscan -h
常规使用方法(-p
参数指定端口,直接跟要扫描的 IP 段):
masscan -p53 8.8.8.0/24
扫描端口时,可以使用参数 --banners
获取端口上的 banner 信息:
masscan -p80 47.94.225.0/24 --banners
全网扫描方式:
masscan 0.0.0.0/0 -p0-65535
如果需要排除某些网段,需要使用 --excludefile
指定文件,文件中保存需要排除的 IP 或者网段信息:
masscan 0.0.0.0/0 -p0-65535 --excludefile exclude.txt
如果需要保存获得的结果,使用 -oX
参数:
masscan 0.0.0.0/0 -p0-65535 -oX scan.x ml
如果想要提高或者降低扫描速率,需要用参数 --max-rate
指定:
masscan 0.0.0.0/0 -p0-65535 --max-rate 100000
如果对 nmap 熟悉的话,masscan 兼容了 nmap 的参数,可以使用 --nmap
参数查看帮助:
masscan -nmap
并非 nmap 的全部功能都支持,比如识别主机系统类型就不行,简单测试一下:
masscan -sS -Pn 47.94.225.0/24 -p 80
更多使用方式,请看官方文档。
总结
本文介绍了两款快速端口扫描的工具,无论对于攻击者还是防御者都是用广泛,用于监控资产情况变化,防止运维人员有意无意的开放一些端口到外部,也可以及时发现可以利用的临时开放的服务。
- 本文作者: myh0st@信安之路
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/139
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!