0%

渗透测试之信息收集

这篇文章主要学习在渗透测试中如何进行信息收集。文本的核心目的是学习 渗透测试中信息收集 的相关技术,任何人员如果使用这些技术从事违法活动,与本人无关。一定牢记,任何未授权的渗透测试都是非法行为

前言

  • 渗透测试:出于保护系统目的,更全面地找出测试对象的安全隐患(褒义词)

  • 入侵:不择手段(甚至是具有破坏性的)拿到系统权限(贬义词)

  • 红队:攻击队

  • 蓝队:防守队

渗透测试一般都是黑盒测试。对应的是白盒测试,也称为代码审计。灰盒测试则是同时进行黑盒测试和白盒测试。

渗透测试流程

总体来说,工作中的渗透测试可以分为以下 8 个步骤:

  • 明确目标
  • 信息收集
  • 漏洞探测
  • 漏洞验证
  • 提取所需
  • 信息分析
  • 信息整理
  • 形成报告

其中的核心流程:

  • 明确目标(明确的资产信息表)
  • 收集足够的信息
  • 工具扫描或者手工发现漏洞
    • 工具也称为漏洞扫描器(简称漏扫),即通过自动化工具进行漏洞扫描
  • 成功利用高危漏洞
    • 获取 webshell
      • 提权:控制服务器
    • 直接获取系统权限
  • 渗透内网
  • 结束

测试地点可以分为:

  • 从外网测试:直接通过互联网连接进行黑客行为模拟
  • 从内网测试:连接公司内网进行测试

渗透测试要求:一般客户对渗透测试过程是有要求的,比如时间、地点、测试时的参数设置、是否能够使用自动化工具测试等。这些要求都会在 授权书 中体现。没有授权书的渗透测试是非法的

域名信息收集

域名注册信息

可以通过 站长之家->whois 查询域名注册信息。

1
https://whois.chinaz.com/

除了站长之家的 whois 查询之外,还有很多其他类似的网站,例如阿里云的 whois 查询

SEO 信息收集

可以通过 站长之间->SEO 综合查询,也能查询到域名相关的信息。

1
https://seo.chinaz.com/

子域名收集

baidu.com 是二级域名,而 www.baidu.com 就是三级域名(也是百度的主站),news.baidu.comtieba.baidu.com 等域名也是三级域名。

主站(通常以 www 开头)的防护一般做的很好,旁站和 C 段入侵是主要的手段,找薄弱的站点渗透。

收集某个二级域名的子域名,可以通过字典爆破的方式,逐个 ping 每个拼接构造的子域名,如果能够 ping 通,则说明该子域名真实存在。很多子域名扫描工具就是通过这种方式实现的,例如这个工具 在线子域名扫描 - Youngxj

同样可以通过 站长之间->子域名查询 来完成该工作:

1
https://tool.chinaz.com/subdomain

子域名收集工具

还有一些开源的子域名收集工具,例如 jsfinder

  • jsfinder 的工作原理是通过爬取网站的 js 文件,然后分析其中涉及请求的域名,从而发现子域名
  • 一个 html 文件可能会包含很多 <script> 标签,这些 <script> 标签就有对应的 js 文件。通过分析这些 js 文件,分析其中通信所涉及的域名,可以发现很多子域名

还有一个 layer 子域名挖掘机。除此之外还有 OneForAll(比较强大)、subDomainBrute、Sublist3r 等工具。

备案号和 SSL 证书查询子域名

域名使用都需要在工信部进行备案,称为 ICP 备案。通过 ICP 备案号可以查询到域名相关信息。例如可以通过站点之家进行 ICP 备案查询:

1
https://icp.chinaz.com/

也可以在工信部官网进行查询:

1
https://beian.miit.gov.cn/#/Integrated/index

SSL 证书的申请需要公司信息和域名信息,所以通过 SSL 证书的查询也可以得到一些域名信息:

1
https://myssl.com/

收集真实 IP 地址

一个站点可能存在 CDN 加速,因此我们访问某个域名可能并不是直接访问到真实的服务器,而是访问了 CDN 节点。有些漏洞攻击在 CDN 节点执行意义不大,因为很可能拿不到有意义的数据。

为了直接检测真实站点服务器的漏洞,我们还是需要找到该站点真实的 IP 地址。

  • 可以通过超级 ping 来判断一个站点是否存在 CDN:超级 ping 会在多地 ping 一个域名,通过 ping 结果的响应 IP 的个数,来判断该域名是否存在 CDN 加速。如果存在较多个数的 IP 地址,一般说明开启了 CDN 加速。
1
https://ping.chinaz.com/
  • 有的时候,ping 一个域名,但是响应的是另一个域名,也有可能是 CDN 节点进行了响应
1
2
3
4
$ ping www.bilibili.com
PING a.w.bilicdn1.com (221.204.56.95): 56 data bytes
64 bytes from 221.204.56.95: icmp_seq=0 ttl=54 time=13.808 ms
64 bytes from 221.204.56.95: icmp_seq=1 ttl=54 time=13.754 ms
  • nslookup/dig 也可以用来查询域名解析是否是正常的,通过它可以查询一个域名真实的 IP 地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
nslookup www.bilibili.com
Server: 192.168.31.1
Address: 192.168.31.1#53

Non-authoritative answer:
www.bilibili.com canonical name = a.w.bilicdn1.com.
Name: a.w.bilicdn1.com
Address: 218.60.18.13
Name: a.w.bilicdn1.com
Address: 218.60.18.15
Name: a.w.bilicdn1.com
Address: 221.204.56.91
Name: a.w.bilicdn1.com
Address: 218.60.18.18
Name: a.w.bilicdn1.com
Address: 218.60.18.17
Name: a.w.bilicdn1.com
Address: 221.204.56.86
Name: a.w.bilicdn1.com
Address: 218.60.18.16
Name: a.w.bilicdn1.com
Address: 221.204.56.95
Name: a.w.bilicdn1.com
Address: 221.204.56.92
Name: a.w.bilicdn1.com
Address: 218.60.18.14
Name: a.w.bilicdn1.com
Address: 221.204.56.94
Name: a.w.bilicdn1.com
Address: 221.204.56.93

cdn 绕过方法

  1. 使用 cdn 绕过工具(效果不一定好)
1
2
3
4
fuckcdn
https://github.com/Tai7sy/fuckcdn
w8fuckcdn
https://github.com/boy-hack/w8fuckcdn
  1. 历史 dns 解析:通过这种历史记录查询,有可能能够找到该站点没有使用 CDN 之前的真实 IP。有很多在线工具可以完成这项工作:
1
2
https://www.dnsdb.io/
https://viewdns.info/
  1. 找子域名:使用 CDN 是有成本的,因此可能某些子域名直接指向源站,这个源站 ip 和那些使用 cdn 的域名,可能会在同一个网段(公司买公网 IP 可能是买一段 IP)。

旁站和 C 段信息收集

  • 旁站:一般是指同一个 IP 下不同的站点,例如在一台 Nginx 服务器上配置多个站点(virtual host)
  • C 段:公司有可能买的是一个网段,因此我们在得到某个 IP 地址时,可以对该 IP 地址所在的网段(例如使用 24 掩码,即 C 类网段)的所有 IP 地址进行扫描

扫描旁站和 C 段都可以使用一些工具,例如 DotNetScan

常用端口说明

通常一些服务会运行在知名的端口上,我们需要记住这些常用端口:

  • ftp:21,ftp 服务主要用于文件传输
  • ssh:22,ssh 服务主要用于远程登录
  • telnet:23,telnet 同样用于远程登录,但是其是不安全的
  • smtp:25,邮件服务
  • pop3:110,邮件服务
  • dns:53(udp),域名解析服务
  • https:443,加密的 http 服务
  • http:80,非加密的 http 服务
  • mysql:3306,数据库服务
  • postgresql:5432,数据库服务
  • redis:6379,数据库服务
  • vnc:5900,远程控制工具
  • rdp:3389,Windows 远程桌面服务

nmap 扫描

nmap(网络映射器)是由 Gordon Lyon 开发的一种安全扫描器,用于发现计算机网络上的主机和服务,从而创建 网络的映射。nmap 主要有以下功能:

  • 主机发现:识别网路中的主机
  • 端口扫描:枚举目标主机上开发的端口
  • 版本检测:询问远程设备上的网络服务以确定应用程序的版本号
  • os 检测:检测网络设备的操作系统和硬件特性
  • 支持 Lua 脚本:可以编写自定义的 nmap 脚本来扩展其功能
  • 漏洞检测

除了 nmap 之外,还有类似的工具,例如 masscan

nmap 的主机发现原理类似于 ping,但是手段不限于 ping。发送探测报文到目标主机,如果收到回复,那么说明目标主机是开启的。nmap 支持多种主机探测方式,因为单纯依靠 ping 可能是不准确的,例如目标主机可以通过 iptables 规则来丢弃 icmp 报文,这样 ping 探测的结果就是不准确的。

使用 nmap 的 -sn 来实现主机扫描,但不进行端口扫描。它不仅使用 ICMP echo 请求,还会发送其他类型的探测包(例如 TCP 的 SYN 包等)来判断主机是否响应。

1
2
3
4
5
6
7
8
# nmap  -sn 10.9.33.133/30
Starting Nmap 7.80 ( https://nmap.org ) at 2025-03-08 18:49 CST
Nmap scan report for 10.9.33.132
Host is up (0.0030s latency).
MAC Address: 00:16:3E:08:73:DD (Xensource)
Nmap scan report for OPS-3430 (10.9.33.133)
Host is up.
Nmap done: 4 IP addresses (2 hosts up) scanned in 4.28 seconds

端口扫描也是 nmap 的核心功能之一,默认它会扫描 1000 个最有可能开发的 TCP 端口。例如使用 nmap 的 -sS 选项来进行 TCP 半开放扫描,也称为 SYN 扫描。它发送一个 SYN 包到目标端口来探测该端口是否开放。如果目标端口是开放的,目标主机会返回一个 SYN/ACK 包作为响应,之后 nmap 会发送一个 RST 包来终止这个未完成的连接,从而避免在目标主机上留下任何连接记录。这种扫描技术既快速又相对隐蔽,因为它不会完成完整的 TCP 三次握手过程

1
2
3
4
5
6
7
8
9
10
11
12
# nmap -sS 10.9.33.133
Starting Nmap 7.80 ( https://nmap.org ) at 2025-03-08 20:08 CST
Nmap scan report for OPS-3430 (10.9.33.133)
Host is up (0.0000090s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
22/tcp open ssh
81/tcp open hosts2-ns
6001/tcp open X11:1
9080/tcp open glrpc

Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds

namp 也支持其他方式的端口扫描,例如 全连接扫描-sT),UDP 扫描-sU)等。

也可以通过 telnet 来判断某个主机的端口是否开放了,如果 telnet 能够连接上该端口,就说明该主机的该端口是打开的。

1
2
3
4
5
# telnet 127.0.0.1 22
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# telnet 127.0.0.1 81
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
GET / HTTP/1.1

HTTP/1.1 400 Bad Request
Server: nginx/1.26.0
Date: Sat, 08 Mar 2025 10:33:14 GMT
Content-Type: text/html
Content-Length: 157
Connection: close

<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.26.0</center>
</body>
</html>
Connection closed by foreign host.

扫描到端口之后,攻击者就可以搜索该端口上运行服务的已知漏洞并尝试利用。

nmap 还可以用于版本侦测,对应的选项为 -sV

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# nmap -sV 10.9.33.133
Starting Nmap 7.80 ( https://nmap.org ) at 2025-03-08 20:24 CST
Nmap scan report for OPS-3430 (10.9.33.133)
Host is up (0.000010s latency).
Not shown: 996 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.11 (Ubuntu Linux; protocol 2.0)
81/tcp open http nginx 1.26.0
6001/tcp open tcpwrapped
9080/tcp open http OpenResty web app server
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.40 seconds

nmap 还可以利用 TCP/IP 协议栈指纹来识别不同的操作系统和设备。使用 -O 选项来进行操作系统检测。

nmap 也提供漏洞扫描的功能,但是 nmap 的漏洞库很少,因此一般还是使用专业的漏洞管理工具来进行漏洞扫描。使用 nmap 目标 --script=auth,vuln 进行漏洞扫描。

收集网站的指纹信息

网站的指纹信息是指网站所使用的技术栈信息,例如编程语言、框架、http 服务器信息等等。基于这些信息,同样可以去漏洞库中搜索已知的漏洞并尝试利用。

有些工具可以用于收集网站的指纹信息,例如潮汐指纹wappalyzer(提供浏览器插件)、Ehole 等。

除此之外,还可以去网页代码中查找指纹信息,例如很多 CMS 生成的站点在其网页源代码中都会包含一些关键字,例如 discuzwordpress 等。

收集敏感信息

目录信息收集

当我们想检测一个站点的安全性时,我们需要知道该站点有哪些页面。一个网站一般有前台用户页面,同时也存在后台管理页面,后台管理页面一般只能通过内网访问。如果后台管理页面可以通过公网访问,则攻击者可以通过收集站点的目录信息,找到该后台管理页面的访问入口,进而尝试进行攻击。

有的时候,网站管理员可能会对网站内容进行备份,这个备份文件可能直接遗留在网站的根目录下了。这个备份文件也有可能被攻击者扫描到,那么攻击者就可以直接下载这个备份文件。在得到网站的源代码后,就可以分析其中的各种敏感信息/漏洞信息。例如配置文件中可能包含数据库的连接信息,进而尝试利用这些信息进行攻击。

可以通过 dirsearch 等工具对目标网站的敏感目录和文件进行扫描。

代码管理工具信息泄露

在开发过程中,一般需要使用 git、svn 等版本管理工具来进行代码分支/版本管理。代码管理工具信息泄露可能导致整个网站的源代码被攻击者获取。例如对于 git 工具,初始化仓库时会生成一个 .git 目录,用来记录代码的变更记录、日志等等。如果在部署代码时(例如在 Nginx 服务器上部署站点的静态文件),没有把 .git 目录删除,攻击者就可以通过这个目录来恢复整个网站的源代码,例如借助 GitHack 工具。

除此之外,Mac 下的 .DS_Store 文件也可能泄露敏感信息。.DS_Store 文件是 Mac 系统用来存储文件夹的自定义属性的隐藏文件。如果把该文件夹也部署到站点目录里,同样有可能造成源代码文件信息的泄露,例如借助 ds_store_exp 工具。

同样,svn 工具所使用的 .svn 目录也会造成敏感信息泄露。.snv 目录下的 wc.db 文件记录了仓库的版本信息,它是一个 sqlite 数据库文件,打开该数据库文件后就可以直接看到关于源码的各种敏感信息了。

代码托管平台信息泄露

代码托管平台(github、gitee 等),也有可能造成敏感信息泄露,例如员工不小心将公司代码泄露到 github 公共仓库中,或者将一些内网配置信息(例如数据库连接方式)泄露到 github 中,这些敏感信息都可能被攻击者利用。

信息收集综合利用工具

google hack

Google 等搜索引擎能够提供一些高级搜索功能,可以帮助我们快速定位资产,例如通过 inurl: .php 来搜索所有包含 .php 的页面。常用的高级语法有:

  • inurl: 搜索包含指定字符串的 URL
  • related: 搜索与该网址类似的网站
  • intext: 只搜索网页内容中包含指定内容的页面
  • intitle: 只搜索网页标题中包含指定内容的页面
  • filetype: 只搜索特定类型的文件,例如 filetype:pdf
  • link: 得到一个包含某个指定 url 的页面列表,即这些页面中都存在指向该 url 的链接
  • location: 搜索特定地理位置的页面
  • site: 限制在某个网站下进行搜索

黑暗搜索引擎

黑暗搜索引擎,也称为 网络空间搜索引擎,例如 Shodanfofazoomeye,这些工具可以快速定位到互联网上的资产信息,它们通常支持多种查询语法。

ARL 灯塔资产探测系统

ARL(Asset Reconnaissance Lighthouse)资产侦察灯塔系统 可以将上述信息收集的手段集成到一起,并提供一个统一的界面来进行资产探测,同时支持调用 nuclei 默认 PoC(Proof of Concept,这里可以理解为漏洞验证代码)对站点进行检测。

移动端信息收集

目前常用的移动端包括 App、微信小程序等。为了收集移动端的敏感信息,可以从两方面入手:

  • 直接对移动端 app 进行逆向分析,从中提取服务器域名等敏感信息
  • 对移动端的通信进行抓包,这样可以捕获到移动端与服务器的通信数据,进而分析其中的敏感信息

另外值得说明的是,有些移动端 App 其实是 Web 应用的封装,对于这类 App,直接通过抓包就可以收集信息。

App 逆向工程

可以通过 android-killer 工具来对 Android App 进行逆向分析。例如可以通过 Android->字符串搜索 对反编译出来的源代码进行字符串搜索,为了查找 App 与服务器通信的域名,可以使用 http://https:// 作为关键字。

burp 抓包

为了对移动端 App 进行抓包,可以将手机和 PC 连接在同一个局域网内:

  • pc 端的 Burp Suite 需要设置监听 ip 和端口
  • 手机网络设置代理,将代理设置为 pc 上 burp 所监听的 ip/端口
  • 安装证书(用于抓取 https 流量):首先需要导出 burp 的 CA 证书(以 .cer 作为后缀名),然后在手机上安装该证书

除了对移动端 App 进行抓包,还可以用类似的方法对微信小程序进行抓包。我们可以直接使用 PC 版本的微信来访问小程序,并通过 burp 进行抓包。

Reference