工具与字典
FUZZ:模糊测试
使用场景
- 破解密码
- 扫描目录
- 扫描参数
- 测试漏洞
常用字典
seclist
wordlist
字典生成
规律密码生成
部分情况下员工可能使用较为简单的规律密码,我们可以使用linux下的简单命令或者工具来枚举这些规律密码
crunch
crunch 是 Linux 下最常用的强力字典生成工具,支持根据指定的字符集、长度及特定模式(Pattern)批量生成密码。
crunch <min-len> <max-len> [charset] [-t pattern] -o <outputfile>
常用选项说明:
-t <pattern>:指定生成的规则模式。@:代表小写字母,:代表大写字母%:代表数字^:代表特殊符号
-o <file>:将生成的字典保存至指定文件。
crunch 8 8 -t Admin%%^ -o admin_pattern.txt
Bash 序列扩展
Bash 语法天然支持大括号序列扩展,可直接在内存中展开并生成连续的数字或字母序列。
- 连续补零数字字典(如
000000-999999): 利用{start..end}语法,当起始数字带前导零时,Bash 会自动按相同位数进行补零对齐。
printf "%s\n" {000000..999999} > num_6digits.txt
- 连续字母及多位组合序列(如
a-z、aa-zz):
# 生成单字母序列 a-z
printf "%s\n" {a..z} > alpha.txt
# 生成双字母组合 aa-zz
printf "%s\n" {a..z}{a..z} > alpha_2len.txt
seq 命令
seq 是 Linux 内置的序列生成工具,相较于 Bash 大括号扩展,seq 在处理极大数据量时内存占用更低,且支持精确的格式化输出。
- 指定固定长度与补零 (
-w选项):-w(—equal-width)参数会自动以前导零填充,使所有输出数字保持相同宽度。seq -w 0 999999 > numeric_dict.txt - 自定义格式输出 (
-f选项): 利用printf风格的格式化字符串生成固定前缀/后缀的规律密码(如admin0001到admin9999):
seq -f "admin%04g" 1 9999 > admin_seq.txt
网页下密码获取
cewl
再进行信息收集的时候,我们往往能获取大量员工信息、公司信息、组织缩写,这往往能成为我们构建字典的前提,我们可以使用cewl来获取大量网页信息中的可能密码并制作成密码本
sudo cewl -d 2 -m 5 -w ourwordlist.txt www.MegaCorpOne.com
-d 2(--depth) 爬取深度(Depth)。指定网络蜘蛛(Spider)从起始 URL 开始递归追踪和爬取链接的层级。2表示爬虫会抓取入口页面(深度 0)以及该页面直接链接的第一层页面(深度 1)和第二层页面(深度 2)。
-m 5(--min_word_length) 最小词长限制(Minimum Word Length)。设定提取词汇的最小字符长度门槛。5表示仅收集长度大于等于 5 个字符的单词,低于该长度的短词(如常见介词、冠词等)将被自动过滤,以提高字典的有效性。
其他补充的参数
| 参数 | 长参数 | 说明 |
|---|---|---|
-e | --email | 提取网页中包含的电子邮件地址,并生成单独的邮箱列表。 |
-o | --offsite | 允许爬虫离开起始域(爬取指向外部域名的链接)。 |
-a | --meta | 包含抓取到的文档(如 PDF、Office 格式文件)中的元数据(Metadata)词汇。 |
--meta_file | --meta_file | 指定保存解析出的文档元数据的文件名。 |
-u | --user_agent | 自定义 HTTP 请求头的 User-Agent 字符串,用于模拟特定浏览器。 |
密码扩展
获得初始的基础信息(如姓名缩写、生日、公司简称、年份等)后,通常需要基于社会工程学字典生成器,将散乱的信息组合并扩展为概率更高的密码集。
CUPP
cupp 是一款基于交互式问答的密码集生成工具。它通过收集目标对象的个性化信息(如名字、昵称、生日、宠物名、公司名等),结合常见的密码构造习惯自动进行组合与扩展。
- 使用方式:
# 启动交互式收集界面 cupp -i - 特点:
- 支持自动追加常用年份(如 2023、2024)。
- 支持自动追加常见特殊字符组合(如
!、@、123)。 - 内置 LeetSpeak 转换逻辑(如将
a替换为4,e替换为3)。
密码异化
原始字典(如纯英文单词或基础姓名短语)在实际场景中往往会被用户追加规则修饰。使用异化工具(Rule-based mutation)可以通过对基准字典施加转换规则,批量衍生出符合真实防策略要求的复杂密码。
psudohash
可以使用psudohash来进行密码的异化部分
# 基础异化:输入单个关键词并导出异化字典
python3 psudohash.py -w CompanyName -o mutated_dict.txt
# 深入异化:指定异化等级、追加特定年份与符号组合
python3 psudohash.py -w CompanyName -m 2 -y 2024,2025,2026 -o advanced_dict.txt
WEB测试扫描
gobuster
gobuster 是一款基于 Go 语言编写的高性能 URI/DNS/VHost 爆破工具
gobuster 支持多种模式(如 dir 目录爆破、dns 子域名爆破、vhost 虚拟主机爆破等)。进行目录扫描时使用 dir 模式。
常用参数说明
| 参数 | 长参数 | 说明 |
|---|---|---|
-u | --url | 指定目标基础 URL(如 [http://127.0.0.1](http://127.0.0.1) 或 [https://example.com](https://example.com))。 |
-w | --wordlist | 指定用于爆破的路径字典文件路径。 |
-x | --extensions | 指定要搜寻的文件扩展名(多个用逗号隔开,如 php,html,txt,json)。 |
-t | --threads | 设置并发线程数(默认 10,可根据网络与目标负载调高至 50 或 100)。 |
-s | --status-codes | 指定视为有效结果的 HTTP 响应状态码(默认 200,204,301,302,307,401,403)。 |
-b | --blackstatus | 指定需要排除/忽略的 HTTP 状态码(如 -b 404,400)。 |
-k | --no-tls-validation | 跳过 SSL/TLS 证书验证(用于测试自签名证书或 HTTPS 协议站点)。 |
-a | --useragent | 自定义 HTTP 请求头的 User-Agent 字符串。 |
-H | --headers | 添加自定义 HTTP 报头(格式为 "Header-Name: Header-Value",多用于带 Cookie 扫描)。 |
-o | --output | 指定扫描结果保存的目标文件名。 |
-d | --domain | 指定目标主域名(仅在 dns 子域名爆破模式下生效,如 -d example.com)。 |
目录爆破
在 dir 模式下,gobuster 通过向目标服务器发送 HTTP 请求,探测响应状态码以发现隐藏文件和路径。
gobuster dir -u <URL> -w <wordlist_path> [options]
典型使用示例
- 基础路径扫描:
gobuster dir -u http://127.0.0.1 -w /usr/share/wordlists/dirb/common.txt - 带指定文件扩展名与高并发扫描: 同时探测根目录下的
.php、.txt及.bak文件:gobuster dir -u http://127.0.0.1 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,bak -t 50 - 带 Cookie 鉴权的深层路径扫描: 在需要验证身份的页面后方追加自定义 Cookie Header:
gobuster dir -u http://127.0.0.1/admin -w wordlist.txt -H "Cookie: PHPSESSID=xyz123" -o dir_res.txt
子域名爆破
在 dns 模式下,gobuster 利用系统 DNS 解析机制,对给定的主域名拼装字典进行 A/CNAME 记录查询,用以识别目标未公开的二级/三级子域名。
gobuster dns -d <domain> -w <wordlist_path> [options]
常用特定参数
-r/--resolver:指定自定义 DNS 服务器(如-r 8.8.8.8),避免触发本地默认 DNS 的频率限制。-c/--show-cname:显示别名解析记录(CNAME)。-i/--show-ips:在结果中直接显示子域名对应的 IP 地址。
典型使用示例
-
基础子域名爆破(显示 IP 结果):
gobuster dns -d example.com -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-5000.txt -i -
使用自定义 DNS 解析器与显示 CNAME: 使用 Google 核心 DNS 并保存爆破输出:
gobuster dns -d example.com -w subdomains.txt -r 8.8.8.8 -c -o dns_res.txt
wfuzz
可以为网络表面的输入点提供优秀的覆盖测试,使用fuzzing技术
什么是fuzzing:fuzzing是一种设计想应用程序或服务提供大量有效或无效数据以输入形式的技术
wfuzz 的核心思想是将 URL、请求头或请求体中的占位符 FUZZ 替换为字典文件中的具体 Payload。
wfuzz [options] -z <payload_type> -w <wordlist_path> <URL_with_FUZZ>
常用参数说明
| 参数 | 长参数 | 说明 |
|---|---|---|
-z | --payload | 指定使用的 Payload 类型及字典文件(如 -z file,wordlist.txt)。 |
-w | --wordlist | 指定字典文件路径(-z file,PATH 的简写方式)。 |
--hc | --hide-code | 隐藏特定 HTTP 响应状态码的结果(如 --hc 404 隐藏 404 页面)。 |
--sc | --show-code | 仅显示特定 HTTP 响应状态码的结果(如 --sc 200,302)。 |
--hl | --hide-lines | 根据响应的行数隐藏结果(常用于过滤固定长度的错误提示)。 |
--hw | --hide-words | 根据响应的字数隐藏结果。 |
--hh | --hide-chars | 根据响应的字符数(响应体大小)隐藏结果。 |
-t | --threads | 设置并发线程数(默认 10)。 |
-d | --post-data | 发送 POST 请求并指定请求体(在请求体中可以使用 FUZZ)。 |
-H | --header | 添加自定义 HTTP 请求头(如 -H "Cookie: PHPSESSID=xxx")。 |
-c | --color | 显示彩色输出 |
目录和文件爆破
wfuzz -w <dic.txt> --hc 301,404,403 URL.com/FUZZ
常见场景示例
-
过滤常见状态码进行基础目录扫描: 使用
--hc 404,403隐藏无效或禁止访问的响应:wfuzz -c --hc 404,403 -w /usr/share/wordlists/dirb/common.txt http://example.com/FUZZ -
结合扩展名爆破指定类型文件: 对脚本文件(如
.php、.html、.bak)进行专项枚举:wfuzz -c --hc 404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -e .php,.html,.bak http://example.com/FUZZ -
基于响应体长度或字数过滤虚假响应: 当服务器对不存在的路径统一返回 HTTP 200 自定义错误页时,使用
--hl(行数)或--hh(字符数)过滤掉默认页面:wfuzz -c --hh 1234 -w wordlist.txt http://example.com/FUZZ
子域名爆破
通过在 HTTP 请求的 Host 头或 URL 的主机名位置嵌入 FUZZ,利用 DNS 解析或 HTTP 虚拟主机(VHost)路由机制匹配目标域名。
wfuzz -z file,<dic.txt> --hc 301,404,403 FUZZ.URL.com
常见场景示例
-
基于 Host 头进行虚拟主机(VHost)爆破: 在 IP 固定的情况下,爆破绑定在该 IP 上的内部 Web 站点(无需更改 DNS 配置):
wfuzz -c --hc 404 -w subdomains.txt -H "Host: FUZZ.example.com" http://192.168.1.100/ -
仅关注成功匹配响应(状态码过滤): 只提取响应状态码为
200或302的有效子域名:wfuzz -c --sc 200,302 -z file,subdomains.txt http://FUZZ.example.com
参数爆破
wfuzz -c --sc 200,302 -z file,subdomains.txt http://example.com/index.php?FUZZ=data -hc 404,301