hashcat 是一款功能强大、高速的密码恢复工具,支持多种哈希 类 型破解,兼容CPU、GPU(CUDA/OpenCL/HIP/Metal)等硬件加速,是渗透测试和密码安全领域的核心工具之一。它支持暴力破解、字典破解、掩码破解、混合破解等多种攻击模式,可处理数千种哈希算法(如MD5、SHA系列、Windows LM/NTLM、Linux影子密码、WiFi WPA/WPA2哈希等),并提供规则自定义、会话恢复、性能优化等丰富功能,适用于密码恢复、安全审计和渗透测试场景。
| 命令格式 | 说明 |
|---|---|
| hashcat [options]… hash|hashfile|hccapxfile [dictionary|mask|directory]… | 基础执行格式:通过选项指定破解参数,后接目标哈希(单个哈希/哈希文件/WiFi hccapx文件),最后指定破解源(字典/掩码/目录) |
| 短参数/长参数 | 类型 | 描述 | 示例 |
|---|---|---|---|
| -m, –hash-type | 数字 | 指定哈希类型(未指定则自动检测,参考哈希类型编号) | -m 1000(对应NTLM哈希) |
| -a, –attack-mode | 数字 | 指定攻击模式(参考攻击模式编号) | -a 3(掩码暴力破解) |
| -V, –version | – | 显示工具版本 | hashcat -V |
| -h, –help | – | 显示帮助信息 | hashcat -h |
| –quiet | – | 抑制输出(仅显示关键结果) | hashcat –quiet -m 0 hash.txt dict.txt |
| –force | – | 忽略警告信息(强制执行) | hashcat –force -m 0 hash.txt dict.txt |
| 短参数/长参数 | 类型 | 描述 | 示例 |
|---|---|---|---|
| -1, –custom-charset1 | 字符集 | 自定义字符集?1(可组合内置字符集) | -1 ?l?d?u(?1包含小写字母+数字+大写字母) |
| -2, –custom-charset2 | 字符集 | 自定义字符集?2 | -2 ?l?d?s(?2包含小写字母+数字+特殊字符) |
| -3, –custom-charset3 | 字符集 | 自定义字符集?3 | -3 ?A?0(?3包含大写字母+数字) |
| -4, –custom-charset4 | 字符集 | 自定义字符集?4 | -4 !@#$%(?4包含指定特殊字符) |
| -i, –increment | – | 启用掩码增量模式(按长度递增尝试) | hashcat -a 3 -i -m 0 hash.txt ?l?l?l |
| –increment-min | 数字 | 增量模式起始长度 | –increment-min=4(从4位开始) |
| –increment-max | 数字 | 增量模式结束长度 | –increment-max=8(到8位结束) |
| 短参数/长参数 | 类型 | 描述 | 示例 |
|---|---|---|---|
| -o, –outfile | 文件 | 指定破解结果输出文件 | -o result.txt(结果保存到result.txt) |
| –outfile-format | 字符串 | 输出格式(多格式用逗号分隔) | –outfile-format=1,3(格式1:哈希:密码;格式3:密码) |
| –show | – | 对比哈希列表与potfile(已破解记录文件),显示已破解哈希 | hashcat –show -m 1000 hash.txt |
| –left | – | 对比哈希列表与potfile,显示未破解哈希 | hashcat –left -m 1000 hash.txt |
| –potfile-disable | – | 禁用potfile(不保存破解记录) | hashcat –potfile-disable -m 0 hash.txt dict.txt |
| –potfile-path | 文件 | 指定自定义potfile路径 | –potfile-path=my.pot(使用my.pot保存记录) |
| 短参数/长参数 | 类型 | 描述 | 示例 |
|---|---|---|---|
| –session | 字符串 | 定义会话名称(用于恢复会话) | –session=ntlm_crack(会话名:ntlm_crack) |
| –restore | – | 从指定会话恢复破解(需配合–session) | hashcat –restore –session=ntlm_crack |
| -w, –workload-profile | 数字 | 指定工作负载配置(1=低负载,2=中负载,3=高负载,默认3) | -w 2(中负载,平衡性能与系统占用) |
| -b, –benchmark | – | 对指定哈希类型进行性能测试 | hashcat -b -m 1000(测试NTLM哈希破解速度) |
| –backend-devices | 字符串 | 指定使用的硬件设备(逗号分隔) | -d 1(使用第1个GPU设备) |
| -O, –optimized-kernel-enable | – | 启用优化内核(提升速度,限制密码长度) | hashcat -O -m 1000 -a 3 hash.txt ?l?d?u?l?d?u |
| 短参数/长参数 | 类型 | 描述 | 示例 |
|---|---|---|---|
| -r, –rules-file | 文件 | 指定规则文件(对字典单词应用规则变形) | -r rules/best64.rule(使用best64规则) |
| -j, –rule-left | 规则 | 对字典单词应用单个左侧规则 | -j ‘c’(首字母大写,如”test”→”Test”) |
| -k, –rule-right | 规则 | 对字典单词应用单个右侧规则 | -k ‘^-‘(在单词前加”-“,如”test”→”-test”) |
| -s, –skip | 数字 | 跳过字典前X个单词 | -s 10000(跳过前10000个单词) |
| -l, –limit | 数字 | 限制字典读取数量(从跳过位置开始算) | -l 5000(仅读取5000个单词) |
| 编号 | 攻击模式 | 描述 |
|---|---|---|
| 0 | Straight(字典模式) | 直接使用字典中的单词尝试破解 |
| 1 | Combination(组合模式) | 组合两个字典中的单词尝试破解 |
| 3 | Brute-force(掩码暴力破解) | 通过掩码定义字符集和长度,暴力尝试 |
| 6 | Hybrid Wordlist + Mask(混合模式1) | 字典单词 + 掩码后缀 |
| 7 | Hybrid Mask + Wordlist(混合模式2) | 掩码前缀 + 字典单词 |
| 编号 | 哈希类型 | 描述 |
|---|---|---|
| 0 | MD5 | MD5哈希算法 |
| 100 | SHA-1 | SHA-1哈希算法 |
| 1000 | NTLM | Windows NTLM哈希 |
| 3200 | bcrypt | bcrypt哈希(Linux/网站密码常用) |
| 2500 | WPA/WPA2 | WiFi WPA/WPA2握手包哈希(需hccapx文件) |
| 代码 | 包含字符 |
|---|---|
| ?l | 小写字母(a-z) |
| ?u | 大写字母(A-Z) |
| ?d | 数字(0-9) |
| ?s | 特殊字符(!@#$%^&*等) |
| ?a | 所有可打印字符(?l?u?d?s) |
| ?h | 十六进制字符(0-9, a-f) |
| ?H | 十六进制字符(0-9, A-F) |
场景:破解单个MD5哈希(哈希值:d41d8cd98f00b204e9800998ecf8427e,对应空密码),使用系统自带字典rockyou.txt。
# 命令 hashcat -a 0 -m 0 d41d8cd98f00b204e9800998ecf8427e /usr/share/wordlists/rockyou.txt -o md5_result.txt -v # 参数说明 # -a 0:字典模式 # -m 0:MD5哈希类型 # d41d8cd98f00b204e9800998ecf8427e:目标哈希 # /usr/share/wordlists/rockyou.txt:Kali自带字典(需解压:gunzip rockyou.txt.gz) # -o md5_result.txt:结果保存到md5_result.txt # -v:详细输出
结果查看:执行后打开md5_result.txt,可看到“d41d8cd98f00b204e9800998ecf8427e:”(空密码)的破解结果。
场景:破解 Windows NTLM哈希(哈希值:31d6cfe0d16ae931b73c59d7e0c089c0,对应空密码),尝试4-6位由“小写字母+数字”组成的密码,启用增量模式。
# 命令 hashcat -a 3 -m 1000 31d6cfe0d16ae931b73c59d7e0c089c0 -1 ?l?d -i --increment-min=4 --increment-max=6 ?1?1?1?1?1?1 -o ntlm_brute_result.txt -O -v # 参数说明 # -a 3:掩码暴力破解模式 # -m 1000:NTLM哈希类型 # 31d6cfe0d16ae931b73c59d7e0c089c0:目标NTLM哈希 # -1 ?l?d:自定义字符集?1为“小写字母+数字” # -i:启用增量模式(按密码长度递增尝试) # --increment-min=4:从4位密码开始尝试 # --increment-max=6:到6位密码结束尝试 # ?1?1?1?1?1?1:掩码(6个位置,每个位置使用?1字符集,增量模式下会自动匹配4-6位长度) # -o ntlm_brute_result.txt:结果保存到指定文件 # -O:启用优化内核(提升GPU破解速度) # -v:详细输出破解过程
补充说明:若已知密码格式(如首字母大写、末尾含特殊字符),可自定义多字符集组合。例如破解“1位大写字母+4位数字+1位特殊字符”的密码,命令为:hashcat -a 3 -m 0 md5_hash.txt -1 ?u -2 ?d -3 ?s ?1?2?2?2?2?3 -o custom_mask_result.txt
场景:破解SHA-1哈希(哈希值:da39a3ee5e6b4b0d3255bfef95601890afd80709,对应空密码),使用rockyou.txt字典并应用best64规则(对字典单词进行变形,如首字母大写、末尾加数字等)。
# 命令 hashcat -a 0 -m 100 da39a3ee5e6b4b0d3255bfef95601890afd80709 /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule -o sha1_rule_result.txt -v # 参数说明 # -a 0:字典模式 # -m 100:SHA-1哈希类型 # da39a3ee5e6b4b0d3255bfef95601890afd80709:目标SHA-1哈希 # /usr/share/wordlists/rockyou.txt:基础字典 # -r /usr/share/hashcat/rules/best64.rule:应用hashcat自带的best64规则(Kali默认路径) # -o sha1_rule_result.txt:结果输出文件 # -v:详细输出
规则作用:best64规则包含64种常见密码变形逻辑,例如将“test”变为“Test”“test1”“TEST”等,可大幅提升字典对复杂密码的破解成功率。
场景:破解Linux bcrypt哈希(哈希值:10$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,假设密码格式为“字典单词+2位数字后缀”),使用混合模式(字典+掩码)。
# 命令 hashcat -a 6 -m 3200 bcrypt_hash.txt /usr/share/wordlists/rockyou.txt ?d?d -o bcrypt_hybrid_result.txt -w 2 -v # 参数说明 # -a 6:混合模式(字典单词+掩码后缀) # -m 3200:bcrypt哈希类型 # bcrypt_hash.txt:存储目标bcrypt哈希的文件(每行一个哈希) # /usr/share/wordlists/rockyou.txt:基础字典(提供前缀单词) # ?d?d:掩码后缀(2位数字,匹配密码末尾的数字组合) # -w 2:中负载工作模式(平衡CPU/GPU占用与破解速度) # -o bcrypt_hybrid_result.txt:结果输出文件 # -v:详细输出
反向混合模式:若密码格式为“2位数字前缀+字典单词”,可使用-a 7(掩码前缀+字典单词),命令为:hashcat -a 7 -m 3200 bcrypt_hash.txt ?d?d /usr/share/wordlists/rockyou.txt -o bcrypt_hybrid_rev_result.txt
场景:破解WiFi WPA/WPA2握手包生成的hccapx文件(需提前用 aircrack-ng 等工具捕获握手包并转换为hccapx格式),使用字典暴力破解。
# 步骤1:确认hccapx文件有效性 file wifi_handshake.hccapx # 输出应包含“hccapx file” # 步骤2:执行破解命令 hashcat -a 0 -m 2500 wifi_handshake.hccapx /usr/share/wordlists/rockyou.txt -o wifi_result.txt --status --status-timer=10 -v # 参数说明 # -a 0:字典模式 # -m 2500:WPA/WPA2哈希类型(对应hccapx文件) # wifi_handshake.hccapx:目标WiFi握手包hccapx文件 # /usr/share/wordlists/rockyou.txt:WiFi密码字典(建议使用专用WiFi字典如wifi.txt) # -o wifi_result.txt:破解结果(包含WiFi名称、BSSID、密码) # --status:启用状态自动更新 # --status-timer=10:每10秒更新一次破解状态(进度、速度等) # -v:详细输出
结果解读:破解成功后,wifi_result.txt中会显示类似“wifi_ssid:password”的内容,直接获取WiFi密码。
场景:破解大型哈希文件(含1000个NTLM哈希),需中途暂停,后续恢复破解进度。
# 步骤1:启动带会话名的破解任务 hashcat -a 0 -m 1000 large_ntlm_hashes.txt /usr/share/wordlists/rockyou.txt -o large_ntlm_result.txt --session=ntlm_large -v # 步骤2:中途暂停破解(在另一个终端执行) hashcat --session=ntlm_large --force --quit # 或直接按Ctrl+C(hashcat会自动保存会话) # 步骤3:恢复会话 hashcat --restore --session=ntlm_large -v # 参数说明 # --session=ntlm_large:定义会话名为“ntlm_large”(用于标识和恢复任务) # --restore:从指定会话恢复破解(自动读取会话保存的进度文件) # --quit:主动暂停会话(可选,Ctrl+C更便捷)
会话文件位置:默认会话文件保存在~/.hashcat/sessions/目录下,包含破解进度、已尝试密码数量等信息。
场景:破解完成后,筛选大型哈希文件中的已破解和未破解哈希。
# 查看已破解哈希(对比哈希文件与potfile) hashcat --show -m 1000 large_ntlm_hashes.txt -o cracked_ntlm.txt # 查看未破解哈希 hashcat --left -m 1000 large_ntlm_hashes.txt -o uncracked_ntlm.txt # 参数说明 # --show:显示已破解的哈希(格式:哈希:密码) # --left:显示未破解的哈希(仅输出哈希值) # -m 1000:指定哈希类型(需与破解时一致) # cracked_ntlm.txt:已破解哈希输出文件 # uncracked_ntlm.txt:未破解哈希输出文件
potfile说明:hashcat默认将破解记录保存在~/.hashcat/hashcat.potfile中,--show和--left通过对比该文件筛选结果。
场景:测试当前设备对NTLM哈希的破解速度,选择最优硬件(CPU/GPU)。
# 步骤1:查看系统支持的硬件设备 hashcat -I # 列出所有可用的后端设备(CPU、GPU等),记录设备ID(如GPU设备ID为1) # 步骤2:对NTLM哈希进行基准测试(默认使用所有设备) hashcat -b -m 1000 -v # 步骤3:指定单个GPU设备进行测试(如设备ID=1) hashcat -b -m 1000 -d 1 -v # 参数说明 # -I:显示硬件设备信息(后端类型、设备ID、名称等) # -b:基准测试模式(测试指定哈希类型的破解速度) # -m 1000:测试NTLM哈希类型 # -d 1:指定使用设备ID=1的硬件(如独立显卡) # -v:详细输出测试结果(含每秒尝试密码数[H/s])
结果应用:根据测试结果选择速度最快的设备(通常GPU速度远高于CPU),后续破解时用-d 设备ID指定该设备。
场景:破解已知格式为“2位大写字母+4位数字+1位特殊字符”的MD5哈希,需自定义字符集组合。
# 命令 hashcat -a 3 -m 0 target_hash.txt -1 ?u -2 ?d -3 ?s ?1?1?2?2?2?2?3 -o custom_charset_result.txt -v # 参数说明 # -1 ?u:自定义字符集1为大写字母(A-Z) # -2 ?d:自定义字符集2为数字(0-9) # -3 ?s:自定义字符集3为特殊字符(!@#等) # ?1?1?2?2?2?2?3:掩码规则(2位大写+4位数字+1位特殊字符) # 其他参数同前
场景:破解包含多个不同类型哈希的文件(需提前确认所有哈希类型一致),如批量破解多个MD5哈希。
# 准备哈希文件(hashes.txt,每行一个哈希) echo "d41d8cd98f00b204e9800998ecf8427e" > hashes.txt echo "5f4dcc3b5aa765d61d8327deb882cf99" >> hashes.txt # 执行批量破解 hashcat -a 0 -m 0 hashes.txt /usr/share/wordlists/rockyou.txt -o batch_result.txt --remove # 参数说明 # --remove:破解成功后自动从原哈希文件中移除已破解项 # 其他参数同前
场景:生成100条随机规则并应用于字典破解,提升对未知密码格式的破解概率。
# 生成随机规则并保存到文件 hashcat -g 100 --generate-rules-seed 123 > custom_rules.rule # 使用自定义规则破解 hashcat -a 0 -m 1000 ntlm_hashes.txt /usr/share/wordlists/rockyou.txt -r custom_rules.rule -o custom_rule_result.txt -v # 参数说明 # -g 100:生成100条随机规则 # --generate-rules-seed 123:指定随机种子(保证规则可复现) # custom_rules.rule:自定义规则文件 # 其他参数同前
场景:多设备协同破解同一批哈希,避免重复计算(需多设备网络互通)。
# 设备1(服务器端)启动脑服务 hashcat --brain-server --brain-password mypass --session brain_session -v # 设备2(客户端)连接服务器 hashcat --brain-client --brain-host 192.168.1.100 --brain-port 13743 --brain-password mypass --session brain_session -a 0 -m 0 hashes.txt dict.txt -v # 参数说明 # --brain-server:启用脑服务器模式 # --brain-client:启用脑客户端模式 # --brain-host/--brain-port:服务器IP和端口 # --brain-password:脑服务认证密码 # 其他参数同前
适用场景:大规模哈希破解任务,多设备分工协作提升效率。
哈希类型识别:若不确定哈希类型,可先用hashid工具识别,再用-m指定类型,或让hashcat自动检测(不推荐,可能误判)。
字典准备:Kali默认字典路径为/usr/share/wordlists/,建议优先使用rockyou.txt(需解压:gunzip /usr/share/wordlists/rockyou.txt.gz)。
性能优化:GPU破解速度远高于CPU,建议安装对应显卡驱动(NVIDIA需安装CUDA,AMD需安装OpenCL);使用-O启用优化内核(限短密码)。
密码长度限制:启用优化内核(-O)时,部分哈希类型有密码长度限制(如NTLM限15位以内),长密码需禁用-O。
法律风险:仅可对授权的哈希或自己的系统进行破解,未经授权的密码破解可能违反法律法规。