
简介这是基于Python开发的WebCrack v2.1后台弱口令与万能密码批量检测工具源码包面向安全测试人员、渗透学习者以及需要评估Web管理后台安全性的开发者。工具采用多重判断机制降低误报支持随机UA、X-Forwarded-For和Client-IP伪装能够根据目标域名动态生成字典同时检测万能密码漏洞并允许自定义爆破规则2.1版本还修复了目标为IP地址时字典生成失败的问题核心逻辑经过重构解耦全局参数可在配置文件内调整。压缩包内共有13个文件以8个Python源码文件为主体辅以2个txt配置/字典文件、1个说明文档和1个示例图片整体容量仅113KB结构清晰地划分出核心检测、字典生成、请求头伪装、参数配置、解析与日志等模块便于阅读和二次开发。目前已有1601人学习下载适合具备一定Python基础、希望研究后台认证安全检测原理或开展授权测试的读者直接使用。1. WebCrack是什么web后台弱口令批量检测到底在做什么企业运维手里管着几十个web后台总有那么几个后台用的是 admin/admin 或者 admin/123456。WebCrack 就是干这个的把后台地址批量导进去自动识别登录页面、自动跑弱口令字典最后输出一份报告告诉你哪些后台靠弱口令能登进去。它解决的不是单点爆破而是规模化的自动化检测——几十个地址一次跑完省去手工登录试密码的时间。对于等保自查、上线前安全测试和日常巡检来说这是成本最低也最直接的一项投入。要强调一点工具本身没有立场使用边界在检测者手里必须是对自己有授权的系统做检测拿它扫别人的资产属于另一码事后果自己担。2. 弱口令与万能密码的自动化检测原理先看懂工具在猜什么WebCrack 不是拿字典往登录接口上硬砸它的执行路径是“识别登录页、解析表单、构造请求、判定结果”。这四个环节里任何一环出错产出的报告都只能当废纸。先花几分钟把原理对齐后面调参数和排查才不会乱猜。2.1 后台登录识别的三个难点第一个难点是表单字段名不统一。同一个企业里OA 后台的用户名框叫 userCode财务系统的叫 account监控平台的叫 loginName字段名完全看开发当时的心情。工具要做的是在 HTML 里找typetext和typepassword的输入框再看表单的 action 指向哪个接口。常见做法是根据 name 属性里的关键字去猜user、name、account、login 都算候选猜不中的地方就需要人工在配置文件里补字段映射。这也是为什么很多同类工具会单独提供一个 config 文件而不是把所有逻辑写死在代码里。第二个难点是登录提交方式。老系统多是表单同步提交服务端直接返回新页面新系统基本都是 AJAX 提交登录接口返回 JSON比如{code:0,msg:ok}。工具对这两种场景要分别处理否则拿到的是登录页的 HTML 而不是接口结果后续判定全乱。WebCrack 的做法是先做一次预请求拿到登录页源码后分析表单属性和潜在的接口地址再决定用 GET 还是 POST、要不要带 Content-Type。第三个难点是验证码。图形验证码、滑块、短信二次校验任何一道都会打断自动化流程。WebCrack 的常见处理办法是把验证码识别做成可插拔模块有打码平台接口的对接平台没有的用 OCR 跑一遍识别不了就跳过该地址并记录原因。这里有个现实问题客户环境里对接外部打码平台往往不合规我一般建议在授权范围内优先选没有验证码的测试入口或者协调开发把验证码暂时关掉测完再开回来。2.2 弱口令命中与万能密码为什么真实存在很多人觉得弱口令是低端漏洞不值得花力气检测但实际资产盘点做下来弱口令始终是占比最高的登录类风险。原因不在技术在管理。新系统上线时厂商默认给一个 admin/admin项目交接时文档里写着“初始密码请首次登录后修改”但真正首次登录的人可能就是接手运维他登录进去办完事就忘了改。还有一些是开发自留的调试账号密码类似 Admin123、test123456这些账号往往不在运维的资产清单里却在后台真实存在。WebCrack 这类工具把这部分口令收进字典本质上是在模拟一个攻击者的低水平尝试反而能把这些管理漏洞翻出来。再说“万能密码”这个词。它不是一个密码而是一组在特定历史系统里真实存在过的后门口令。早些年一些国产 CMS 和硬件设备的管理后台厂商出于远程维护需要会在代码里留一个独立于用户体系的维护账号口令通常是固定的不随管理员修改密码而变化。后来这些后门被公开新版本固件陆续关闭但存量系统里仍然可能残留。WebCrack 把这类口令单列成一个类别目的不是教人利用而是帮授权检测方确认自己管辖的后台是否还开着这样的口子。实测下来老版本设备、未更新的 OA 系统里仍然偶有命中但比例逐年下降。2.3 批量检测怎么判定“是否进去了”状态码、跳转与响应长度工具跑完一组账号密码后必须回答一个问题这次登录到底成没成。判断依据一般有三个维度。第一个是 HTTP 状态码。登录失败时服务端往往返回 200 并停留在登录页登录成功则可能是 302 跳转到首页或工作台。但状态码不能单独用很多系统即使登录失败也返回 302因为它在 session 里记了错误次数再跳回去。第二个是响应头里的 Set-Cookie 和跳转目标。登录成功后通常会下发新的会话 Cookie跳转 URL 也会指向 dashboard、index、home 这类路径。WebCrack 会把跳转目标里的关键词纳入评分。第三个是响应体长度。登录成功后的页面内容量和登录页差异很大体长变化超过一定比例就认为是成功。这个维度在纯页面跳转的老系统里很准但碰到页面里带随机 token、动态时间戳的场景就会失真后面避坑章会专门讲。实际工程里工具会把这三个维度做加权满足两个及以上条件才标记为命中而不是单看一个指标。理解这一点很重要它直接决定了你后面调参的思路。3. 用WebCrack跑通一次自动化检测后台地址导入到报告输出全流程这章直接进入实操。按下面步骤走你可以在半小时内对一批后台地址完成第一轮弱口令检测。3.1 准备环境与启动WebCrack 是命令行工具依赖 Python 3。安装依赖之前先确认本机 Python 版本太老的版本会遇到 TLS 证书报错。项目代码拿到手之后按常规流程安装依赖并验证帮助信息能否正常输出# 拉取代码地址以你实际获取到项目的地方为准 git clone WebCrack仓库地址 cd WebCrack # 安装依赖 pip install -r requirements.txt # 验证程序能正常启动 python WebCrack.py --help这里解释一下requirements.txt 里主要是 requests、beautifulsoup4 这类 HTTP 请求和页面解析库工具的核心逻辑不算复杂依赖也不重。--help能正常打印参数说明就说明环境和依赖没问题可以进入下一步。如果你在 Windows 上跑建议用 PowerShell 或 CMD路径带空格时记得加引号。3.2 后台地址清单的格式工具要检测的目标从文件读取常见要求是每行一个完整 URL带协议、带端口、带登录页路径。新建一个urls.txthttp://192.168.10.21/admin/login.php https://oa.example.com:8443/login http://10.0.0.18:8080/system/login http://192.168.10.35:7001/console/login格式有几个细节要注意。第一不要把整个站点首页丢进去比如http://192.168.10.21/工具会顺着首页找登录链接能找到但效率低不如直接给登录页路径。第二HTTP 和 HTTPS 不能混错端口暴露在 URL 里就必须写全。第三地址清单里不要有空行和注释解析器遇到非 URL 内容可能直接跳过排查时反而费劲。3.3 跑通一次最小检测命令与参数地址清单准备好之后再准备一个字典文件就能跑了。这里先用一个最小规模的字典演示比如dict.txt里放几行常见的弱口令候选admin admin admin 123456 admin admin888 test test123然后执行python WebCrack.py -f urls.txt -d dict.txt -t 5 --timeout 10 -o report.csv参数含义拆开说。-f指定目标地址文件就是刚才的urls.txt。-d指定弱口令字典工具会逐行读取账号和密码组合。-t是并发线程数这里设 5表示同时检测 5 个地址本地内网环境可以调高到 10跨公网检测建议保持 3 到 5。--timeout是单个请求的超时秒数设 10 秒比较保守避免目标响应慢时大量任务堆积。-o指定结果输出文件支持 CSV 格式方便后续用 Excel 或脚本处理。跑的过程中控制台会滚动输出当前检测的地址、当前尝试的口令和判定结果。如果一切正常几分钟内就能看到一批结果。3.4 结果文件解读与复核检测结束后report.csv会生成一份结构化结果。常见表头类似下面这样url,username,password,http_code,redirect,response_length,result http://192.168.10.21/admin/login.php,admin,admin,200,/admin/index.php,87234,success http://192.168.10.21/admin/login.php,admin,123456,200,/admin/login.php,5210,fail拿到报告不要直接信先做复核。打开浏览器手工登录被标记为 success 的后台用报告里的账号密码实际登一次。为什么必须复核因为自动化判定存在误报可能把“密码错误但页面跳转”当成成功。复核时重点关注两点一是账号是否真的能进去二是进去之后的权限是否如预期。对于标记为 fail 的条目不用逐个看但如果某个后台所有尝试都失败可能不是口令不中而是登录接口识别有偏差这种要拿到第 5 章的避坑思路里排查。4. 弱口令字典与检测参数调优让批量检测少误报的3个关键设置工具装好能跑只是第一步真正决定检测质量的是字典和参数。这一章讲清楚三件事弱口令字典怎么选词、并发和超时怎么配、判定阈值怎么调。4.1 弱口令字典的选词与下载后处理网上能找到不少弱口令字典质量参差不齐直接拿来用往往会踩两个坑一是编码混乱从 Windows 拷出来的字典经常是 GBK 编码而工具默认按 UTF-8 读中文口令全变乱码二是重复条目多大字典里 admin/admin 能出现十几次白白浪费时间。下载后的第一件事就是清洗。# 去重并保留原有顺序 sort dict_raw.txt | uniq dict_uniq.txt # 编码转换把 GBK 编码的字典转成 UTF-8 iconv -f GBK -t UTF-8 dict_raw.txt -o dict_utf8.txt处理完之后再按场景挑词。我的习惯是把字典分成三个层级。第一层是基座词固定包含 admin/admin、admin/123456、admin/admin888、root/toor 这类人人皆知的组合线上环境命中率最低但覆盖面最广。第二层是按行业补词政府网站后台常见 Admin123制造业 ERP 常见 admin/Admin2023学校教务系统常见 admin/123456a这需要你对自己辖区内的资产有了解。第三层是动态词把企业的域名缩写、成立年份、业务英文名拼进去比如公司叫 BlueTech那就补 bluetech/BlueTech2023、admin/BlueTech123。字典文件的格式也有讲究。WebCrack 一般支持两种写法一种是每行“用户名 密码”用空格或逗号分隔另一种是每行只有密码工具默认用 admin 作为用户名去试。两种我都建议各自整理一份因为有些系统在登录时只校验密码不回显用户名只有密码的字典跑起来更快。4.2 线程、延迟、超时怎么配并发参数的设置直接关系到检测是顺利跑完还是半路被拦。这里没有万能值但有一条经验线内网资产、无防护系统线程可以给到 10跨公网或目标有 WAF线程控制在 3 到 5并且每条请求之间加随机延迟。场景线程数超时(秒)每条请求间隔(毫秒)内网纯 IP 后台1050公网域名后台510300-800 随机有 WAF/风控的后台3101000-2000 随机大批量巡检100 地址88200-500 随机随机延迟比固定延迟好用。固定延迟容易被识别成机器行为随机延迟反而更像人肉操作。工具如果没有内置随机间隔参数可以在外层用sleep命令配合循环脚本实现但大多数同类工具已经提供了--delay或--interval选项查看--help即可。超时参数要结合目标响应速度来看。内网系统一般 1 到 2 秒就能响应超时设 5 秒足够公网老系统有时需要 8 到 10 秒才能返回完整页面设太短会导致大量请求被误判为超时失败设太长又会拖慢整体进度。4.3 判定阈值的2个调节点结果判定不是非黑即白工具通常提供两个调节点。第一个是成功特征词表。把登录成功后页面里必然出现的关键词加进去比如后台首页的“欢迎”“工作台”“退出登录”或者跳转 URL 里的/admin/index.php。工具会在响应体里匹配这些词命中即加分。第二个是响应长度变化比例。默认情况下工具会把登录成功页和登录失败页的长度差异作为参考差异超过 20% 才判定成功。这个比例在动态页面里需要调高到 50%因为页面里的随机 token 会让长度不停波动反过来如果目标系统登录成功和失败返回同一个页面框架、只换了其中一段提示文字长度差异很小这时要把比例调低甚至关掉长度判定改用状态码加关键词组合。我踩过的坑是这样某内网系统的登录失败页和成功页长度只差 300 字节默认 20% 阈值完全检测不出来手工却一眼能看出区别。后来把阈值调到 5%误报立刻多了一倍。最后折中方案是关掉长度判定只保留跳转 URL 和关键词匹配结果才靠谱。调参没有标准答案必须以真实响应样本为基准。5. WebCrack实战避坑5条高频踩坑记录与排查路径工具跑得多了什么奇怪现象都能碰到。这一章整理五条高频问题每一条都按“现象、原因、解决”来写希望能帮你省点排查时间。5.1 接口识别错位导致整批误报现象批量检测报告里出现大量 success手工复核却一个都登不进去所有“成功”条目打开都是登录页。原因工具把登录页本身当成了登录成功后的页面。典型场景是登录接口校验失败后仍然返回 200但页面内容和登录页几乎一致工具按“状态码 200 页面里出现密码框”以外的弱规则误判了。解决打开一个目标的登录页用浏览器开发者工具手动提交一次错误密码保存响应内容再看工具判定逻辑里的成功关键词是否和这个响应匹配。把“登录成功”和“登录失败”的响应样本各取一个在配置里明确指定成功特征词和失败特征词。改完配置后先用单地址模式跑一遍验证再放回批量列表。5.2 验证码把自动化检测卡死现象检测到某一个后台就停住控制台不再输出新进度或者该地址所有口令都返回失败。原因目标登录页带图形验证码工具每次构造登录请求时验证码字段为空服务端直接拒绝如果工具做了验证码识别但识别率低结果就会表现为大量失败且耗时极长。解决先确认目标是否支持无验证码入口。很多内部系统在同一个登录接口上有一个参数控制是否启用验证码比如needCaptchafalse。有的话直接在地址或请求配置里带上。没有的话对该地址单独配置一个只跑 3 到 5 条关键口令的规则别让验证码拖累整批进度。5.3 并发开太高被WAF封IP现象前几十个地址正常跑到第 50 个左右开始大量超时换到其他目标也一样超时本机 IP 被封锁了。原因并发线程太猛触发目标侧 WAF 或风控的速率限制IP 被临时封禁。公网目标尤其容易触发。解决先停掉任务等封禁时间过了再继续。改配置把线程降到 3每条请求间隔加上随机延迟。另一个经验是不要把同一批 IP 的后台地址集中在一个时间段跑完把地址列表随机打乱检测时间分散WAF 的速率维度就不容易触及。如果目标是自家资产直连内网 IP 测别绕公网入口。5.4 响应体里有随机token长度判定失真现象对同一个地址用同一个错误密码跑两次响应长度差很多报告里同一组口令有时 success 有时 fail结果不稳定。原因页面响应里带随机 token、时间戳或者动态生成的隐藏字段导致响应体长度每次不同工具按长度差异判定成功时产生随机误判。解决关闭响应长度判定改用状态码加成功关键词的组合判定。具体到工具配置把response_length的权重调低或直接设为不参与最终判定。保留关键词匹配并在关键词里选那种登录成功后必然出现且不会被动态内容影响的文本比如固定的菜单名称。5.5 复测时万能密码已被修复误判为工具异常现象上次检测还能跑出来的后台这次跑完结果为空。不是网络问题工具也没有报错但预期中的命中项消失了。原因目标已经修复了弱口令。常见原因有三种管理员改了初始密码、厂商发布了新版本固件关闭了内置后门、安全团队在两次检测之间做了整改。解决先用浏览器手工登录这个后台分别尝试上次命中的口令和默认口令。如果手工也登不进去基本可以确认系统已经修复。把这批记录标记为“已整改”同时更新字典把已经无效的口令组合删除避免下次检测继续浪费时间。如果手工仍然能登进去但工具测不出来才是工具逻辑的问题回到 5.1 的思路去校准判定规则。6. 进阶把弱口令检测嵌入每月巡检与整改验证当 WebCrack 在手边跑顺了值得把它变成一项例行工作而不是有检查了才用一次。我自己习惯在每个月的最后一周做一次全量后台弱口令巡检雷打不动。固定巡检有一个好处能看到趋势。哪些后台反复出现弱口令哪些整改完后没有复发哪家厂商的设备老是带默认口令这些数据积累半年就变成一份有价值的资产风险台账。6.1 部署为定时检测任务把命令写进 crontab每月最后一个周日凌晨两点执行。这个时间点内网流量小系统负载低不容易打扰业务。0 2 28 * * cd /opt/webcrack python WebCrack.py -f urls.txt -d dict.txt -t 3 -o report_$(date %Y%m%d).csv webcrack.log 21命令行里注意两点cd要先切到项目目录否则相对路径下的 dict.txt 和 urls.txt 找不到 webcrack.log 21把标准输出和错误都写进日志方便事后排查。CSV 文件名带上日期每次生成的报告都留档不要覆盖旧报告不然没法做趋势对比。6.2 让整改闭环检测结果要有下文光出报告不整改检测就白做了。我通常把检测结果分成三档高危的是能直接登录且权限是管理员的中危的是能登录但权限有限低危的是默认口令存在但服务端有额外校验。高危条目当天通知责任人要求三个工作日内完成改密并复测中危和低危跟着下个月的巡检一起复核。复测方法很简单把上个月的报告里标记为 success 的条目单独提出来合并成一个临时地址文件再对着同样的字典跑一遍。如果某条已经测不出来说明改密生效了。如果还在说明整改没落实继续督办。这个闭环走三个月后台弱口令的数量会明显往下走。注意定时任务跑之前先手工在当月地址清单里过一遍确认没有新增的、未授权的目标混进去。授权边界这件事定时任务比手工操作更容易失控。工具能帮你省时间但替代不了人的判断。我见过太多团队把检测工具跑起来就撒手不管结果报告躺在邮箱里没人看等同于白做。巡检的最终产出不是一份 CSV是明确到责任人的整改项。希望这套思路对你手上的资产也有用希望帮到你。本文还有配套的精品资源点击获取