2.3 服务器信息收集

在渗透攻击过程中,对目标服务器的信息收集是非常重要的一步,服务器上面可以运行大量的系统服务和第三方应用服务,如果操作系统或者第三方软件没有及时升级打补丁,攻击者就有可能直接通过服务器上运行的服务进行攻击。因为服务器的错误配置或者不安全的访问控制,导致通过服务器漏洞进行攻击的案例屡见不鲜。如果数据库可以直接对外连接并且存在数据库弱口令,攻击者就可以直接通过数据库的弱口令漏洞对数据库进行连接,获取敏感数据,甚至通过数据库控制整个服务器,对内网发动攻击。

服务器需要收集的信息包含三个方面:端口信息收集、程序服务版本识别和操作系统信息识别。

端口信息收集和程序服务版本识别主要是为了收集服务器开放了哪些端口,这些端口都运行了什么类型的服务,这些服务的具体版本信息。因为不同服务的漏洞点不一样,相同服务不同版本的漏洞点也可能有很大差异,所以要识别每个服务的具体版本信息,才能根据这些信息进行相关版本漏洞的利用。比如同样是IIS服务,IIS 6.0的解析漏洞与IIS 7.0的解析漏洞在漏洞形成的原因和漏洞的利用方式方面就完全不同。

操作系统信息识别是为了判断目标运行了什么类型的操作系统,根据不同类型的操作系统、不同版本的操作系统漏洞进行漏洞利用,比如Windows操作系统存在“永恒之蓝漏洞”的可能,Linux操作系统存在“脏牛漏洞”的可能。

服务器信息收集最常用的工具就是Nmap工具,下面将详细地介绍如何使用Nmap对服务器信息进行收集。

2.3.1 端口扫描

使用命令“nmap -p 1-65535 IP”,对目标IP进行全端口扫描,确保每个可能开放的端口服务都能被识别到。常见端口及对应服务如图2-22所示。

全端口扫描的代码如下。

img
img

图2‑22 常见端口及对应服务

通过“nmap -sV -p 1-65535 192.168.88.21”对“192.168.88.21”地址的1~65535端口进行扫描,发现开放了80、135、139、445、3306、3389等多个不同的端口。

2.3.2 服务版本识别

从上面的扫描结果信息来看目标服务可能开放了3306数据库服务、3389远程桌面服务,但是“STATE SERVICE”并不一定是准确的,很多管理员可能修改了服务的默认端口,可能将远程桌面的端口改成了3306,将数据库的端口改成了3389,那么通过“STATE SERVICE”的信息来判断就非常不准确了。此时准确的服务版本识别就很重要了,Nmap扫描器使用指纹识别技术,Nmap通过TCP/IP栈不同服务的特定的数据包格式作为指纹信息来区分不同的协议,这样就可以做到准确的服务版本识别。

Nmap进行指纹识别的参数是“-sV”,使用命令“nmap -sV -p 1-65535 IP”对目标IP进行全端口扫描,并进行服务版本识别,代码如下。

img

通过“nmap -sV -p 1-65535 192.168.88.21”对“192.168.88.21”地址的1~65535端口进行扫描并进行服务版本识别,发现80端口运行的是2.4.23版本的Apache服务,800端口运行的是IIS 6.0服务,1433端口运行的是Microsoft SQL Server 2005服务,3306端口运行的是MySQL服务,3389端口运行的是远程桌面服务。

通过服务器信息收集发现除了Web服务外,还开启了数据库和远程桌面等相关的服务,攻击者就可以尝试对数据库和远程桌面存在的漏洞进行攻击,拿到服务器的权限。

2.3.3 操作系统信息识别

操作系统信息识别也使用Nmap工具,Nmap最著名的功能之一是用TCP/IP协议栈指纹进行远程操作系统探测。Nmap发送一系列TCP和UDP报文到远程主机,检查响应中的每一个数据包,然后把结果和数据库“nmap-os-fingerprints”中超过1500个已知的操作系统的指纹信息进行比较,如果有匹配,就打印出操作系统的详细信息,这样就可以识别不同类型的操作系统及其版本信息。

Nmap使用“-O”参数来启动操作系统检测,也可以使用“-A”来同时启用操作系统检测和版本检测,代码如下。

img

通过“nmap -O 192.168.88.21”对“192.168.88.21”的操作系统进行扫描,发现了操作系统相关的详细信息“OS CPE: cpe: /o:Linux:Linux_kernel:3 cpe:/o:Linux:Linux_kernel:4”。