WHOIS查询基础信息
信息收集是渗透测试的基石,高质量的信息收集能让后续漏洞挖掘事半功倍。我将从实战角度系统讲解一套完整的、可落地的信息收集流程,帮你构建清晰的侦察思路。
一、外部轮廓识别:构建目标基础画像
核心目标
确定目标的存在性、边界范围和技术栈,建立初步攻击面地图。
必须搜集的信息
- 主域名与所有关联子域名
- IP地址范围(A/B/C类)
- 域名注册信息与DNS解析记录
- CDN及云服务提供商信息
- 网站使用的技术栈(Web服务器、框架、CMS等)
详细操作流程
1. 域名与DNS信息收集
原理:通过DNS查询与证书透明度日志,获取目标的网络资产全貌。证书透明度(CT)机制要求所有SSL证书必须公开记录,为发现未公开子域名提供了绝佳途径。
工具与命令:
# WHOIS查询基础信息
whois example.com
# 获取权威DNS服务器
dig +short NS example.com
# 查询A记录
dig +short example.com A
# 查询MX记录(可能暴露内部邮件服务器)
dig +short example.com MX
# 通过证书透明度日志查找子域名(最有效方法之一)
curl -s "https://crt.sh/?q=%.example.com&output=json" | jq -r '.[].name_value' | sed 's/\*\.//g' | sort -u
# 使用Amass进行全面DNS枚举(需先安装:go get -v github.com/owasp-amass/amass/v3/...)
amass enum -d example.com -active -brute -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-5000.txt -o subdomains.txt
# 补充扫描(对已发现的子域名进行递归扫描)
amass track -d example.comBash
实战技巧:
- 关注
*.example.com的通配符记录,这类记录可能暴露大量未公开子域名 - 对于金融、政府类目标,务必检查是否有
.gov或.edu等特殊后缀的关联域名 - 使用
-active参数触发DNS区域传输尝试,某些配置不当的DNS服务器可能泄露完整区域数据
2. IP范围与云环境识别
原理:确定目标网络边界,识别是否部署在云平台,为后续IP段扫描做准备。
工具与命令:
# 获取域名对应的IP
host example.com
# 查询IP所属网段(AS号)
whois $(host example.com | awk '{print $4}') | grep -i "originas\|netrange"
# 使用Shodan搜索目标资产(需注册API KEY)
shodan host example.com
shodan search "hostname:example.com" --fields ip_str,port,org,product
# 云环境识别(检查常见云服务商特征)
nslookup example.com | grep -i "amazon\|azure\|google"
curl -s http://169.254.169.254/latest/meta-data/ 2>/dev/null | grep -q "not found" || echo "Likely AWS"
# 检测S3 Bucket暴露
aws s3 ls s3://example-bucket --no-sign-request 2>/dev/null || echo "Checking public buckets..."Bash
关键点:
对于自建IDC环境,应重点关注B/C段IP,可能存在内部系统
云环境重点检查S3 Bucket、AK/SK泄露、云元数据服务访问控制
使用
CloudBrute工具扫描云资产:git clone https://github.com/christophetd/CloudBrute.git cd CloudBrute && pip install -r requirements.txt python cloudbrute.py exampleBash
二、资产暴露面扫描:发现所有可访问入口
核心目标
识别目标所有开放的端口、服务和Web路径,建立完整的攻击面视图。
必须搜集的信息
- 开放端口及其服务版本
- Web应用目录结构与敏感路径
- API接口与文档
- 静态资源与配置文件
- 后台管理系统路径
详细操作流程
1. 端口扫描与服务识别
原理:通过TCP/UDP扫描发现活跃服务,结合服务指纹识别确定具体软件及版本,为后续漏洞利用提供基础。
工具与命令:
# 快速全端口扫描(发现开放端口)
nmap -v -sn example.com # 先ping扫描确认存活
nmap -v -p- -T4 -Pn example.com -oA fullport_scan
# 对开放端口进行详细服务识别
nmap -sV -sC -p 22,80,443,8080,3306 example.com -oA service_scan
# 使用masscan进行超高速扫描(适用于大范围目标)
masscan -p1-65535,U:1-65535 example.com --rate=10000 --exclude 224.0.0.0/4 -oG masscan_results.txt
# 自动检测常见漏洞(谨慎使用,可能触发WAF)
nmap --script vuln -p 80,443 example.comBash
专业技巧:
- 扫描前先做
nmap -sn确认目标存活,避免无效扫描 - 对云环境扫描应降低速率(
-T2),避免触发云平台安全策略 - 使用
--script safe只运行安全脚本,减少被封风险 - 重点检查:22(SSH)、21(FTP)、3389(RDP)、6379(Redis)、27017(MongoDB)等高危端口
2. Web目录与文件扫描
原理:利用常见路径字典进行暴力探测,发现未被索引的管理后台、备份文件和敏感接口。
工具与命令:
# 使用ffuf进行高效目录扫描(最推荐)
ffuf -w /usr/share/wordlists/seclists/Discovery/Web-Content/big.txt -u https://example.com/FUZZ -e .php,.html,.bak,.zip,.sql -t 50 -mc 200,301,302 -ac -o dir_scan.txt
# 针对特定路径深度扫描
ffuf -w /usr/share/wordlists/seclists/Discovery/Web-Content/raft-medium-directories.txt -u https://admin.example.com/FUZZ -mc 200,301,302 -recursion -recursion-depth 3
# 查找常见备份文件
ffuf -w /usr/share/wordlists/seclists/Discovery/Web-Content/backup-extensions.txt -u https://example.com/indexFUZZ -mc 200 -e .bak,.old,.zip,.tar.gz
# 查找敏感文件
ffuf -w /usr/share/wordlists/seclists/Discovery/Web-Content/Common-Dashboard-panels.txt -u https://example.com/FUZZ -mc 200Bash
关键参数说明:
-t: 并发线程数(根据目标承受能力调整)-mc: 只显示指定状态码的响应-ac: 自动校准过滤器,减少假阳性-e: 尝试常见文件扩展名-recursion: 递归扫描发现的目录
3. API与接口发现
原理:现代应用大量使用RESTful API和GraphQL,这些接口往往成为安全薄弱点。
方法:
# 查找Swagger文档
ffuf -w /usr/share/wordlists/seclists/Discovery/Web-Content/swagger.txt -u https://api.example.com/FUZZ -mc 200
# 查找JavaScript文件中的API端点
gau example.com | grep -E '\.js{{content}}#x27; | while read url; do curl -s "$url" | grep -Eo 'https?://[^'"'"'"]+|/[\w\./-]+' | grep example.com; done
# 使用Postman自动导入Swagger API
curl -s https://api.example.com/v2/api-docs | jq -r '.paths | keys[]' > api_paths.txt
# 检测GraphQL是否存在
curl -X POST https://api.example.com/graphql -H "Content-Type: application/json" --data '{"query":"{__schema{types{name}}}"}' -vBash
实战技巧:
- 检查
/robots.txt,常包含禁止爬虫但可直接访问的路径 - 查看网页源代码,搜索
api.、/v1/、/graphql等关键词 - 使用Chrome插件"Restman"自动发现API端点
三、深度行为分析:挖掘隐藏的攻击面
核心目标
通过分析网站运行机制和配置细节,发现开发者未意识到的安全隐患。
必须搜集的信息
- 源码泄露(.git、.svn、.hg等)
- 配置文件与环境变量(.env、web.config)
- 错误信息与堆栈跟踪
- HTTP响应头中的敏感信息
- JavaScript中的硬编码凭证
- 域名关联的第三方服务
详细操作流程
1. 源码泄露检测
原理:开发者误将版本控制目录暴露在Web根目录下,可导致完整源码被下载。
检测与利用:
# 检查.git目录是否存在
curl -s -I https://example.com/.git/HEAD | grep "200 OK"
# 自动化检测工具
git -C /tmp check-init https://example.com # 需要先安装git-check-init
# 使用GitHack恢复源码(当HEAD存在时)
python githack.py https://example.com/.git/
# 专业工具:git-dumper
git-dumper https://example.com/.git ./output_dirBash
修复验证:
- 访问
/.git/HEAD应返回403或404 - 服务器应禁止访问以
.开头的目录
2. 敏感文件与配置泄露
原理:备份文件、配置文件和调试页面常被忽略,却包含关键凭证。
检测方法:
# 检查常见敏感文件
curl -s https://example.com/.env | grep -i "DB_PASSWORD\|SECRET_KEY"
curl -s https://example.com/web.config | grep -i "connectionstring"
curl -s https://example.com/robots.txt
# 自动化扫描(使用专门字典)
ffuf -w /usr/share/wordlists/seclists/Discovery/Web-Content/Common-DB-Directories.txt -u https://example.com/FUZZ -mc 200
# 检查调试页面
curl -s https://example.com/phpinfo.php
curl -s https://example.com/debug.phpBash
实战案例: 某电商平台因/backup.zip未授权访问,导致数据库备份泄露,包含10万用户明文密码。
3. HTTP响应头分析
原理:服务器响应头可能泄露技术栈细节和配置弱点。
检测命令:
curl -I https://example.com
# 关注以下头部:
# X-Powered-By: PHP/7.2.24
# Server: nginx/1.14.0
# X-Debug-Token: dev
# X-Runtime: 0.123456
# Set-Cookie: PHPSESSID=xxx; path=/; HttpOnlyBash
关键风险点:
- 明确的软件版本号:便于匹配已知漏洞
- Debug模式开启:
X-Debug-Token暴露在生产环境 - Cookie缺少Secure/HttpOnly标志:可能导致XSS劫持
- 服务器类型与版本:如Apache/2.4.29(已知漏洞版本)
4. JavaScript文件深度挖掘
原理:前端代码常包含后端API路径、临时凭证或调试接口。
操作流程:
# 提取所有JS文件
gau example.com | grep '\.js{{content}}#x27; > js_files.txt
# 检查硬编码凭证
cat js_files.txt | xargs -I{} curl -s {} | grep -Ei 'api[_\-]key|secret|token|password|aws|access|client|mongodb|postgres'
# 检查API端点
cat js_files.txt | xargs -I{} curl -s {} | grep -Eo 'https?://[^"'"'"']+' | sort -u
# 使用LinkFinder自动提取端点
python3 linkfinder.py -i js_files.txt -o endpoints.txtBash
进阶技巧:
- 查找
process.env变量:可能泄露前端配置的敏感信息 - 检查WebSocket连接字符串:
ws://internal.example.com:8080 - 搜索
//DEBUG注释:可能包含临时测试路径
四、上下文关联推理:构建攻击链路
核心目标
将碎片信息整合为可利用的攻击路径,识别最高价值突破口。
关键操作步骤
1. 技术栈漏洞匹配
# 创建技术栈清单
echo "WordPress 5.8" > tech_stack.txt
echo "Nginx 1.14.0" >> tech_stack.txt
echo "PHP 7.2.24" >> tech_stack.txt
# 查找相关CVE
for tech in $(cat tech_stack.txt); do
searchsploit "$tech" | grep -v "----"
done
# 使用cve-search查询详细信息
cve-search -p nginx -v 1.14.0
# 检查WordPress插件漏洞
wpscan --url https://example.com --enumerate vp --api-token YOUR_API_TOKENBash
实用技巧:
- 重点检查中间件和框架漏洞,比业务逻辑漏洞更容易利用
- 对于CMS系统,使用专用扫描器(如wpscan、joomscan)
- 关注"低CVSS但高可利用性"的漏洞,如信息泄露类
2. 供应链风险分析
原理:第三方依赖组件的漏洞可能影响整个应用。
操作流程:
# 识别前端依赖
curl -s https://example.com | grep -Eo 'cdn\.[^"'\'' ]+' | sort -u
# 识别后端组件(通过错误页面)
curl -s https://example.com/nonexistent-page | grep -i "laravel\|spring\|django"
# 检查JavaScript库版本
whatweb https://example.com
# 使用retire.js检查前端库漏洞
retire --outputformat json --outputfile vulnerabilities.json https://example.comBash
关键点:
- jQuery < 3.5.0存在XSS漏洞(CVE-2020-11022)
- Log4j 2.0-beta9到2.14.1存在RCE(CVE-2021-44228)
- Bootstrap < 4.5.3存在XSS漏洞
3. 攻击路径构建
方法:将信息串联成可行的攻击链。
示例:
1. 信息收集发现:
- 子域名: dev.example.com (Nginx 1.14.0)
- 暴露路径: /backup/config.bak
- 检测到: WordPress 5.8 + WooCommerce 4.0
2. 漏洞匹配:
- Nginx 1.14.0: 无直接RCE,但存在CVE-2019-9511/9531 (DoS)
- WordPress 5.8: 存在CVE-2021-29447 (XSS)
- WooCommerce 4.0: 存在CVE-2020-35489 (IDOR)
3. 攻击路径选择:
a) 通过config.bak获取数据库凭证 → 登录WordPress后台 → 上传Webshell
b) 利用WooCommerce IDOR漏洞修改用户订单 → 获取管理员会话
c) 组合使用: 通过XSS获取管理员cookie → 突破后台 → 执行任意代码
4. 优先级评估:
- 路径a: 高成功率(配置文件泄露常见),需验证备份文件是否包含真实凭证
- 路径c: 中等成功率(依赖XSS触发),但风险较低(无需直接攻击服务器)Plain text
实用工具:
# 使用mermaid绘制攻击路径图
cat > attack_path.mmd << EOF
graph TD
A[信息收集] --> B[dev.example.com]
A --> C[/backup/config.bak]
A --> D[WordPress 5.8]
B --> E[Nginx 1.14.0]
C --> F[数据库凭证]
D --> G[CVE-2021-29447]
F --> H[登录后台]
G --> I[获取管理员cookie]
H --> J[上传Webshell]
I --> J
J --> K[系统控制]
EOF
# 转换为PNG (需要安装mermaid-cli)
mmdc -i attack_path.mmd -o attack_path.pngBash
五、高级信息收集技巧
1. 绕过CDN获取真实IP
# 历史DNS记录查询
curl -s "https://securitytrails.com/list/ns/example.com" | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | sort -u
# 邮件服务器IP(通常不走CDN)
nslookup -type=MX example.com
# 检测SSL证书关联IP
openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -text | grep 'DNS:' | tr ',' '\n'
# 使用第三方服务
curl -s "https://dnsdumpster.com/search.php?remote=1®ular=on&q=example.com" | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'Bash
2. WAF指纹识别与绕过
# 识别WAF类型
wafw00f https://example.com
# 常见WAF响应特征:
# Cloudflare: 403 Forbidden with "cloudflare-nginx"
# AWS WAF: 403 Forbidden with "x-amzn-RequestId"
# ModSecurity: 403 Forbidden with "ModSecurity"
# 绕过测试(谨慎使用):
# 1. 大小写混合
curl -s "https://example.com/?query=<ScRiPt>alert(1)</ScRiPt>"
# 2. 空格替换
curl -s "https://example.com/?query=%09alert(1)"
# 3. URL编码变异
curl -s "https://example.com/?query=%253cscript%253ealert(1)%253c/script%253e"Bash
3. 自动化信息收集框架
# 安装ReconFTW(全面信息收集框架)
git clone https://github.com/six2dez/reconftw
cd reconftw && ./install.sh
./reconftw.sh -d example.com -s
# 创建自定义工作流
cat > collect.sh << 'EOF'
#!/bin/bash
TARGET=$1
mkdir -p $TARGET
# 1. 基础信息
echo "[*] Gathering basic info..."
whois $TARGET > $TARGET/whois.txt
dig +short $TARGET A > $TARGET/ip.txt
# 2. 子域名枚举
echo "[*] Enumerating subdomains..."
sublist3r -d $TARGET -o $TARGET/subdomains.txt
amass enum -d $TARGET -active -o $TARGET/amass.txt
cat $TARGET/subdomains.txt $TARGET/amass.txt | sort -u > $TARGET/subdomains_all.txt
# 3. 端口扫描
echo "[*] Scanning ports..."
nmap -sV -p- -T4 $TARGET -oA $TARGET/nmap
# 4. Web目录扫描
echo "[*] Scanning web directories..."
ffuf -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt -u https://$TARGET/FUZZ -mc 200,301,302 -t 50 -o $TARGET/dir_scan.json
# 5. 敏感文件检查
echo "[*] Checking sensitive files..."
for file in robots.txt .env backup.zip; do
curl -s -I https://$TARGET/$file | grep "200 OK" && echo $file >> $TARGET/sensitive_files.txt
done
EOF
chmod +x collect.sh
./collect.sh example.comBash
六、常见误区与避坑指南
1. 工具使用误区
单一工具依赖:不要只用nmap或只用ffuf,应多工具交叉验证
- 正确做法:先用masscan快速扫描,再用nmap详细识别
- 验证技巧:将不同工具结果合并去重:
cat nmap.txt masscan.txt | awk '{print $2}' | sort -u
盲目全端口扫描:对云环境进行全端口扫描可能触发安全机制
- 解决方案:先扫描常见端口(80,443,8080,8443),再针对发现的服务扩展
2. 信息分析误区
忽略错误信息价值:500错误页面往往包含关键线索
- 正确做法:对所有非200响应保存并人工分析
- 自动化:
curl -s -o /dev/null -w "%{http_code} %{url_effective}\n" https://example.com/test 2>&1 | grep -v "200"
不验证信息真实性:扫描结果可能包含假阳性
- 验证方法:对关键发现进行二次确认
- 示例:发现
/admin目录后,应检查是否有登录表单而非简单目录列表
3. 权限边界误区
混淆内网外网:扫描到内网IP不代表可以从外网访问
- 解决方案:使用云函数或VPS从外部验证连通性
- 工具:
curl "https://api64.ipify.org?format=json" | jq .ip获取自己的出口IP
忽视测试范围:客户可能只授权测试特定子域名
- 正确做法:明确测试边界,避免越权测试
七、实战建议:提升信息收集效率
建立个人工具库
- 维护常用字典:敏感路径、备份文件、管理后台
- 整理命令速查表:
alias nmap_quick='nmap -sV -sC -T4' - 创建自动化脚本:一键执行标准信息收集流程
持续更新知识库
- 关注CVE公告:https://nvd.nist.gov/vuln/full-list
- 订阅安全博客:PortSwigger、Snyk Blog
- 收集真实案例:整理历史渗透中的信息收集技巧
信息管理技巧
使用标准化目录结构:
example.com/ ├── 1-recon/ │ ├── domains/ │ ├── ips/ │ └── subdomains.txt ├── 2-scan/ │ ├── nmap/ │ └── web/ ├── 3-vuln/ │ └── findings.md └── report.mdPlain text
采用Markdown记录关键发现:
echo "- [ ] /backup.zip 存在敏感数据" >> findings.md
效率优化策略
- 并行处理:
cat targets.txt | xargs -P 5 -I{} ./collect.sh {} - 云平台利用:在AWS EC2上运行大规模扫描,避免本地IP被封
- 定时扫描:对重要目标进行定期信息收集,跟踪变化
- 并行处理:
总结
高质量的信息收集需要遵循"目标导向、分层递进、交叉验证"的原则。不要为了收集而收集,每一步都应明确目标:这个信息将如何帮助我找到下一个突破口?
记住三个黄金法则:
- 90%的漏洞藏在10%的路径中:优先关注管理后台、API接口和配置文件
- 信息的价值在于关联:孤立的IP地址无意义,但IP+服务+版本=潜在攻击面
- 自动化是基础,人工研判是关键:工具只能发现表面信息,真正有价值的线索需要人脑分析
最后提醒:所有操作必须在授权范围内进行,渗透测试的本质是帮助客户发现并修复问题,而非展示技术能力。当你能通过信息收集精准定位关键漏洞,同时提供详实的修复建议时,才是真正的专业渗透测试。