简介一套面向Windows平台的密码安全检测工具包集成了开源网络口令爆破工具及其辅助程序并随包附带了所需的Cygwin运行库用户免去Linux下编译安装的繁琐过程解压后即可在命令行中对指定服务进行在线口令测试。它主要适合渗透测试工程师、安全运维人员以及正在学习口令攻击原理的初学者在获得授权的前提下用于弱口令排查、密码强度评估和网络安全审计。压缩包内包含37个txt密码字典覆盖了日常弱口令、键盘组合轨迹、历史暗网泄露样本以及多语言常用词表等内容可与工具配合对远程登录、远程桌面、文件传输和Web登录等场景开展爆破演练辅助程序还能依据长度、字符集等条件对字典进行快速过滤。同时提供了示例文件、说明文档、配置信息及完整的Git仓库结构方便用户理解工具调用方式并按需定制字典。整套资源共99个文件压缩后体积约120.9MB目录组织清晰目前已有2138人学习下载是快速搭建Windows口令测试环境的不错选择。1. 一句话说清 hydra Windows版 txt字典它到底能干什么做内网安全巡检时我发现一个反直觉的事实真正卡住进度的从来不是 hydra Windows版 这个工具本身而是 txt字典 的质量。HydraTHC-Hydra是开源网络登录口令测试工具支持 SSH、RDP、FTP、HTTP 表单、MySQL 等几十种协议Windows 版就是能在 cmd 里直接调用的可执行文件txt字典 则是每行一个口令的明文清单决定测试范围与命中率。这套组合适合安全测试工程师做弱口令基线核查、运维排查服务器历史弱账号也适合甲方回测自己的密码策略是否生效。下文按「环境准备 → 字典准备 → 命令实战 → 避坑 → 验证收尾」的顺序讲全新手照步骤能跑通熟手可以直接跳去参数细节。2. 把 hydra Windows版 跑起来文件结构、dll 依赖与命令行自检拿到解压包先别急着双击 exe这工具十有八九会闪退但并不是资源坏了而是它根本没有图形界面。先把包里的文件结构认清楚再放到一个干净的英文目录里最后用一条自检命令确认可执行文件和依赖 dll 都正常。这一章按实际项目里的上手顺序讲每一步都对应最常见的翻车点。2.1 资源包里的文件结构哪些文件是干活的先上一张文件清单照着这个核对解压包文件/目录作用说明hydra.exe主程序命令行调用不需要图形界面libeay32.dll / ssleay32.dllOpenSSL 加密依赖缺失时报 0xc000007b 或“找不到 dll”dict/字典目录内置清洗过的 txt 字典dict/rockyou_10000.txt通用密码 top 字典来自 rockyou 泄漏集前 1 万行已去重dict/weak_top500.txt弱口令字典面向 ssh / mysql / 路由器管理页dict/wifi_top.txtWiFi 常用密码本8 位数字、生日、手机尾号组合使用说明.md命令速查UTF-8 编码记事本可读hydra.exe 和那两三个 dll 必须放在同一目录否则一运行就报“由于找不到 libeay32.dll无法继续执行代码”。这里的 dll 还分 32 位和 64 位版本下载时看清说明64 位系统跑 32 位 exe 没问题反过来不行。字典目录我习惯固定叫 dict/用短路径不放进带空格或中文的路径里原因下面会讲。顺带说明一下网上流传的 hydra Windows 版大多是别人在 Cygwin 或 MSVC 下编译好的二进制依赖的 dll 版本和 exe 的编译环境强相关。如果你是从源码自己编那 dll 问题基本不存在如果直接下二进制包第一件事就是验证依赖。你手里这个包只要自检通过就能用不用再补装 Cygwin 全家桶。2.2 为什么双击闪退cmd 才是 hydra 的正确打开方式hydra 是纯控制台程序入口是命令行窗口双击 exe 会瞬间开一个黑框然后因为参数缺失退出看起来就像“工具坏了”。正确的姿势是 WinR 输入 cmd 回车进到终端里操作。另一个新手容易卡住的点是PowerShell 里运行当前目录的程序要写.\hydra.exe而 cmd 里直接写hydra.exe就行很多人把这两个环境混着用结果提示“不是内部或外部命令”。打开 cmd 后先把工作目录切过去cd /d D:\hydra dir hydra.execd /d这个参数很关键cmd 里直接cd D:\hydra不会切盘符必须带/d才会连盘符一起切。执行完看到hydra.exe列出来目录就对了。如果你习惯用 PowerShell等价写法是Set-Location D:\hydra。路径这件事上我有血泪经验。之前接手一个包对方把工具放在“C:\Users\张三\下载\hydra 工具\”下面爆破命令里的引号和空格稍有不慎就断掉排查了半天以为是命令写错最后发现是路径里的中文和空格在 cmd 里被截断了。所以工作目录一定用纯英文短路径这是 Windows 下跑命令行工具最省心的习惯不光是 hydranmap、sqlmap 这类工具都一样。2.3 先跑一条自检命令确认可执行文件和依赖都正常环境配没配好一条命令就能确认hydra.exe -h nul echo SELF_CHECK_OK-h会让 hydra 打印帮助信息并正常退出 nul把输出丢弃避免刷屏表示上一条命令成功执行后才会运行后面的 echo。看到命令行里输出SELF_CHECK_OK说明 exe 能正常加载、dll 齐全环境这一关就过了。如果弹出“找不到 libeay32.dll”之类的窗口说明依赖没放全先把包里的 dll 全部解压到与 exe 同一个目录。如果本来就在同目录还报错多半是 32/64 位不匹配换对应位数的版本即可。首次运行时 Windows 防火墙会弹窗这个是 hydra 联网正常现象只在你有权测试的机器上放行。hydra.exe -h的输出里还有一段服务模块列表比如 ssh、rdp、ftp、http-get、http-post-form、mysql、smb、pop3、imap、ldap2、snmp 等。不同编译版本支持的协议数量不一样老版本可能没有 http-post-form 模块所以开始干活前先看一眼自己的包支持哪些服务再到第 4 章挑对应的命令。提示hydra 是口令审计工具只应在你有明确授权、并且确认测试不会影响业务的前提下使用。下文所有命令建议先在本地靶机或虚拟机上跑通再进真实网段。3. txt字典 决定命中率数据源、清洗脚本与社工组合生成字典才是爆破这件事的技术含量所在。机器性能好只是跑得快但字典里没有目标习惯用的口令再快也是白忙。这一章先说数据源怎么选再给一个通用清洗脚本解决 Windows 下 BOM、换行符、空行三个经典问题最后聊一聊姓名、生日、手机号组合成小字典的生成规则。3.1 字典数据源怎么选rockyou 精简、弱口令 Top、WiFi 密码本选源原则一句话目标是什么场景就吃什么场景的字典。别指望一个通用字典覆盖所有情况。字典文件内容特征典型场景注意点rockyou_10000.txt泄漏集 top 1 万ssh、ftp、mysql 通用登录口令行数适中跑一轮速度快weak_top500.txtadmin/root/test/空密码等网络设备、数据库、tomcat 控制台行数少建议第一轮先跑它wifi_top.txt8 位数字、生日、手机号段路由器/摄像头等设备管理后台内网设备弱口令复用常见rockyou 是安全测试圈流传很广的一套泄漏口令集完整版有 1400 多万行在 Windows 的 cmd 环境下直接跑完整版不现实一是慢二是很多旧口令已经失去价值。我一般只用前 1 万行覆盖绝大多数日常弱口令场景。weak_top500 则是按服务类型整理的高频弱口令admin/admin、root/toor、test/test123 这类行数少适合第一轮快速摸底。wifi_top 这类密码本在 hydra 场景里主要不是用来破 Wi-Fi 握手包而是用于路由器管理后台、摄像头后台、打印机后台这类网络设备的弱口令核查。家用设备的管理口令往往就是 Wi-Fi 密码或者用一串 8 位数字这类口令在内网审计中命中率相当高。如果你之前习惯在 Burp Suite 里做爆破那这里的区别是hydra 的优势在于多协议支持和命令行批量执行Burp 的 Intruder 则更适合调试 HTTP 变体和动态 token 的场景两者不是替代关系是分工关系。3.2 字典清洗BOM、CRLF、空行与去重一次解决Windows 下处理字典文件最坑的就是编码问题。记事本保存的 UTF-8 其实是带 BOM 的 UTF-8会在文件开头写入三个字节的不可见字符。hydra 逐行读取时第一行密码会被这个 BOM 前缀污染表现就是“字典第一行永远失败”而且非常难排查。另外 Windows 默认换行是 CRLF某些协议模块比如 http-post-form可能把\r带进请求里也会引发莫名失败。我一般拿到任何字典都先过一遍清洗脚本把 BOM、CRLF、空行、重复行一起处理掉import io RAW dict/rockyou_raw.txt OUT dict/rockyou_clean.txt MAX_LEN 32 seen set() buf [] with io.open(RAW, r, encodingutf-8-sig, errorsignore) as fp: for line in fp: pwd line.strip() if not pwd: continue if len(pwd) MAX_LEN: continue if pwd in seen: continue seen.add(pwd) buf.append(pwd) # 只保留可打印 ASCII避免中文口令在部分协议模块里乱码 buf [x for x in buf if x.isascii()] with open(OUT, w, encodingascii, newline\n) as fp: fp.write(\n.join(buf) \n) print(in:, len(open(RAW, rb).readlines()), out:, len(buf))代码逻辑不复杂utf-8-sig编码打开时会把开头的 BOM 自动剥掉line.strip()同时处理行尾的\r\n和多余空格len MAX_LEN过滤超长口令大多数服务口令上限不会超过 32 位seen集合去重短字典跑起来也更快。最后的.isascii()过滤是我后来加上的。部分中文口令在 GBK 编码的 cmd 环境里传给某些协议模块会出现乱码而真实目标系统的口令绝大多数都是 ASCII 字符所以直接把非 ASCII 行过滤掉省得在编码上浪费时间。输出时newline\n保证在 Windows 上写入 LF 换行encodingascii避免再写回 UTF-8 时重新引入 BOM。这三步做完字典才算真正干净。这个脚本我在每次整理字典时都会强制先跑一遍已经是固定动作。3.3 组合生成姓名、生日、手机号的社交字典规则有一种场景挺常见帮自己负责维护的系统找回离职员工的账号口令对方密码大概率是姓名拼音加生日或手机号尾号。这种时候不需要去翻大字典直接按规则生成一个几十到几百行的小字典命中率反而更高。我一般用这种组合脚本import itertools names [liwei, Liwei, lw] bdays [1992, 9201, 19920101] tails [, !, 123, 123] out set() for n, b, t in itertools.product(names, bdays, tails): out.add(n b t) out.add(b n t) out.add(n.capitalize() b t) # 手机号尾号补给 for tail_num in [1314, 5678, 0000]: out.add(liwei tail_num) out.add(Liwei tail_num) with open(dict/social_liwei.txt, w, encodingascii, newline\n) as fp: fp.write(\n.join(sorted(out)) \n) print(lines:, len(out))这里用itertools.product做三层组合生成“名字全拼生日”“生日名字全拼”“首字母大写生日常见后缀”三类常见格式再补几个手机号尾号变体。set()去重后写入新文件输出同样是 LF 换行直接给 hydra 用。这类脚本的边界在于组合项越多行数增长越快。名字三四个、生日三四个、后缀四五个就已经上千行对 ssh 这类单服务目标可以接受如果是网页表单上千行配合低并发也能跑完。现实中的命中率集中在“名字全拼 生日 空后缀”这种最简单的组合上所以排序时可以把这个格式放在最前面方便中途用-f命中即停。还要强调一句这种字典只允许用在你负责维护、且已获授权的系统里用途是找回自己系统里的口令不是去试探别人的账号。4. hydra 实战命令ssh、rdp、http-post 三种典型打法与参数细节字典准备好之后hydra 命令本身反而简单。一句话总结它的结构hydra.exe [参数] 服务://目标地址。难点在于不同协议有不同的参数选型和已知坑。这一章先从一条完整命令拆开讲参数再落到 ssh、rdp、http-post 三个最常见场景。4.1 命令骨架与参数速查表先从一条完整命令看结构先看一条完整命令hydra.exe -L dict/users.txt -P dict/rockyou_clean.txt -t 16 -f -o result.txt ssh://192.168.10.20拆开看-L dict/users.txt用户名列表文件每行一个用户名如果只测单个用户用-l admin。-P dict/rockyou_clean.txt密码字典单密码用-p abc123。-t 16并发任务数。ssh、ftp 这类无状态连接可以开到 16rdp 和网页表单要调低。-f命中第一个有效口令后立即停止是保护目标账号锁定策略的重要手段。-o result.txt把命中的结果写入文件。注意它是覆盖写重复跑同一个文件会被清空。末尾ssh://192.168.10.20协议加目标地址。默认端口不用写非默认端口用-s指定比如-s 2222。参数速查表整理如下参数含义建议值/用法-l单个用户名-l admin-L用户名列表文件-L dict/users.txt-p单个密码-p abc123-P密码字典文件-P dict/rockyou_clean.txt-t并发任务数4-16按服务类型调整-f第一个命中后停止保护账号锁定策略-o结果输出文件覆盖写注意备份-s非默认端口-s 2222-w连接超时秒数默认 15网络抖动改 30-e附加测试规则nsrn空密码 s用户名同密码 r用户名反转-V显示每次尝试详情排查问题时开正常跑不开-u用户优先循环多用户小字典时避免单账号失败刷屏-e nsr是个容易被忽略的实用参数。n表示顺带试一下空密码s表示试用户名本身作为密码r表示试用户名反转后的字符串。这三类极简单口令在一些老旧设备上命中率意外地高而且不占字典行数。-u参数值得单独说。hydra 默认先换密码再换用户也就是单个用户会连续试完整个字典加-u后变成先换用户再换密码把失败尝试分散到多个账号上。对多用户名加小字典的场景-u能明显降低单一账号被锁的风险。4.2 ssh / rdp内网最常见两个场景的命令与注意事项ssh 是内网 Linux 服务器最常测的协议命令写法hydra.exe -L dict/users.txt -P dict/weak_top500.txt -t 8 -f -w 30 -o result_ssh.txt ssh://192.168.10.20对 ssh 我建议-t 8是保守值。如果目标装了 fail2ban 这类防护并发一高探测次数会触发规则导致源 IP 被封爆破直接中断。先自己nc -vz 192.168.10.20 22确认端口通再跑避免把时间浪费在连不上目标上。-w 30是把单次连接超时从默认 15 秒拉到 30 秒内网服务器负载高的时候默认超时容易把正常的慢响应误判为失败。rdp远程桌面是 Windows 内网另一个高频场景hydra.exe -l administrator -P dict/wifi_top.txt -t 4 -f -o result_rdp.txt rdp://192.168.10.30这里有个我在项目中踩过的大坑老版本 hydra 的 rdp 模块对 NLA网络级别认证支持不好目标开启 NLA 时一律报connection reset看起来像目标拒绝连接实际是协议协商失败。比较新的构建已修复但如果你的包还报这个错要么在测试环境临时关闭目标机的 NLA要么改用 FreeRDP 或 crowbar 来做这个协议的测试。rdp 爆破还有个现实问题失败登录会写 Windows 安全日志事件 ID 4625多次失败还会触发账号锁定阈值。所以-t 4已经算激进值跑之前务必和目标负责人确认账号锁定策略并约定测试时间窗口。4.3 http-post 表单爆破从抓包到拼接免误报命令网页登录框是审查里最常见的入口但也是新手踩坑重灾区。hydra 的 http-post-form 模块格式是固定的三段式路径:POST数据:失败/成功标记。先看一条真实可用的命令hydra.exe -l admin -P dict/weak_top500.txt 192.168.10.30 http-post-form /login.php:user^USER^pass^PASS^submit登录:Flogin_error三段拆开/login.php是登录接口路径user^USER^pass^PASS^submit登录是 POST 数据体其中^USER^和^PASS^是 hydra 的占位符会自动替换成当前用户名和密码最后的Flogin_error表示当响应页面里出现login_error这个字符串时判断这次登录失败。也可以用S/index.php这种成功标记表示响应里出现跳转地址就算成功。拼装 POST 数据前先打开 Chrome 开发者工具登录页面提交一次错误密码在 Network 面板里看 Form Data 的字段名这样不会漏字段。网页里的中文失败提示在 cmd 环境下编码容易出乱码建议优先用页面源码里的英文标识作为失败特征。如果登录成功会跳到新页面用S/index.php比F更可靠。http-post-form 还支持固定 Cookie比如某些页面登录前就种了PHPSESSID可以在第三段里追加CPHPSESSIDabc123这样连续请求不至于因为会话漂移而全部失败。但要注意如果页面带动态 CSRF token每次请求的 token 都不一样hydra 这个模块不支持从页面里自动提取 token这种情况就别硬磕 hydra 了老老实实写脚本或转 Burp Suite 处理。5. 避坑实录hydra 在 Windows 上最常见的五个翻车点前面各章其实已经埋了不少坑这一章把我在实际项目里踩过的五个大坑集中说一下。每一条都按「现象 → 原因 → 解决」的顺序写这些都是能在现场浪费半小时到一整天的典型问题。5.1 双击闪退 / dll 缺失依赖文件没跟上现象下载解压后双击 hydra.exe窗口一闪就没了在 cmd 里运行提示“由于找不到 libeay32.dll无法继续执行代码”或者直接报0xc000007b错误。原因hydra 是控制台程序双击本来就无法运行而报 dll 错说明 OpenSSL 依赖缺失或者 exe 与 dll 的 32/64 位不一致又或者是系统缺少 VC 运行库。解决先把包内全部 dll 解压到与 hydra.exe 相同的目录再确认下载的包是 32 位还是 64 位版本与当前系统匹配0xc000007b时先装一遍 VC 2015-2022 运行库这是 Windows 命令行工具最常见的基础依赖。装完重新跑第 2 章的自检命令看到SELF_CHECK_OK才算过。5.2 字典第一行永远失败UTF-8 BOM 的锅现象日志里第一次尝试的口令肉眼看上去完全正确但服务端总是返回失败从第二行开始一切正常。这个现象非常迷惑我排查了半个多小时才定位到编码上。原因Windows 记事本保存的 UTF-8 是带 BOM 的文件开头被写入三个字节不可见字符。hydra 读第一行时把这几个字节拼到了密码前面实际发送给服务端的口令是“不可见字符 密码”当然失败。解决用第 3 章的清洗脚本统一过一遍utf-8-sig会把 BOM 剥掉如果手头没有脚本用 VSCode 打开字典看右下角编码是不是“UTF-8 with BOM”另存为纯 UTF-8 或 ASCII 就行。从那以后每拿到新字典第一件事就是确认第一行口令是否干净。5.3 并发开满导致账号锁定审计变事故现象-t 32跑起来非常快但不到两分钟目标账号被锁定业务人员反馈用户登录不了系统好好的口令审计变成了故障处理。原因不了解目标的账号锁定策略。Windows 域账户默认可能只允许几次失败尝试RDP 爆破一次密集攻击就会触发锁定ssh 虽然通常不锁账号但 fail2ban 会锁来源 IP。解决跑之前先问清楚目标系统的账号锁定阈值和锁定时长-t控制在 4-8不要盲目拉高加上-f命中即停多用户名场景用-u把失败尝试分散到不同账号。RDP 场景尤其要克制Windows 安全日志里 4625 事件会一条条记录失败尝试真把账号锁了后续写审计报告都不好交代。5.4 杀毒软件把 hydra.exe 隔离下载源与白名单现象解压时杀毒软件直接弹窗hydra.exe 被隔离或删除找回来的文件也还是被反复标记。原因hydra 的登录口令爆破功能在特征库里基本都归为风险程序各家的杀软和 Windows Defender 对它都比较敏感这并不代表文件一定是恶意的但也不能排除下载源被人动过手脚。解决确认下载来源可靠后把整个工作目录加进杀毒软件的白名单/排除项下载时对照发布方提供的哈希值校验文件完整性只在你有授权测试权限、且不会影响他人机器的环境里运行。Windows Defender 的排除路径设置里把 D:\hydra 加进去即可别为了省事关闭实时防护。5.5 跑完了输出文件是空的-f 与 -o 的组合问题现象hydra 跑完一轮result.txt文件存在但里面什么都没有以为命令写错了。原因-o只把命中的口令写入文件字典全部没命中自然为空如果加了-f但一直没命中提前结束时同样不会写入。另外 cmd 当前工作目录不对时结果会写到别的路径下看起来也是“文件为空”。解决第一轮先不加-f跑完看屏幕上的统计输出确定有命中再谈停止检查当前工作目录是否正确如果还是空把完整输出重定向到日志文件再排查hydra.exe -L dict/users.txt -P dict/rockyou_clean.txt -t 8 ssh://192.168.10.20 run.log 21 run.log把标准输出写到文件21把错误输出也一起合并进去。跑完用记事本打开 run.log看最后几行的统计摘要就能确认是零命中还是命令写错。6. 收尾进阶双字典接力、命中结果复查与一个固化习惯最后一章讲两个实战中很实用的技巧双字典接力跑法和命中结果的二次验证都会直接影响审计效率与报告质量。6.1 双字典接力跑法先弱口令后通用字典不要拿一整套大字典一口气跑完。我的标准做法是分两批第一批跑weak_top500.txt低并发、命中即停第二批针对第一批零命中的目标换rockyou_clean.txt继续。理由很简单弱口令的命中率在统计上明显高于通用字典而且先跑小字典能把高风险账号快速暴露出来后续测试也有了时间窗口。耗时估算也值得提前做。粗略公式是目标数 × 字典行数 / 并发数 × 单次连接耗时。比如 300 台目标、500 行字典、-t 8、单次连接约 0.3 秒算出来约 5600 秒一个半小时。把预期告诉甲方或自己心里有数比闷头跑然后被催要有用得多。hydra 不支持断点续跑所以分批小字典还有个好处跑完一批就能存档一批不会因为中断丢掉全部进度。6.2 命中结果二次验证别把误报写进审计报告hydra 报命中我的习惯是不直接信先二次验证再写入报告。原因是它的“命中”基于服务端的响应判断在超时抖动、HTTP 302 跳转、页面动态验证码等场景下都可能产生误报。ssh 命中用 Python 的 paramiko 快速验证import paramiko try: ssh paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(192.168.10.20, port22, usernameroot, passwordabc123, timeout5) ssh.exec_command(id) ssh.close() print(real ok) except Exception as e: print(false positive:, e)逻辑很简单set_missing_host_key_policy接受陌生主机密钥connect用 hydra 报出的用户名密码实际建立一次连接能执行命令就判定命中。RDP 没有通用的 Python 库我一般用 FreeRDP 的命令行在本地实际建立会话来做验证。复查通过的口令再整理成 CSV用户名、服务、目标地址、口令、验证时间这份数据才是审计报告里能拿得出手的内容。从那以后我每次做口令审计都会强制走这一遍流程字典先清洗、并发按服务克制、命中结果全部二次验证跑完再把确认过的口令归档。这套习惯帮我挡掉了不少误报也避免了几次账号锁定的尴尬。如果你也在 Windows 上做口令审计这套「hydra Windows版 清洗过的 txt字典」可以直接拿去用省下重新整理字典和踩 dll 坑的时间希望帮到你。本文还有配套的精品资源点击获取