网站信息收集(四)

3 服务器主机

这个大块我们主要要了解如何收集服务器信息,包括:端口、系统识别、C段业务、指纹识别以及相关资产。因为端口和系统识别已经可以用非常成熟的工具来收集,所以我们就一起来说吧!

3.1 端口和系统识别

在端口与系统识别收集方面有很多比较成熟的工具比如,结果较精准的nmap、速度较快的masscan等,由于masscan前期环境搭建较麻烦,我们重点讲讲nmap:

Nmap

Nmap 是一个网络连接端口扫描软件,用来扫描网上电脑开放的网络连接端口。确定哪些服务运行在哪些连接端口,并且推断计算机运行哪个操作系统。它是网络管理员必用的软件之一,以及用以评估网络系统安全。

功能 :

1、 主机发现

2、 端口扫描

3、 版本侦测

4、 OS 侦测

Nmap 的参数和选项繁多,功能非常丰富。我们先来看一下 Nmap 的通用命令格式:(详细教程及下载方式参见:http://nmap.org/)

Nmap < 扫描选项 > < 扫描目标 >

主机发现的原理与 Ping 命令类似,发送探测包到目标主机,如果收到回复,那么说明目标主机是开启的。Nmap 支持十多种不同的主机探测方式,比如发送 ICMP ECHO/TIMESTAMP/NETMASK 报文、发送 TCPSYN/ACK 包、发送 SCTP INIT/COOKIE-ECHO 包,用户可以在不同的条件下灵活选用不同的方式来探测目标机。

主机发现的基本用法 :

-sL: List Scan 列表扫描,仅将指定的目标的 IP 列举出来,不进行主机发现。

-sn: Ping Scan 只进行主机发现,不进行端口扫描。

-Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。

-PS/PA/PU/PY[portlist]: 使用 TCP SYN/ACK 或 SCTP INIT/ECHO 方式进行发现。

-PE/PP/PM: 使用 ICMP echo,timestamp, and netmask 请求包发现主机。

-PO[protocollist]: 使用 IP 协议包探测对方主机是否开启。

-sP:Ping 指定范围内的 IP 地址

-n/-R: -n 表示不进行 DNS 解析;

-R 表示总是进行 DNS 解析。

–dns-servers <serv1[,serv2],…>: 指定 DNS 服务器。

–system-dns: 指定使用系统的 DNS 服务器

–traceroute: 追踪每个路由节点

扫描局域网 192.168.20.1/24 范围内哪些 IP 的主机是活动的。

命令如下:

nmap –sn 192.168.20.1/24

由图可知:13台主机处于存活状态。

open:端口是开放的。

closed:端口是关闭的。

filtered:端口被防火墙 IDS/IPS 屏蔽,无法确定其状态。

unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。

open|filtered:端口是开放的或被屏蔽。

closed|filtered :端口是关闭的或被屏蔽。

端口扫描方面非常强大,提供了很多的探测方式:

TCP SYN scanning

TCP connect scanning

TCP ACK scanning

TCP FIN/Xmas/NULL scanning

UDP scanning

其他方式

-sS/sT/sA/sW/sM: 指定使用

TCPSYN/Connect()/ACK/Window/Maimon scans 的方式来对目标主机进行扫描。

-sU: 指定使用 UDP 扫描方式确定目标主机的 UDP 端口状况。

-sN/sF/sX: 指定使用 TCP Null,FIN, and Xmas scans 秘密扫描方式来协助探测对方的 TCP 端口状态。

–scanflags : 定制 TCP 包的 flags。

-sI zombiehost[:probeport]: 指定使用 idle scan 方式来扫描目标主机(前提需要找到合适的 zombie host )

-sY/sZ: 使用 SCTPINIT/COOKIE-ECHO 来扫描 SCTP 协议端口的开放的情况。

-sO: 使用 IP protocol 扫描确定目标机支持的协议类型。

-b : 使用 FTPbounce scan 扫描方式

-p 指定端口扫描

在此,我们以主机 192.168.20.21 为例。命令如下:

nmap -sS -p- -T4 192.168.20.21

参数 -sS 表示使用 TCP SYN 方式扫描 TCP 端口;-p- 表示扫描所有端口;-T4 表示时间级别配置 4 级;

简要的介绍版本的侦测原理。版本侦测主要分为以下几个步骤:

1、首先检查 open 与 open|filtered 状态的端口是否在排除端口列表内。如果在排除列表,将该端口剔除。

2、如果是 TCP 端口,尝试建立 TCP 连接。尝试等待片刻(通常 6 秒或更多,具体时间可以查询文件 nmap-services-probes 中 Probe TCP NULL q|| 对应的 totalwaitms )。通常在等待时间内,会接收到目标机发送的 “WelcomeBanner” 信息。nmap 将接收到的 Banner 与 nmap-services-probes 中 NULL probe 中的签名进行对比。查找对应应用程序的名字与版本信息。

3、如果通过 “Welcome Banner” 无法确定应用程序版本,那么 nmap 再尝试发送其他的探测包(即从 nmap-services-probes 中挑选合适的 probe ),将 probe 得到回复包与数据库中的签名进行对比。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。

4、如果是 UDP 端口,那么直接使用 nmap-services-probes 中探测包进行探测匹配。根据结果对比分析出 UDP 应用服务类型。

5、如果探测到应用程序是 SSL,那么调用 openSSL 进一步的侦查运行在 SSL 之上的具体的应用类型。

6、如果探测到应用程序是 SunRPC,那么调用 brute-force RPC grinder 进一步探测具体服务。

具体参数解释

-sV: 指定让 Nmap 进行版本侦测

–version-intensity : 指定版本侦测强度 ( 0-9 ),默认为 7 。数值越高,探测出的服务越准确,但是运行时间会比较长。

–version-light: 指定使用轻量侦测方式 ( intensity 2 )

–version-all: 尝试使用所有的 probes 进行侦测 ( intensity 9 )

–version-trace: 显示出详细的版本侦测过程信息。

对主机192.168.20.21进行版本侦测。

命令如下:

nmap -sV -p- -T4 192.168.20.21

Nmap 使用 TCP/IP 协议栈指纹来识别不同的操作系统和设备。在 RFC 规范中,有些地方对 TCP/IP 的实现并没有强制规定,由此不同的 TCP/IP 方案中可能都有自己的特定方式。Nmap 主要是根据这些细节上的差异来判断操作系统的类型的。

具体实现方式如下:

Nmap 内部包含了 2600 多已知系统的指纹特征(在文件 nmap-os-db 文件中)。将此指纹数据库作为进行指纹对比的样本库。分别挑选一个 open 和 closed 的端口,向其发送经过精心设计的 TCP/UDP/ICMP 数据包,根据返回的数据包生成一份系统指纹。将探测生成的指纹与 nmap-os-db 中指纹进行对比,查找匹配的系统。如果无法匹配,以概率形式列举出可能的系统。

-O: 指定 Nmap 进行 OS 侦测。

–osscan-limit: 限制 Nmap 只对确定的主机的进行 OS 探测(至少需确知该主机分别有一个 open 和 closed 的端口)。

–osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统。

命令如下:

nmap –O 192.168.20.21

-vv 详细显示扫描状态

nmap -p 139,445 -vv 192.168.20.20

由于我测到一半,同事的电脑关机了,只能再随机找别的电脑了。

nmap常被黑客们利用来搜集目标电脑的网络设定,从而计划攻击的方法。其作用与功能远不止这些,有兴趣的同学可以自己再扩展学习下。下次我们会将服务器信息的其他内容,敬请期待!