在渗透测试中,信息收集是整个测试流程的基础和核心环节,其目标是全面、深入地了解目标系统的相关信息,为后续的漏洞发现和利用提供依据。
一、信息收集的目标
- 确定攻击面:识别目标系统的所有潜在入口点,包括公开服务、子域名、网络设备等。
- 发现潜在漏洞:通过收集目标系统的技术细节,识别可能存在的安全漏洞。
- 规划攻击路径:根据收集到的信息,制定针对性的渗透测试策略。
1.1:信息收集概述及分类
1.1.1:信息收集分类
信息收集分为两类:
主动信息收集:需要与目标机器进行直接交互,缺点:容易被目标机器记录操作或屏蔽,比如NMAP,Scapy.
被动信息收集:不需要与目标机器直接交互,主要利用第三站点或者渠道来进行信息收集,比如:Google,shadan,fofa
收集内容
IP地址,公司地址,邮件地址,域名信息,联系电话,公司组织,技术成员,网站技术架构,主机存活情况,端口信息,敏感信息等等。
·域名与子域名信息
- Whois查询:获取域名的注册信息,包括注册人、注册商、注册日期、到期日期等。
- 子域名枚举:通过工具(如Sublist3r、Amass)或搜索引擎(如Google、Bing)发现目标的子域名。
- DNS解析记录:获取域名的A记录、MX记录、NS记录等,发现隐藏的服务或主机。
·网络与端口信息
- 端口扫描:使用Nmap等工具扫描目标主机的开放端口,识别运行的服务和版本。
- 网络拓扑:通过 traceroute、Shodan 等工具绘制目标网络的拓扑结构。
·Web应用信息
- Web目录与文件枚举:使用DirBuster、Gobuster等工具扫描Web应用的目录和文件,发现敏感信息(如备份文件、配置文件)。
- Web技术栈识别:通过Wappalyzer、BuiltWith等工具识别Web应用使用的技术栈(如CMS、框架、服务器)。
- 敏感信息泄露:检查GitHub、Pastebin等平台,查找目标系统泄露的敏感信息(如源代码、配置文件)。
·操作系统与软件信息
- 操作系统指纹识别:通过Nmap的
-O
选项或p0f等工具识别目标主机的操作系统。 - 软件版本识别:通过Banner抓取、协议分析等方式识别目标系统上运行的软件及其版本。
·人员信息
- 社交媒体挖掘:通过LinkedIn、Twitter等社交媒体平台收集目标公司员工的信息。
- 邮件地址收集:收集目标公司员工的邮件地址,用于后续的钓鱼攻击测试。
· 云服务信息
- 云资产发现:通过AWS、Azure等云服务提供商的API或第三方工具(如ScoutSuite)发现目标在云上的资产。
- 云配置审计:检查云服务的配置,发现潜在的安全问题(如S3存储桶权限过大)。
二、信息收集的方法与工具
1. 主动信息收集
- 网络扫描:使用Nmap、Masscan等工具进行端口扫描和服务识别。
- Web应用扫描:使用Nikto、OWASP ZAP等工具进行Web应用的安全扫描。
- 漏洞利用工具:使用Metasploit等框架对发现的漏洞进行初步验证。
2. 被动信息收集
- 搜索引擎:使用Google Hacking、Shodan等工具搜索目标系统的公开信息。
- 社交媒体:通过社交媒体平台收集目标公司及其员工的信息。
- 公开数据源:查询WHOIS、DNSdumpster、Censys等公开数据源,获取目标的域名和IP信息。
3. 自动化工具
- Recon-ng:一个开源的情报收集框架,支持多种模块进行信息收集。
- Maltego:一个可视化工具,用于关联和分析收集到的信息。
- TheHarvester:一个用于收集电子邮件地址、子域名、主机名和IP地址的工具。
·Google搜索引擎使用技巧
1. 精确匹配搜索
-
使用双引号:将关键词用双引号括起来,可搜索完全匹配的短语。例如:
"admin login page"
。 -
适用场景:查找特定文件名、路径或错误信息。
2. 限定搜索范围
-
site: 指令:仅搜索特定网站或域名。例如:
site:example.com inurl:admin
。 -
filetype: 指令:搜索特定文件类型。例如:
filetype:log site:example.com
。
3. 排除干扰结果
-
减号(-):排除特定关键词。例如:
intitle:"index of" -passwd
。 -
适用场景:避免返回无关或误报结果。
4. 搜索URL中的关键词
-
inurl: 指令:搜索URL中包含特定关键词的页面。例如:
inurl:/login
。 -
适用场景:查找登录页面、管理后台等。
5. 搜索页面标题中的关键词
-
intitle: 指令:搜索标题中包含特定关键词的页面。例如:
intitle:"backend management"
。 -
适用场景:查找管理后台、配置页面等。
6. 搜索页面正文中的关键词
-
intext: 指令:搜索正文内容中包含特定关键词的页面。例如:
intext:"password reset"
。 -
适用场景:查找与密码重置相关的页面。
7. 搜索相关页面
-
related: 指令:搜索与指定网站相关的页面。例如:
related:example.com
。 -
适用场景:发现类似目标系统的其他网站。
8. 搜索链接到特定页面的网站
-
link: 指令:搜索链接到指定页面的网站。例如:
link:example.com
。 -
适用场景:查找引用目标系统的外部链接。
9. 搜索特定时间范围内的结果
-
时间范围筛选:在搜索结果页面点击“工具”→“时间”,选择特定时间范围。
-
适用场景:查找最新或历史信息。
10. 使用通配符搜索
-
星号(*):作为通配符,代替未知或缺失的关键词。例如:
"powered by *"
。 -
适用场景:查找特定框架或CMS版本信息。
11. 搜索数学计算或单位转换
-
数学计算:直接在搜索框输入算式,例如:
8*5+5
。 -
单位转换:例如:
100 miles in km
。 -
适用场景:快速进行计算或单位转换。
12. 使用OR逻辑搜索
-
OR 操作符:搜索包含任意一个关键词的页面。例如:
admin OR root
。 -
适用场景:扩大搜索范围,查找多个相关关键词。
13. 搜索特定地理位置的信息
-
location: 指令:搜索特定地理位置的信息。例如:
location:new york "cybersecurity"
。 -
适用场景:查找特定地区的公开信息。
14. 搜索特定文件内容
-
inanchor: 指令:搜索链接锚文本中包含特定关键词的页面。例如:
inanchor:"click here"
。 -
适用场景:查找特定链接指向的页面。
15. 使用Google Hacking数据库(GHDB)
-
参考GHDB:利用Exploit-DB等平台提供的Google Hacking语法,搜索敏感信息。例如:
intitle:"index of" password
。 -
适用场景:查找数据库文件、配置文件等敏感信息。
16. 使用INFO显示与指定网站相关的信息
使用方法:在Google搜索框中输入 info:
,后跟目标网站的域名。例如,输入 info:wikipedia.org
,将显示维基百科的相关信息和链接。
17. 缓存页面检索
- 功能:
cache:
指令可显示 Google 缓存的网页版本。当目标网页无法访问、被删除或需要查看历史版本时,该指令非常有用。 - 使用方法:在 Google 搜索框中输入
cache:
,后跟目标网页的 URL。例如,输入cache:www.example.com
,将显示 Google 缓存的该网页快照。
18. 排除关键字
- 功能:减号(
-
)用于排除搜索结果中包含特定关键词的页面。例如,搜索"智能手机" -广告
将返回与“智能手机”相关的结果,但会排除包含“广告”一词的页面。 - 使用方法:在搜索关键词前加上减号(
-
),确保减号与关键词之间没有空格。例如:"人工智能" -新闻
。 - 注意事项:
- 减号后必须紧跟关键词,中间不能有空格。
- 可结合其他搜索技巧使用,例如双引号、
site:
、filetype:
等。
实用示例
-
查找后台管理页面:
site:example.com intitle:admin
-
查找登录页面:
site:example.com inurl:login
-
查找包含密码的文件:
filetype:txt password site:example.com
-
查找配置文件泄露:
intitle:"index of" config
汇总表
技巧类型 | 指令/操作 | 示例 | 适用场景 |
---|---|---|---|
精确匹配搜索 | 双引号括起关键词 | "admin login page" | 查找特定短语,如文件名、路径或错误信息 |
限定搜索范围 | site: | site:example.com inurl:admin | 仅搜索特定网站或域名 |
限定搜索范围 | filetype: | filetype:log site:example.com | 搜索特定文件类型 |
排除干扰结果 | 减号(-) | intitle:"index of" -passwd | 排除特定关键词,避免误报 |
搜索URL关键词 | inurl: | inurl:/login | 查找URL中包含特定关键词的页面 |
搜索标题关键词 | intitle: | intitle:"backend management" | 查找标题中包含特定关键词的页面 |
搜索正文关键词 | intext: | intext:"password reset" | 查找正文内容中包含特定关键词的页面 |
搜索相关页面 | related: | related:example.com | 查找与指定网站相关的页面 |
搜索引用链接 | link: | link:example.com | 查找链接到指定页面的网站 |
时间范围筛选 | 搜索结果页面工具栏 | 在搜索结果页面点击“工具”→“时间”,选择特定时间范围 | 查找最新或历史信息 |
使用通配符 | 星号(*) | "powered by *" | 查找特定框架或CMS版本信息 |
逻辑或搜索 | OR | admin OR root | 扩大搜索范围,查找多个相关关键词 |
地理位置搜索 | 隐含的地理位置相关搜索(通过语言或地区设置)或第三方工具 | 结合地区关键词如"new york" 与搜索内容,或使用工具细化范围 | 查找特定地区的公开信息 |
链接锚文本搜索 | inanchor: | inanchor:"click here" | 查找链接锚文本中包含特定关键词的页面 |
数学计算/单位转换 | 直接输入算式或单位转换请求 | 8*5+5 或 100 miles in km | 快速进行计算或单位转换 |
利用GHDB | 参考Google Hacking数据库语法 | intitle:"index of" password | 查找数据库文件、配置文件等敏感信息 |
网站信息查询 | info: | info:example.com | 查询特定网站的基本信息,包括索引状态、相关链接等 |
缓存页面检索 | cache: | cache:www.example.com | 查看 Google 缓存的网页快照,适用于网页无法访问或查看历史版本 |
排除关键字 | 减号(-)+ 关键词 | "智能手机" -广告 | 去除搜索结果中包含特定词汇的页面 |
黑客语法网站 www.exploit-db.com
四,收集子域名信息
子域名介绍
1. 定义
子域名(Subdomain)是顶级域名(如 .com
、.net
)或主域名(如 example.com
)下的附属域名,用于进一步细分和组织网站内容。子域名通常位于主域名前,以点(.
)分隔。例如:
blog.example.com
是example.com
的子域名shop.example.com
是example.com
的子域名
2. 作用
- 网站结构分割:将不同功能模块(如博客、商城、论坛)划分到独立子域名,便于管理和访问。
- 品牌管理:支持多样化服务,如
mail.example.com
用于邮件服务,support.example.com
用于客户支持。 - 技术管理:子域名可指向不同服务器,支持分布式架构和负载均衡。
- SEO 优化:搜索引擎将子域名视为独立网站,有助于优化特定内容或关键词的排名。
1,maltego收集子域名信息
Maltego 是一款功能强大的开源情报(OSINT)工具,可用于收集子域名信息并可视化网络实体之间的关系。
- 下载 Maltego:访问 Maltego 官方网站 下载适合操作系统的版本(社区版免费,专业版需付费)。
- 安装并注册账户:安装完成后,启动 Maltego 并注册账户。如果使用社区版,选择 "Maltego CE" 登录。
- 配置数据源:在 Maltego 中,通过 "Transform Hub" 添加所需的数据源(如 PassiveTotal、VirusTotal、Shodan 等),这些数据源可增强子域名收集能力。
2 威胁情报平台
微步在线、360 威胁情报中心、奇安信威胁情报中心等平台可收集子域名信息。
3 其他方法
- 官方备案网站:如工信部 ICP 备案系统,通过主域名查备案,获得域名所属公司名称,再搜索该公司名称以获取其所有注册域名。
- 企业信息查询平台:如天眼查、企查查,通过查看股权穿透图查找子公司,并收集其子域名。
- Whois 查询:通过同一公司的域名可能使用同一邮箱注册的信息进行反查。
- 官网架构图:目标企业的官网可能列出子公司的介绍和官网链接。
- 自动化工具:Subfinder:集成多个 API 接口,自动化搜索子域名信息。 Layer 子域名挖掘机:适合使用自定义字典进行深度挖掘。
FOFA搜索引擎
网站链接 https://fofa.info/
FOFA 搜索引擎使用汇总表
类别 | 功能描述 | 示例语法 | 应用场景 |
---|---|---|---|
基础查询 | 按 IP 地址搜索资产 | ip="1.1.1.1" | 查找特定 IP 的资产 |
按域名搜索资产 | domain="example.com" | 查找根域名包含 example.com 的资产 | |
按标题搜索资产 | title="login" | 查找网页标题包含“login”的资产 | |
按端口搜索资产 | port="80" | 查找开放 80 端口的资产 | |
逻辑运算符 | 与(AND) | ip="1.1.1.1" && port="80" | 查找 IP 为 1.1.1.1 且开放 80 端口的资产 |
或(OR) | `ip="1.1.1.1" | ||
非(NOT) | ip="1.1.1.1" && !port="80" | 查找 IP 为 1.1.1.1 但未开放 80 端口的资产 | |
模糊查询 | 网页正文模糊匹配 | body~="admin" | 查找网页正文中包含“admin”近似关键词的资产 |
范围查询 | IP 段查询 | ip="192.168.1.0/24" | 查找 192.168.1.0 至 192.168.1.255 范围内的资产 |
时间范围查询 | after="2023-01-01" && before="2023-12-31" | 查找 2023 年内的资产 | |
地理位置查询 | 按国家查询 | country="CN" | 查找中国境内的资产 |
按城市查询 | city="Beijing" | 查找北京市的资产 | |
服务与协议 | 按服务类型查询 | app="Apache" | 查找运行 Apache 服务的资产 |
按协议类型查询 | protocol="https" | 查找使用 HTTPS 协议的资产 | |
证书查询 | 按证书名称查询 | cert="example.com" | 查找使用指定域名的 SSL 证书的资产 |
高级应用 | 资产发现与管理 | domain="example.com" | 企业快速发现公开暴露的网络资产 |
漏洞排查 | app="Apache" && version="2.4.29" | 查找运行存在漏洞的 Apache 版本的资产 | |
安全评估 | port="443" && country="CN" | 评估中国境内开放 443 端口的资产 | |
渗透测试 | city="Shanghai" && app="摄像头" | 查找上海地区的摄像头设备 |
五,主动信息收集
主动信息收集是信息安全、渗透测试、网络侦查等领域中一项至关重要的技能,指通过直接与目标系统或网络交互,主动获取目标信息的过程。与被动信息收集不同,主动信息收集需要直接发起请求或探测,因此可能面临更高的风险,但也能获取更深入、更准确的信息。
主动信息收集方法
1. 二层发现-arping/netdiscover命令探索
二层发现(Layer 2 Discovery) 是指在网络中通过第二层(数据链路层)的协议或技术,发现和识别网络设备或终端的方法。二层发现主要依赖于设备的物理地址(MAC 地址)以及数据链路层的通信机制,通常用于局域网(LAN)环境。
arping的使用
arping
是一个用于发送和接收 ARP(Address Resolution Protocol)请求的网络工具,主要用于在数据链路层进行网络诊断。
- 基本语法:
arping [选项] 目标
选项/参数 描述 示例 -c <数量>
指定发送的 ARP 请求数量。 arping -c 3 192.168.1.1
-I <接口>
指定要使用的网络接口。 arping -I eth0 192.168.1.1
-s <源IP>
指定源 IP 地址。 arping -s 192.168.1.100 192.168.1.1
-D
启用重复地址检测(Duplicate Address Detection),用于检测 IP 地址冲突。 arping -D -s 192.168.1.100 -I eth0
-U
无响应模式,仅发送 ARP 请求,不等待响应。 arping -U 192.168.1.1
-f
快速模式,发送完指定数量的 ARP 请求后立即退出。 arping -f -c 5 192.168.1.1
-w <超时时间>
设置每个请求的超时时间(以秒为单位)。 arping -w 2 192.168.1.1
-q
安静模式,不显示详细输出,只显示成功或失败。 arping -q -c 5 192.168.1.1
注意:arping只能用于本地网络因为ARP 请求是广播帧,无法穿越路由器到达其他网络。
netdiscover使用
netdiscover
是一款基于 ARP(地址解析协议) 的网络扫描工具,主要用于在 局域网(LAN) 中发现活动主机。它支持主动和被动两种扫描模式,能够快速识别网络中的设备,并显示其 IP 地址、MAC 地址 和 厂商信息。
参数 | 说明 | 示例 | 注意事项 |
---|---|---|---|
-i | 指定网络接口(如 eth0 、wlan0 等)。 | netdiscover -i eth0 | 必须指定有效的网络接口,否则无法扫描。 |
-r | 指定扫描的 IP 范围(CIDR 格式,如 192.168.1.0/24 )。 | netdiscover -i eth0 -r 192.168.1.0/24 | IP 范围需在本地网络可达,否则扫描无效。 |
-p | 启用被动扫描模式(不发送 ARP 请求,仅监听网络流量)。 | netdiscover -p -i eth0 | 被动扫描适用于隐蔽场景,但可能漏掉未主动通信的设备。 |
-f | 启用快速扫描模式(减少扫描间隔,加快速度)。 | netdiscover -f -i eth0 | 快速扫描可能增加网络负载,建议在测试环境使用。 |
-s | 设置扫描间隔时间(单位:秒,默认 1 秒)。 | netdiscover -s 0.5 -i eth0 | 间隔时间过短可能导致网络拥塞,需根据网络环境调整。 |
-t | 设置扫描超时时间(单位:秒)。 | netdiscover -t 5 -i eth0 | 超时时间过短可能导致漏掉响应较慢的设备。 |
-c | 指定自定义的 MAC 地址厂商数据库文件路径。 | netdiscover -c /path/to/oui.txt | 需提供有效的 OUI 数据库文件,否则无法解析厂商信息。 |
-n | 禁用 DNS 解析(仅显示 IP 地址,不解析主机名)。 | netdiscover -n -i eth0 | 禁用 DNS 可加快扫描速度,但无法获取主机名信息。 |
-h | 显示帮助信息。 | netdiscover -h | 帮助信息包含所有参数的详细说明。 |
2,三层发现ping命令和路由追踪
ping命令,最基础命令,我相信你们都知道,直接上表
命令 | 功能描述 | 示例 | 备注 |
---|---|---|---|
ping <目标IP/域名> | 默认发送 4 个 ICMP Echo Request 包,测试目标主机连通性 | ping 8.8.8.8 | 基本用法,适用于快速测试网络连通性 |
ping -n <数量> <目标> | 指定发送的 ICMP Echo Request 包数量 | ping -n 10 8.8.8.8 | Windows 专用,Linux 用 -c |
ping -c <数量> <目标> | 指定发送的 ICMP Echo Request 包数量(Linux/Unix/Mac) | ping -c 10 google.com | |
ping -t <目标> | 持续发送 ICMP Echo Request 包,直到手动停止(Ctrl+C) | ping -t 8.8.8.8 | Windows 专用,Linux 用 -i 或脚本循环 |
ping -i <间隔> <目标> | 设置发送 ICMP Echo Request 包的间隔时间(秒) | ping -i 2 8.8.8.8 | Linux/Unix/Mac 专用,Windows 用 -w (超时时间)结合循环实现类似效果 |
ping -l <大小> <目标> | 设置发送的数据包大小(字节) | ping -l 1500 8.8.8.8 | Windows 专用,Linux 用 -s |
ping -s <大小> <目标> | 设置发送的数据包大小(字节)(Linux/Unix/Mac) | ping -s 1500 google.com | |
ping -f <目标> | 设置数据包不分片(Don’t Fragment 位) | ping -f 8.8.8.8 | 测试路径 MTU(最大传输单元)限制 |
ping -v <目标> | 显示详细输出信息(部分系统支持) | ping -v 8.8.8.8 | Linux/Unix/Mac 专用,Windows 可使用 -a 解析主机名 |
ping -a <目标> | 解析目标 IP 地址为主机名 | ping -a 8.8.8.8 | Windows 专用 |
ping -R <目标> | 记录路由(Record Route),显示数据包经过的路由器(部分系统支持) | ping -R 8.8.8.8 | Linux/Unix/Mac 专用,需启用 IP 记录路由选项 |
ping -T <TTL值> <目标> | 设置数据包的 TTL(生存时间)值 | ping -T 64 8.8.8.8 | Linux/Unix/Mac 专用,Windows 用 -i (间隔)间接影响 TTL(不推荐) |
ping -4 <目标> | 强制使用 IPv4 地址 | ping -4 8.8.8.8 | |
ping -6 <目标> | 强制使用 IPv6 地址 | ping -6 2001:4860:4860::8888 | |
ping -w <超时> <目标> | 设置每个请求的超时时间(毫秒) | ping -w 1000 8.8.8.8 |
路由追踪命令
1,tracert
命令(Windows系统)
功能 | 描述 |
---|---|
基本用法 | tracert [目标IP或域名] |
默认最大跳数 | 30 |
常用选项 | |
- -d | 不解析主机名,加快显示速度 |
- -h | 设置最大跳数(如 -h 15 限制为15跳) |
- -w | 设置等待时间(如 -w 1000 等待1000毫秒) |
- -j | 指定松散源路由(仅限IPv4) |
输出内容 | 每跳显示IP地址、延迟时间(3个探测包)及丢包率(星号 * 表示超时) |
应用场景 | 网络故障排查、路径性能分析 |
限制 | 依赖ICMP协议,可能被防火墙拦截 |
2,Linux/Mac 系统:traceroute 命令
功能 | 描述 |
---|---|
基本用法 | traceroute [目标IP或域名] |
默认最大跳数 | 30 |
常用选项 | |
- -n | 不解析主机名,仅显示IP地址 |
- m | 设置最大跳数(如 -m 20 限制为20跳) |
- q | 设置每跳探测包数量(如 -q 5 发送5个探测包) |
- I | 使用ICMP协议(默认UDP,可选ICMP或TCP) |
输出内容 | 每跳显示IP地址、延迟时间(3个探测包)及丢包率(星号 * 表示超时) |
变种命令 | tracepath (类似功能,不解析主机名) |
应用场景 | 网络故障排查、路径性能分析、负载均衡识别 |
限制 | 部分网络可能限制ICMP或UDP协议 |
3,hping3命令
Hping3 是一款TCP/IP数据包组装/分析工具,通常web服务会用来做压力测试使用,也可以进行DOS攻击实验,同样,Hping只能每次扫描一个目标
功能 | 命令示例 | 说明 |
---|---|---|
ICMP Ping 测试 | hping3 -1 <目标IP> | 发送 ICMP Echo Request 包,判断目标是否在线。 |
TCP SYN 扫描 | hping3 -S <目标IP> -p <端口> | 发送 TCP SYN 包,扫描目标端口是否开放。 |
UDP 扫描 | hping3 --udp -p <端口> <目标IP> | 发送 UDP 包,扫描目标端口是否开放。 |
端口范围扫描 | hping3 --scan <起始端口>-<结束端口> <目标IP> | 扫描指定端口范围,查找开放端口。 |
TTL 值设置 | hping3 --ttl <TTL值> <目标IP> | 设置数据包的 TTL(生存时间)值。 |
发送频率控制 | hping3 -i <时间间隔> <目标IP> | 设置数据包发送间隔(秒)。 |
数据包大小设置 | hping3 -d <数据包大小> <目标IP> | 设置每个数据包的大小(字节)。 |
源 IP 伪造 | hping3 -a <伪造IP> <目标IP> | 伪造源 IP 地址,隐藏真实身份。 |
洪水攻击(SYN Flood) | hping3 -S -p <端口> --flood <目标IP> | 发送大量 TCP SYN 包,模拟 SYN Flood 攻击。 |
ICMP 洪水攻击 | hping3 --icmp --flood <目标IP> | 发送大量 ICMP Echo Request 包,模拟 ICMP Flood 攻击。 |
UDP 洪水攻击 | hping3 --udp --flood <目标IP> | 发送大量 UDP 包,模拟 UDP Flood 攻击。 |
数据包负载自定义 | hping3 -E <数据包文件> -d <数据包长度> <目标IP> | 发送自定义数据包负载。 |
记录路由 | hping3 --rroute <目标IP> | 记录数据包经过的路由路径。 |
监听模式 | hping3 --listen | 监听传入的数据包。 |
未完待续...