侦察知识库
目的
这个知识库提供了全面的侦察方法和技术。它涵盖了在不执行利用的情况下,关于目标的信息收集,包括发现服务、版本、技术和潜在的攻击向量。
可用工具
网络扫描
nmap- 端口和服务发现masscan- 快速端口扫描(如果需要速度)nc(netcat) - 横幅抓取
Web枚举
gobuster- 目录/文件暴力破解dirb- 替代目录扫描器nikto- Web漏洞扫描器whatweb- 技术识别curl/wget- 手动HTTP交互
服务枚举
enum4linux- SMB/Samba枚举smbclient- SMB交互showmount- NFS枚举snmpwalk- SNMP枚举
DNS/子域
dig- DNS查询host- DNS查找nslookup- DNS信息
分层侦察策略
核心原则: 每个侦察任务都有3层 - 当前一层结果不足时升级。
每项任务的层框架:
第1层(快速 & 广泛):
- 快速工具,默认参数
- 目标:获取初步立足点信息
- 时间:1-5分钟
- 示例:nmap前1000个端口,gobuster使用小词表
第2层(深入 & 密集):
- 相同工具,积极参数
- 目标:从已知服务中提取最大信息
- 时间:5-30分钟
- 示例:nmap所有端口+版本检测,gobuster使用大词表
第3层(替代 & 创意):
- 不同工具或手动技术
- 目标:找到标准工具遗漏的信息
- 时间:可变
- 示例:手动横幅抓取,替代扫描器,自定义脚本
升级触发器:
- 第1层返回无结果 → 升级到第2层
- 第2层返回信息极少 → 升级到第3层
- 第3层仍然不足 → 重新评估整个方法
侦察阶段
第1阶段:端口发现
目标:找到所有开放端口
# 快速扫描(前1000个端口)
nmap -p- --min-rate=1000 -T4 目标
# 全面扫描(所有端口)
nmap -p- -T4 目标 -oN ports.txt
输出格式:
{
"ports": [
{"port": 22, "state": "open", "protocol": "tcp"},
{"port": 80, "state": "open", "protocol": "tcp"}
]
}
第2阶段:服务检测
目标:识别服务和版本
# 服务版本检测
nmap -p22,80,443 -sV -sC -A 目标 -oN services.txt
# 积极扫描与脚本
nmap -p22,80 -sC -sV --script=default,vuln 目标
输出格式:
{
"services": [
{
"port": 22,
"service": "ssh",
"version": "OpenSSH 7.6p1",
"os": "Ubuntu Linux"
},
{
"port": 80,
"service": "http",
"version": "Apache httpd 2.4.29",
"technologies": ["PHP/7.2"]
}
]
}
第3阶段:Web枚举(如果发现HTTP/HTTPS)
目标:发现隐藏文件、目录和Web技术
分层Web扫描:
# 第1层:快速目录扫描
gobuster dir -u http://目标 -w /usr/share/wordlists/dirb/common.txt -x php,html,txt -t 50
# 如果第1层发现很少/没有,升级到第2层:
# 第2层:深度目录扫描,更大的词表
gobuster dir -u http://目标 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,txt,zip,bak -t 100
# 如果仍然不足,尝试第3层:
# 第3层:替代工具或技术
# 选项A:不同的工具
feroxbuster -u http://目标 -w /usr/share/wordlists/dirb/common.txt
# 选项B:漏洞扫描器
nikto -h http://目标
# 选项C:技术检测
whatweb http://目标
# 替代更大的词表
gobuster dir -u http://目标 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 50
# 技术检测
whatweb http://目标
# 漏洞扫描
nikto -h http://目标
输出格式:
{
"web": {
"url": "http://10.10.10.1",
"technologies": ["Apache/2.4.29", "PHP/7.2", "WordPress 5.0"],
"directories": [
"/admin (状态:403)",
"/uploads (状态:301)",
"/backup (状态:200)"
],
"files": [
"/config.php (状态:200)",
"/README.txt (状态:200)"
],
"vulnerabilities": [
"过时的WordPress版本",
"/uploads上启用目录列表"
]
}
}
第4阶段:特定服务枚举
SMB(端口139/445)
# 基本枚举
enum4linux -a 目标
# 列出共享
smbclient -L //目标 -N
# 检查匿名访问
smbmap -H 目标
FTP(端口21)
# 检查匿名登录
ftp 目标
# 尝试:anonymous / anonymous
# 横幅抓取
nc 目标 21
SSH(端口22)
# 获取SSH版本和算法
ssh -v 目标
# 检查用户枚举
ssh 用户@目标 2>&1 | grep -i "invalid\|denied"
MySQL/MSSQL(端口3306/1433)
# 横幅抓取
nc 目标 3306
# 测试默认凭据
mysql -h 目标 -u root -p
# 尝试常见密码:root, admin, password, ''
最佳实践
1. 结构化输出
始终以JSON格式格式化发现,便于解析:
# 示例:将nmap输出解析为JSON
nmap -p- 目标 -oG - | grep "Ports:" | awk '{print $2, $4}' | sed 's/\/open//' | jq -R -s 'split("
") | map(select(length > 0) | split(" ") | {port: .[1], service: .[0]})'
2. 隐蔽性与速度
- 对于游乐场环境:使用积极扫描(-T4,–min-rate=1000)
- 对于真实环境:使用较慢,隐蔽的扫描(-T2)
3. 保存所有输出
# 始终保存原始输出
nmap ... -oN nmap-full.txt -oX nmap-full.xml
# 将发现保存到状态文件
cat discovered.json >> .pentest-state.json
4. 全面覆盖
不要错过:
- UDP端口(较慢但重要):
nmap -sU --top-ports 100 目标 - 所有TCP端口:
nmap -p- 目标 - 多个词表的Web目录
- 发现的所有服务的默认凭据
5. 时间管理
- 快速初始扫描:最多5分钟
- 全面扫描:15-20分钟最多
- 这是一个游乐场,不是现实世界 - 速度很重要
常见词表
# 小型(快速)
/usr/share/wordlists/dirb/common.txt
# 中型(平衡)
/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
# 大型(全面)
/usr/share/wordlists/dirbuster/directory-list-2.3-big.txt
# 特定于Web应用
/usr/share/wordlists/wfuzz/general/common.txt
输出模板
完成侦察后,以这种格式提供摘要:
{
"target": "10.10.10.1",
"scan_date": "2025-01-15",
"discovered": {
"ports": [
{"port": 22, "service": "ssh", "version": "OpenSSH 7.6p1"},
{"port": 80, "service": "http", "version": "Apache 2.4.29"}
],
"web": {
"technologies": ["Apache", "PHP", "WordPress"],
"interesting_paths": ["/admin", "/uploads", "/wp-admin"],
"vulnerabilities": ["过时的WordPress", "目录列表"]
},
"potential_vectors": [
"通过/uploads上传文件",
"WordPress插件漏洞",
"SSH密码认证启用"
]
},
"recommended_actions": [
"测试/uploads上的文件上传功能",
"搜索检测到版本的WordPress漏洞",
"使用wpscan枚举WordPress用户"
]
}
关键原则
- 全面性:不要错过服务或目录
- 结构:始终输出JSON以便协调者解析
- 速度:在全面和高效之间取得平衡
- 上下文:提供下一步建议
- 不利用:停留在侦察阶段,不要测试漏洞
移交到下一阶段
当侦察足够时,提供:
- 完整的服务清单
- 识别的漏洞
- 推荐的利用方法
- 任何发现的凭据/默认登录
- 更新的
.pentest-state.json
侦察完成后,使用渗透知识进行利用阶段。