简介:专为Windows环境整合的Hydra工具包,同时附带了覆盖面较广的密码字典集,适合安全测试人员及渗透测试初学者用于口令强度验证与暴力破解演练。免去在Windows上自行编译Hydra的繁琐步骤,解压后即可配合常见服务做登录口令测试。资源共99个文件、约120.9MB,核心包含hydra.exe及所需运行库与dll文件,保证工具可正常启动;另有37个txt字典,涵盖常见弱口令、暗网泄露密码、不同语言高频词表等,并附带sample示例和说明文档,便于理解各类字典的使用场景与格式。整个压缩包目录结构清晰,字典分类较细,既能作为日常测试工具,也能作为研究口令规律、构建自用字典的参考素材。字典命名规范清晰,便于按目标类型快速选用,对理解不同口令生成思路也有帮助。目前已有2138人学习下载,对快速搭建Windows口令测试环境具有实用价值。
1. Hydra Windows版配txt字典:弱口令基线检查的第一板斧
年底做内网授权排查,运维丢过来一份资产清单,三百多台Windows服务器,统一开着3389和22端口。管理员口令疑似在“Admin@123”这个强度区间,手工试一台要半分钟,三百台试完人也就废了。这种场景下,Hydra Windows版配一份txt字典就是最直接的解法:Hydra负责猜,字典负责给猜的素材,一条命令能同时扫一个网段的RDP和SSH,几分钟出报告。Hydra不是某个新出的AI工具,它是一款开源在线口令测试工具,在安全圈用了十几年,支持SSH、RDP、FTP、HTTP表单等几十种协议;配合txt字典,就是把“用户名+密码”的候选组合批量发到目标服务上验证。适合三类人:做等保自查的运维、做内网授权测试的安全工程师、以及需要批量找回老旧设备口令的驻场人员。前提就一条——目标是你自己的资产,或者你有书面授权。
2. 在Windows上把Hydra跑起来:三条路线与最小验证
Hydra官方主打Linux环境,Windows下没有官方一键安装包,但从业者早就摸出了三条可靠路线:直接找第三方编译好的Windows版、用Cygwin自己编一份、以及用WSL跑Linux原生版本。三条路各有取舍,我在Windows 10/11上反复折腾过,先把结论说清楚:只是想快速出活,优先用预编译Windows版;想要最新协议模块和稳定输出,走Cygwin编译;机器上已经装了WSL,那直接用WSL最省心。
2.1 先找预编译Windows版:最快但要看准模块
GitHub上搜“hydra win64”能找到不少第三方构建的zip包,解压后直接得到hydra.exe。这类包的优点是开箱即用,缺点是版本可能滞后,而且部分协议模块(比如http-post-form、rdp)可能没编进去。我的习惯是拿到压缩包先解压到C:\tools\hydra,然后在PowerShell里执行:
cd C:\tools\hydra .\hydra.exe -h | Select-Object -First 30跑通的标志是输出里列出hydra [options]的用法说明。这一步能同时确认两件事:exe能在当前系统跑起来,以及编译进去的模块有哪些。看输出的后段,会有一个类似Available services的列表,SSH、FTP、RDP这些常见协议必须在列表里;如果列表里没有你要测的服务,说明这个包没编译对应模块,换一个包或者走Cygwin方案。
提示:第三方Windows版容易被杀毒软件拦。不是病毒,是Hydra的行为特征太明显——高并发尝试登录,和木马的爆破行为撞了。把解压目录加入杀毒软件白名单再跑,否则可能跑到一半进程被杀。
2.2 用Cygwin从源码编译:一次配置,长期不慌
如果你要测的协议比较冷门,比如SMB、SNMP、Oracle,预编译包大概率不全,这时候Cygwin自编译是正路。先装Cygwin,在安装器里勾选gcc-core、make、libssl-devel、zlib-devel、libssh-devel这几个包,然后下载Hydra源码包解压,在Cygwin终端里执行:
cd /cygdrive/c/tools/hydra-src ./configure --prefix=/usr/local make make installconfigure会检查本机有哪些开发库,并据此决定编译哪些协议模块。比如你装了libssh-devel,SSH模块就会编进去;没装,SSH模块就不在最终的hydra.exe里。所以编译前想清楚自己需要哪些协议,缺哪个库就回Cygwin安装器补装。make过程一般三五分钟,报红多半是缺某个-devel包,看提示补装再重跑。
编译完的hydra.exe在源码目录的hydra.exe路径下,或者通过make install装进了Cygwin的/usr/local/bin。这个exe依赖Cygwin的cygwin1.dll等运行库,所以要么在Cygwin终端里用,要么把Cygwin的bin目录加进Windows的PATH。我一般直接在Cygwin终端里跑,省得折腾DLL。
2.3 最小验证:在本地起一个测试服务跑通全流程
装完不能直接拿去扫内网,先拿本地服务验证一遍,确认Hydra真的在工作。Windows 10/11自带OpenSSH Server,在PowerShell(管理员)里执行:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 Start-Service sshd Set-Service -Name sshd -StartupType Automatic然后用一行最简单的命令验证Hydra。新建两个txt文件:users.txt里写一个已知用户名,pass.txt里写上正确的密码和两个错误密码,执行:
hydra -L users.txt -P pass.txt -t 1 -W 5 ssh://127.0.0.1其中-L指定用户名字典文件,-P指定密码字典txt文件,-t 1是单线程,-W 5是每次连接尝试的等待超时为5秒。跑完看到输出的最后一行有1 valid password found,说明Hydra工作正常,字典和参数都通了。如果本地没有SSH服务,也可以临时用python -m http.server起一个HTTP服务,再用http-head模块测,但HTTP模块只能验证服务通不通,验证完整口令猜测还是SSH最直观。
3. 造一份能用的txt字典:生成、去重与编码三步走
Hydra本身不带密码生成器,它的输入全靠txt字典。很多人下了一个几十G的泄露字典就往Hydra里扔,结果半小时跑不完一个IP,还把自己机器的内存吃满。字典不是越大越好,而是要贴合目标的密码习惯。做字典就三步:定规则、生成候选集、清洗格式。这三步走完,一份几千行的txt字典就能覆盖大部分真实场景。
3.1 先想清楚目标格式:密码习惯决定字典结构
先问自己三个问题:目标是员工账号还是设备账号?管理员口令通常是什么复杂度?有没有默认密码或初始密码规则?比如目标是一台老旧的路由器或交换机,密码大概率是admin、123456、admin@123这类;目标是域内Windows管理员,密码可能是Company2023!、Company@2024这类“公司名+年份+符号”的组合。不同目标,字典结构完全不同。
没有头绪时,我一般会先收集目标的口令策略:登录界面有没有长度和复杂度提示,历史工单里有没有密码重置记录,供应商默认密码表是什么。这些信息能大幅缩小字典范围。比如某品牌摄像头默认密码是admin加空密码或12345,那就没必要把几千行的社工库整个丢进去。先小后大,先用最常见的几十条跑一遍,没中再上大字典。
3.2 用脚本生成规则字典:Python按规则批量产出
手工写字典不现实,按规则用脚本生成才是正路。最常见的规则是“弱口令+年份+特殊符号”组合,直接看Python脚本:
# gen_dict.py import itertools base_words = ["admin", "password", "Admin", "P@ssw0rd", "company", "root", "test", "qwer1234"] years = ["2020", "2021", "2022", "2023", "2024"] symbols = ["!", "@", "#", "$", ""] output = set() # 基础词直接收录 for w in base_words: output.add(w) output.add(w + "123") # 基础词+年份+符号,覆盖大部分“定期换密码”的习惯 for w, y, s in itertools.product(base_words, years, symbols): output.add(f"{w}{y}{s}") output.add(f"{w.capitalize()}{y}{s}") # 公司名+年份+特殊符号,单独加一批 company = "Acme" for w in ["Admin", "admin", "p@ss", "Pass"]: for y in years: for s in ["!", "@", "#"]: output.add(f"{company}{w}{y}{s}") with open("pass.txt", "w", encoding="utf-8", newline="\n") as f: for p in sorted(output): f.write(p + "\n") print(f"generated {len(output)} candidates")这个脚本的核心是全排列组合:itertools.product把基础词、年份、符号三个列表做笛卡尔积,产出所有排列。set()自动去重,避免同一个密码被生成多次。最后的sorted(output)让字典按字母序排列,方便和之前的记录对比。newline="\n"是关键,强制写Unix换行,避免Windows下写成\r\n。
跑python gen_dict.py后生成pass.txt。这份字典量级在几百到几千行,完全够第一轮筛查用。更复杂的生成工具还有crunch和hashcat的规则引擎,但对Windows用户来说,Python脚本最直观,也好维护。
3.3 编码与换行:Windows下最容易翻车的地方
txt字典在Windows下最常见的两个坑:编码不是UTF-8、换行是CRLF。
先说编码。Hydra在Windows下读字典,按UTF-8解析是常态。如果你用记事本另存为默认的ANSI编码,密码里一旦有中文或特殊符号,Hydra读出来就是乱码,匹配必然失败。正确的做法是用PowerShell转码:
$content = Get-Content -Path pass_raw.txt -Encoding UTF8 $content | Set-Content -Path pass.txt -Encoding UTF8 -NoNewline注意-NoNewline是避免写入多余的换行符。更保险的做法是直接用VS Code或Notepad++打开字典文件,右下角显示UTF-8就对了,显示ANSI就点一下切换成UTF-8再保存。
再说换行。Linux工具读Windows的\r\n换行通常没问题,但反过来——Hydra在Windows下读某个上游生成的字典文件时,可能把\r当成密码内容的一部分,导致每个密码末尾都带一个不可见字符,全部匹配失败。处理方式是在生成脚本里统一newline="\n",或者用PowerShell清洗:
$raw = [System.IO.File]::ReadAllText("C:\dict\pass.txt") $raw = $raw -replace "`r`n", "`n" [System.IO.File]::WriteAllText("C:\dict\pass.txt", $raw)这一行替换把所有的\r\n改成\n,属于清理脏数据。检查字典有没有问题,最快的方法:用Notepad++打开,点“查看→显示符号→显示所有字符”,如果行尾是CR LF或只有LF,一目了然。另外字典去重也值得做。几份字典拼一起时,用PowerShell的Sort-Object -Unique去一下重,既能减少重复尝试,也能把文件体积压小。
4. Hydra核心参数拆解:从一条命令到一组有效命令
字典准备好了,接下来是把Hydra用对。很多人把Hydra当“双击就出结果”的工具,实际不是。Hydra的命令行参数多,组合方式直接影响命中率和测试时长。我按日常使用频率把参数拆成三类:必带参数、按协议调整的参数、输出控制参数。先记住一条原则——先在单目标上小规模验证,再扩大到网段。一上来就扫整个C段,遇上有防护的目标,IP被封锁不说,还容易把线上业务打崩。
4.1 必带参数:L、P、线程与超时
最基础的一条命令,测试单台Linux服务器的SSH弱口令:
hydra -L users.txt -P pass.txt -t 4 -W 10 -f -o result.txt ssh://192.168.1.25参数拆开看:
-L指定用户名字典文件,-l指定单个用户名。有明确的用户名用-l admin,不确定就-L users.txt批量试。-P指定密码字典txt文件,-p指定单个密码。-t 4是并发连接数,同时开4个连接尝试登录。注意这不是“线程数”,是“连接数”。设太高会导致目标服务连接耗尽或触发锁定。保守值2~4,内网无防护时可以到8。-W 10是等待超时,单位秒。网络差的场景要调大,比如跨公网测试设20~30,避免慢速服务还没响应就被误判失败。-f是找到第一组有效口令后立即停止。这个参数在批量测密码时能省大量时间,前提是你只需要“有没有漏洞”这个结论。-o result.txt把结果写入文件。千万别省这个参数,屏幕输出的内容滚过去就没了,写文件才能留证据。
跑完看输出里有没有[22][ssh] host: 192.168.1.25 login: root password: Admin@2023这样的行,有就是命中了。result.txt里也会记录同样的内容。
4.2 按协议选参数:从SSH到HTTPS表单
不同协议需要调的参数差异很大。测RDP(远程桌面)时,Hydra的rdp模块对连接协商要求高,线程必须调低:
hydra -L users.txt -P pass.txt -t 1 -W 15 -o rdp_result.txt rdp://192.168.1.30RDP的-t只能设1,因为RDP协议每次连接握手开销大,并发高了自己这边先报错Connection refused。这不是目标拒绝,是你的机器或目标机器扛不住并发。同理,测Windows自带的SMB协议时,-t建议2~4,并且要用-m指定SMB版本,比如-m smb2,否则可能走SMB1协议被目标直接拒绝。
HTTP表单登录是最常用也最容易写错参数的场景。Hydra对这类目标用http-post-form模块,需要在命令行里写清“URL + POST数据 + 失败标记”三段:
hydra -l admin -P pass.txt 192.168.1.40 http-post-form "/login.php:username=^USER^&password=^PASS^&submit=Login:error=incorrect"三段用冒号隔开:/login.php是登录接口路径;username=^USER^&password=^PASS^是POST体,^USER^和^PASS^是占位符,Hydra会把当前尝试的用户名和密码替换进去;第三个字段error=incorrect是失败标记——只要响应页面里包含incorrect这个词,就判定本次尝试失败,否则判定成功。这个标记要先去浏览器里抓包确认,很多登录接口失败时返回用户名或密码错误,那标记就要写成F=用户名或密码错误。标记写错,结果全反:密码对的判定成失败,密码错的判定成成功。
4.3 输出与恢复:不要只盯着屏幕
实战中字典一大,任务要跑很久,中间还可能断。Hydra提供了两个不要浪费的参数:-R和-S。
-R是恢复上一次中断的任务。比如你跑了两个小时断网了,重新执行同样的命令但把-R加在最前面,Hydra会读取之前的状态文件,从中断处继续,而不是从头开始。
hydra -R -L users.txt -P pass.txt ssh://192.168.1.25注意-R要求之前的命令里有-o参数,因为Hydra是把结果写入文件时同步记录进度的。另一个参数-S是走SSL/TLS加密连接,测https://目标时,协议前缀写成https-get或https-post-form,不需要额外加-S。只有当你用-s指定了自定义端口,比如SSH跑在2222端口,又需要走TLS时,才考虑-S的作用。
日志这块,除了-o写完整结果,Hydra还支持-b指定输出格式,比如-b json输出JSON格式的结果文件,方便后续脚本分析。虽然Hydra输出JSON的可读性一般,但在批量扫描后做数据汇总时比纯文本友好得多。
5. 避坑与排查:Hydra在Windows下的5个常见问题
Hydra用起来不难,真正让人翻车的是环境细节。下面五条踩坑记录,每一条都是我或同行在Windows上实打实遇到过的问题,按“现象→原因→解决”写清楚,你可以直接对照排查。
5.1 杀毒软件把hydra.exe直接删除
现象:解压好的hydra.exe过一会儿不见了,或者双击就弹窗提示威胁已处理。在装有企业版杀毒软件的目标机器上(注意是跑Hydra的本机),甚至刚解压就被隔离。
原因:Hydra的行为特征——批量用户名枚举、高频登录尝试——与恶意爆破程序高度相似,杀毒软件按“行为启发式”判定为黑客工具,直接处置。
解决:把Hydra解压目录加入杀毒软件白名单或排除列表。Windows Defender在“病毒和威胁防护→管理设置→排除项→添加排除项”里加文件夹。跑Hydra的机器最好是一个专用的虚拟机或测试机,装什么软件自己说了算,而不是在客户的办公机上现场解压。另外报毒的往往是预编译第三方包,Cygwin自编译的版本报毒率相对低一些,因为行为特征被拆散到Cygwin运行环境里。
5.2 字典文件有UTF-8 BOM头导致第一个密码永远失败
现象:pass.txt里第一个密码明明是对的,Hydra却一直报失败,从第二个密码开始恢复正常。
原因:用带BOM的UTF-8保存字典,BOM头(EF BB BF)被Hydra当成密码内容的一部分,拼成了\ufeffAdmin,和真实密码不匹配。
解决:用Notepad++打开字典文件,菜单“编码→转为UTF-8编码(无BOM)”,保存。批量处理可以用PowerShell:
$p = "C:\dict\pass.txt" $content = [System.IO.File]::ReadAllText($p) $utf8NoBom = New-Object System.Text.UTF8Encoding($false) [System.IO.File]::WriteAllText($p, $content, $utf8NoBom)UTF8Encoding($false)就是无BOM的UTF-8编码,参数$false表示不写入BOM。这算是最坑的一条,因为前几十遍都不容易发现,只能靠小字典单步调试才能定位。
5.3 线程数设高反而把目标账号锁了
现象:跑着跑着,Hydra输出的状态从waiting for children变成大片connection refused,手工用正确的密码登录也被提示账号锁定。
原因:目标服务设定了失败次数锁定策略。比如Windows SSH连续失败5次锁定30分钟,Hydra默认并发高,一分钟内就对同一个账号试了十几次,直接触发锁定。
解决:调低并发并把每个账号的尝试次数分散。具体做法是-t 2限制并发,-W 20拉长等待,让每次尝试间隔拉长;同时准备多份字典,按用户分片,避免同一个账号短时间内被大量尝试。还有一个实用技巧:用-F替代-f——-F表示“在找到任意一组有效口令后停止”并且“发现目标账号已锁定则跳过这个账号”,防止把时间耗在锁定的账号上。锁定的账号在命中的那一刻已经失去意义,先记录再后续处理。
5.4 跑完结果文件是空的,但屏幕上有输出
现象:命令回车后屏幕滚了一堆测试结果,明显有命中提示,但-o指定的result.txt打开是空的。
原因:Hydra的输出缓冲是行缓冲,结果文件写入有延迟;如果命令中断(比如Ctrl+C或杀毒弹窗),缓冲区的数据来不及落盘就丢了。另一个常见原因是路径问题,-o .\result.txt写到了当前工作目录,但Hydra的实际工作目录和终端显示的目录不一致。
解决:用绝对路径指定输出文件,并在命令前加-v显示详细输出,确保任务完整结束再关闭终端:
hydra -L users.txt -P pass.txt -o C:\logs\hydra_result.txt -v ssh://192.168.1.25-v会逐条显示尝试的用户名和密码组合,虽然刷屏,但能实时确认Hydra在工作而不是卡死。结果文件路径用绝对路径C:\logs\...,避免“当前目录”的歧义。如果任务中断,补一条-R恢复续跑,让缓冲区有机会最终落盘。
5.5 编译版缺少特定协议模块
现象:命令里写了rdp://192.168.1.30,Hydra直接报service rdp not available,或者invalid service。但其他协议比如SSH、FTP都能正常测。
原因:预编译Windows版本没编译RDP模块。RDP模块依赖libssh或freerdp库,第三方打包者通常不会把体积大、编译复杂的模块全编进去。
解决:两条路——第一,换一个包含更多模块的预编译包,GitHub上有人专门编“全功能版”,描述里会列明包含哪些服务模块;第二,回到第2章的Cygwin方案,自己装libfreerdp-devel再编译。安装Cygwin包时搜freerdp,勾选所有freerdp相关的-devel包,重新执行./configure && make。判断当前hydra.exe支持哪些协议,最快的命令是:
hydra -h 2>&1 | findstr /i "rdp ssh ftp smb"输出里列出了对应协议名就说明模块在,没列出就换方案。注意hydra -h的帮助文本里,协议列表在输出的后半部分,Windows的findstr直接过滤关键词就行。这条之前也提过,但值得再强调一次:装完先查模块列表,不要等命令跑起来才意识到缺模块。
6. 让Hydra从“能跑”到“跑得聪明”:提速、断点与结果清洗
掌握了前面的基础用法和避坑方法,Hydra已经能干活了。但真正实战中,几千条字典、几十台目标机器,跑完一次要几小时。这时做三件事能让效率翻倍:并发任务拆分、断点恢复、以及结果按协议分类清洗。
第一招是拆任务。假设你有100台主机、5000条密码,如果只跑一条命令,可能要跑一整晚。把主机列表拆成4份,每份25台,分别开4个终端跑4条Hydra命令,总时间直接缩短到四分之一。拆分时要注意:每份的任务配-t 2而不是-t 8,因为4个任务并发,每个任务2个连接,总连接数就是8,和目标服务的压力控制和单条命令-t 8是一样的。
第二招是善用-R断点恢复。加了-o的Hydra任务,如果网络断了或者你手动停了,重新执行命令时在开头加-R,它会从上一次记录的进度继续,而不是从头再来。这个参数在跑超大字典时是后悔药,我见过有人跑了一半发现字典路径写错了,改完字典路径用-R续跑,省了重跑一遍的时间。
第三招是结果清洗。Hydra的输出文件里既有命中的账号密码,也有因为服务不可达产生的报错行。跑完之后用PowerShell过滤出真正有用的命中行:
Get-Content C:\logs\hydra_result.txt | Where-Object { $_ -match "login:" }login:是Hydra命中时的固定输出标记,这一行过滤之后只剩有效结果。再配合-b json输出结构化结果,可以直接喂给运维工单系统或Excel做后续整改。
最后说一个个人习惯:跑完一轮,把命中的密码统一记录到“该改密码”清单里,而不是留在自己的字典中继续复用。因为测试环境下弱口令被确认后,再拿它当字典素材去测其他系统,可能会对真实业务系统造成意外影响。我自己就有过一次:拿同一份字典顺路测了一个内部论坛,结果那个论坛的账号密码和域账号是同一个,差点把管理员账号锁死。从那以后,每轮测试结束,我都把命中的密码从字典txt里挑出来单独存,避免二次污染。
这个方案到底值不值得投入?如果你的日常工作里涉及“批量验证弱口令”“自查内网账号风险”这类需求,Hydra配自定义字典就是投入最小、见效最快的组合。Windows版虽然不如Linux下顺手,但按本文的路子装好、测试通、留下几份精心维护的txt字典,之后每次巡检都是复用的事。希望这篇笔记能帮你少踩几个坑,把时间花在真正需要修的问题上。
本文还有配套的精品资源,点击获取