信息收集是对目标系统的情报进行搜集的过程,是渗透测试团队一项非常重要的技能,信息收集地越全面,后续渗透测试阶段可使用的攻击手段也就越多。因此,情报搜集是否充分在很大程度上决定了渗透测试的成败,遗漏某些关键信息可能导致测试人员在后续工作中一无所获。
在渗透测试初期,大多数情况下,获取的信息可能仅仅是一个主域名。渗透测试初期以后的信息收集方式可分为两类,一类是被动信息收集,另一类是主动信息收集。
被动信息收集方式不会与目标网络产生直接的恶意交互。这种方式下,攻击者的源IP等信息不会被目标网络的日志记录。被动信息收集包含Google搜索、Whois信息查询、子域名查询等间接方式,也包含了正常注册登录目标网站、查看各个网页并下载公开文档进行信息搜集的直接方式。
主动信息收集方式会对目标网络进行查询及扫描等操作,目标网络可感知到这些恶意的交互,这种方式可能会引起目标网络系统的告警及封堵,暴露渗透测试者的身份信息。主动信息收集方式包含了活跃主机扫描、操作系统指纹识别、端口扫描、服务指纹识别等方式。
在得到目标主域名后,信息收集方式一般遵循从广泛到具体的过程。首先,对目标网络进行资产的横向探测,尽可能多地收集与主域名相关的信息。这样做的好处是,当就某个点进行渗透测试并且无法进行下去时,可较快地切换至其他的点继续进行。其次,就某个点进行纵向的深入信息挖掘,以期从详细的信息中找到可利用的漏洞点。
横向资产探测的步骤如下:
1)确定目标网络是否装配了CDN或负载均衡。若不存在CDN或负载均衡,则可以直接通过域名解析获取真实IP地址。
2)通过查询IP解析历史,确定目标网络的真实IP地址。
3)查询Google、Baidu等搜索引擎,收集目标网络的信息。
4)查询主域名的所有子域名。
5)查询GitHub、GitLab等代码托管平台,寻找站点相关开源代码。
6)进行C段扫描,查询目标网络相同网段上的其他站点。
纵向信息收集的步骤如下:
1)通过Whois信息、备案信息等确定目标域名注册人的姓名、邮箱、电话、地址等信息,这些信息在后续的口令爆破中比较有用。
2)通过扫描确定目标网络的站点操作系统、开发语言、数据库类型、网站的架构类型、网站的组件等网站架构信息,确定是否存在相关的可利用漏洞信息。
3)进行端口扫描,确定目标网络开启的服务;通过扫描收集并探测敏感目录或敏感文件,包括配置文件、备份文件等,为后续的Web Shell上传奠定基础。
4)进行Banner扫描,获取目标系统的软件开发商、软件名称、服务类型以及版本号。
常见的端口号、协议类型及其服务和可利用方式见表3-1。
表3-1 常见端口号、协议类型及其服务和可利用方式