
简介WebCrack是一款专注Web后台弱口令与万能密码批量爆破、检测的开源免费工具主要面向渗透测试工程师、安全运维人员及网站管理员适用于企业安全审计、漏洞自查和等保测评等场景。工具基于Python实现资源包共18个文件其中12个py文件构成核心功能模块3个txt文件提供密码字典、URL列表和配置参数另有Markdown说明文档与界面示意图片压缩包整体仅114KB便于快速部署和二次开发。目前已有407人学习下载。借助该工具包使用者可以深入理解批量爆破的实现机制自定义密码字典、线程数与目标地址对授权站点开展弱口令检测同时由于项目开源还可按需修改代码、复用函数模块甚至集成到自己的安全测试流程中。需要提醒的是此类工具应严格限定在合法授权范围内使用避免对目标服务器造成压力或触犯法律红线。掌握这套资源有助于提升Web安全基线自查与攻防实战能力。1. 为什么说 WebCrack 不是“一键爆破器”从弱口令批量检测说起某公司做内部业务系统巡检二十几个后台地址堆在一个文档里外包人员的账号密码全是初始密码。某开发者当时还打算写循环脚本逐个试后来发现直接用现成工具更省事WebCrack。它是 web 后台弱口令/万能密码批量爆破与检测工具能把目标发现、登录表单识别、字典跑批和成功标记串成一条流水线一次性筛出有弱口令的后台地址。用它的前提是目标在授权范围内比如自家系统、测试环境、实训平台。它不是点一下按钮就出结果的黑匣子跑批质量高度依赖表单识别和字典配置。下面按实际使用顺序把表单识别、字典整理、参数设置和常见翻车点过一遍每一步都会给出可抄的配置和命令。2. 先看登录页再谈爆破后台表单识别与万能密码的适用边界爆破看着是“拿字典怼登录框”实际是向登录接口批量提交 HTTP 请求。web 后台登录页的前端长什么样、表单字段叫什么名字直接决定工具能不能跑起来。这一章先拆登录页识别的细节再讲万能密码为什么只对部分系统有效。2.1 弱口令爆破的本质构造HTTP请求不是模拟浏览器批量爆破的关键在于重复构造登录请求。WebCrack 的做法和人工操作完全不同它不渲染页面、不执行 JavaScript只从 HTML 里找表单字段。典型后台登录页的 HTML 结构如下form actionlogin.php methodpost input nameusername typetext input namepassword typepassword input namesubmit typesubmit value登录 /form工具会提取 form 的 action 作为提交地址再读取 input 标签的 name 属性。常规登录字段名是 username / password但不少系统用 user / pwd / passwd甚至是中文拼音缩写。如果字段名不在默认规则里工具就会报“页面结构不匹配”。处理方式是在配置里手动指定表单字段名让工具跳过自动识别直接向 login.php 提交数据。明白这一点后再看看工具内部的动作。用 requests 模拟一次登录请求大致是下面这段逻辑import requests # 登录接口地址,来自登录表单的 action 属性 login_url https://target.example.com/login.php # 字段名要按登录页源码里的 name 属性填 data { username: admin, password: 123456, submit: login, } # allow_redirectsFalse 是为了拿原始的302跳转,方便判断登录是否成功 resp requests.post( login_url, datadata, timeout10, allow_redirectsFalse, ) print(resp.status_code) print(resp.headers.get(Location))这里的 timeout10 表示请求超过 10 秒就丢弃allow_redirectsFalse 让请求停在第一个响应不自动跟着跳转走。判断登录成功通常看两个特征状态码是 302且 Location 指向后台首页比如 /admin/index.php失败时响应回到 login.php 并带 error 参数。WebCrack 用的就是这种逻辑只是把循环、并发和结果标记都封装好了。需要特别注意的是这类逻辑对简单表单有效。如果登录页要求先访问一次拿 Cookie再带着 Cookie 提交表单或者登录请求里带动态 token那么直接 POST 会一直失败。工具里一般提供预请求选项先 GET 登录页保存 Cookie再发登录请求。判断一个登录页是否适合批量爆破我会先手工打开页面看源码有 typepassword 的 input、form action 是真实接口、没有验证码这三条都满足再放进批量任务。2.2 万能密码检测它到底在试什么万能密码不是一种密码而是一组绕过认证的请求构造。很多老后台的登录校验是把用户名和密码直接拼进 SQL 语句比如 SELECT * FROM admin WHERE name$u AND pass$p。当用户名字段传入特定符号时SQL 逻辑会被改变认证被绕过。WebCrack 里的“万能密码检测”就是把这类构造批量提交到登录接口。常见构造不复杂关键要理解它们在干嘛。下面这张表列了几类频繁出现的 payload场景用户名构造密码构造经典绕过admin or 11 #任意闭合密码字段正确用户名 or 11 -- -注释掉密码判断admin--任意无注释变体 or or 不同数据库对注释符支持不一样MySQL 认 # 和 -- Oracle 对 -- 后面必须有空格。工具内置的 payload 列表会覆盖这些差异跑的时候逐个往用户名字段和密码字段填。理解这点后就不会出现“万能密码回来全是失败还继续跑”的情况它不是对任何系统都生效的通用钥匙。什么系统值得跑万能密码我一般看目标技术栈。老版本 PHP 后台、ASP 系统、早期 Java 框架部署的业务系统SQL 拼接出现概率高跑一套 payload 有价值用参数化查询、ORM 和主流框架的新系统输入和 SQL 已分离这组 payload 基本全灭。所以批量任务里我会先看一批目标的指纹识别出老系统再单独开万能密码选项避免无效请求把整个任务的节奏拖慢。2.3 WebCrack 的三种检测模式直连登录页、路径探测、混合模式工具不是只管跑字典它还管“找到要测的后台”。WebCrack 把检测模式分成三种区别就在目标给的粒度。第一种是直连模式。目标清单里直接给完整登录页地址比如 https://example.com/admin/login.php工具跳过路径探测直接识别表单进入爆破。适合已经有一批已知后台地址的巡检场景速度最快误报最少。第二种是路径探测模式。目标清单只给域名比如 http://example.com工具用内置后台路径字典逐个尝试目录看哪些路径返回了登录页。常见后台路径包括 /admin/、/manage/、/system/、/panel.php、/wp-login.php。这个模式能发现从外面看不到的后台入口代价是会产生大量 404 请求。路径字典写得好不好直接决定噪声大小。第三种是混合模式。先做路径探测把命中的疑似登录页收集起来再对每个登录页跑弱口令字典。这是最常用也最耗时的模式。WebCrack 配置里可以只开路径探测、只开弱口令测试、或者两者都开。如果目标信息已经比较完整我一般选直连模式效率高如果是给开放域名的互联网资产做普查就开混合模式。路径探测的命中判定也值得留意。只看状态码会翻车因为不少站点 404 也返回 200或者所有路由都返回 200。更稳的判定是“状态码 页面特征”双条件返回 200且页面里有、input[typepassword] 或 login 关键词。WebCrack 的路径命中配置支持这类组合条件宁可少报几个后台也不要让一批无效路径进入爆破阶段。3. 准备目标清单与字典爆破质量从这两个文件开始工具本身只是执行者真正决定结果质量的是输入的两个文件。很多批量任务跑不出结果不是工具不行是目标清单不规范、字典太随意。这一章说清楚怎么准备这两个文件。3.1 目标清单格式与URL规范化WebCrack 批量模式读一个文本文件一行一个目标任务。这个文件看似简单却是翻车率最高的地方。URL 写全了吗是写 http://example.com 首页还是写完整登录页地址两种写法会让工具走完全不同的流程。只有域名时工具要先路径探测给了完整登录页时工具直接进表单识别。协议头不能省。http 和 https 在部分服务器上走不同逻辑同一个路径在 80 端口和 443 端口可能返回不同内容。端口也同理内网系统大量使用 :8080、:8090 这类非标准端口批量清单里要保留端口号。批量任务开始前我会先做一轮 URL 规范化# 去掉重复行,统一小写,再按域名排序 sort targets_raw.txt | uniq | tr A-Z a-z targets.txt wc -l targets.txtsort 加 uniq 去重避免同一个目标被跑两遍tr 统一小写是防止协议和域名大小写不一致造成重复。文件整理完我会再用工具自带的连通性检查对每个目标发一次 HEAD 请求。预探测就有三成超时的目标清单多半是域名失效或端口不对应该先修清单再跑批量而不是让爆破任务把时间耗在连不上的目标上。从 Excel 复制 URL 时还会带一个隐蔽问题第一行可能有 BOM 头文件名或 URL 里混入不可见字符。用 sed 清掉第一行的 BOM 是一次性动作sed -i 1s/^\xef\xbb\xbf// targets.txt文件处理完用 wc -l 确认目标数量再随机抽三条手工验证。这个习惯能提前拦掉一半以上的批量任务异常。3.2 字典组织按登录场景拆成字典组字典决定命中率。直接把一个几万条的大字典丢进去跑那不叫批量检测叫无差别撞库。更合理的组织方式是按场景拆成三组用户名与密码分开的字典、组合字典、定制定向字典。用户名和密码分开时工具按笛卡尔积跑批。比如 user.txt 放 admin、root、test、managepass.txt 放 123456、admin、password10 个用户名乘 20 个密码就是 200 次请求。这种写法适合完全不知道账号的场景缺点是请求量大。已知确定账号时用组合字典 combo.txt每行一个完整的“用户名:密码”比如 admin:123456请求量小得多也不会把时间浪费在无效账号上。密码字典的内容组织比数量重要。按经验默认口令和简单数字永远排第一梯队admin、123456、888888、666666 这类高频口令命中率最稳。第二梯队是信息定制口令单位拼音 年份、姓名拼音 123、域名简称 强口令后缀。第三梯队是系统密码策略过滤后的口令。如果目标规定密码至少 8 位字典里大量 123456 就是无效请求。生成原始口令后用 awk 按目标策略过滤# 过滤出8-14位、不包含特殊空格的密码 awk length($0)8 length($0)14 pass_raw.txt pass.txt过滤完再按频率排序把最可能的口令排前面。这样批量任务一旦中途被打断前面已经跑过的都是高概率组合损失最小。密码字典去重要注意大小写不能简单合并admin 和 ADMIN 对目标来说是两个口令都保留。3.3 后台路径字典命中率与噪声的平衡路径探测的字典同样需要控制噪声。一套几百条的路径列表全打一遍大部分是 404既占并发资源又容易被目标的安全设备记录。我一般把路径字典拆成三份通用后台路径、框架默认路径、开发调试路径。通用后台路径覆盖大多数自建系统的后台目录常见的有 /admin/、/manage/、/system/、/panel.php。框架默认路径针对特定技术栈比如 WordPress 的 /wp-login.php以及各类 CMS 和管理组件默认后台。开发调试路径覆盖信息暴露点比如 /actuator、/phpinfo.php、/swagger-ui.html这类路径不属于登录授权页但属于高危检测点。路径文件格式很简单/admin/ /admin/login.php /manage/ /system/ /wp-login.php /actuator路径命中判定不能只看状态码。现代站点很多 404 也返回 200单靠状态码会把一批伪路径当登录页。我会把判定改成双条件状态码 200且响应页面里出现 form、password 或 login 这类关键词。宁可少命中几个冷门后台也不要让一批无效路径挤进爆破阶段。路径字典里留注释时要小心工具按行读取注释行会被当成路径请求我一般单独维护一个说明文件不混进字典本体。4. 跑起批量检测并发、超时、请求伪装等关键参数怎么设文件准备好目标清单和字典都验证过接下来是执行阶段。这一章把并发、超时、请求伪装和成功判定这四个参数讲透给一条可以直接拿来跑的完整命令。4.1 并发数不是越大越好目标会先“死”并发数是最直观的参数也是新手最容易调大的参数。WebCrack 里线程数代表“同时向目标发出的请求数”。单目标模式下线程从 5 提到 20速度不是线性提升错误率却会提前上升。原因是目标侧有连接数限制、数据库连接池上限单 IP 高频请求也容易触发防护设备的频率控制。批量多目标场景下线程分配又是另一套逻辑。每个目标分配 1 到 3 个线程多个目标之间并行总体吞吐根号式上升。如果开成每个目标 10 个线程现象是任务跑到一半所有请求开始超时、返回 403。这不是字典问题是目标先扛不住或者被中间设备拦了。巡检目的是拿结果不是打垮目标所以线程宁小勿大。我一般先用小并发跑前 50 个请求观察错误率再决定要不要调大。4.2 超时与重试区分“登录失败”和“网络抖动”超时参数控制每个请求的最大等待时间。设短了慢速后台全都显示超时看起来像没跑出结果设长了单目标总耗时翻倍。经验值内网系统超时设 8 秒公网系统或跨运营商访问设 15 秒。目标响应时间分布可以从工具日志里看如果大部分请求都在边界值附近返回把超时适当加长。重试参数要单独理解。--retry 1 表示只对超时和连接错误重试一次。登录失败是业务层响应目标正常返回了错误页面这种结果不计入重试超时是传输层异常请求可能根本没送到服务器重试才有意义。有人把重试次数设到 3结果一个目标被重复请求三四次原本正常的账号被目标侧的失败锁定策略拦掉反而把结果跑没了。重试次数越少越稳默认 1 次足够。4.3 请求头伪装与代理让请求看起来像普通浏览器访问批量测试的本质是向目标发大量请求目标是安全设备会记录请求特征。默认的 User-Agent 是 python-requests一眼就是自动化工具很容易被安全设备直接拦掉。WebCrack 支持指定一个 UA 文件每次请求随机选一个。我一般放三到四个常见浏览器的 UAChrome on Windows、Chrome on macOS、Edge on Windows覆盖绝大多数访问场景。UA 文件不要放太多放十几个反而让请求特征不够集中。Cookie 更关键。不少后台登录接口要求先访问一次登录页、获取会话 Cookie再带着 Cookie 提交登录请求。WebCrack 里可以先开“预请求”让工具 GET 登录页保存 Cookie 后再跑字典。没有这一步部分目标会一直返回“会话过期”或 403。代理配置适合做大范围巡检时使用目标侧看到同一 IP 高频登录尝试容易触发封禁用代理列表文件把请求分散到多个出口 IP可以减少这个摩擦。前提是代理来源清晰、目标测试已获授权来历不明的共享代理不要用。4.4 登录成功判定标准三道门槛爆破跑完结果怎么筛如果只看“返回 200”就算成功会把一堆登录失败页面标成弱口令。WebCrack 的成功判定支持三个维度状态码、Location 跳转、返回内容特征。更好的方式是组合使用。登录成功时服务端通常返回 302 并把 Location 指向后台首页登录失败则留在 login.php。单独看 Location 也不够有的系统登录失败也返回 302。第三个维度是页面内容特征登录成功后页面必然出现“退出登录”、“欢迎”或具体用户名把这个文本配进 success_text工具命中内容特征才算成功。三条同时满足的记录误报率低很多。完整命令示例webcrack -l targets.txt -D dict/user.txt -P dict/pass.txt \ --mode mixed --threads 3 --timeout 10 --retry 1 \ --ua-file dict/ua.txt --delay 500 \ --success-text 退出登录 \ --output report.csv逐条解释参数含义-l 指定目标清单文件-D 和 -P 分别指定用户名字典和密码字典--mode mixed 表示先路径探测再跑弱口令--threads 3 是单个目标的并发数--timeout 10 是单请求超时 10 秒--retry 1 是对超时请求重试一次--delay 500 是每个请求之间加 500 毫秒间隔。delay 参数看起来拖慢速度实际作用很大让请求节奏接近人工操作同时降低账号被锁的概率。任务总耗时可以用一个粗公式估算请求总量 / 并发数 × (平均响应时间 0.5 秒延迟)。请求量大时delay 加大会显著拉长任务时间所以要平衡使用。5. 排查与避坑五个把爆破结果带偏的常见问题批量爆破跑到一半结果对不上预期多数时候不是工具坏了是目标特征和工具假设不匹配。这一章写五个高频问题每条按现象、原因、解决三层拆开可以直接对照排查。5.1 全目标 0 命中日志“页面结构不匹配”现象目标清单里的站点手工打开是登录页工具跑了一圈一个结果都没有日志全是“页面结构不匹配”。原因登录表单是前端动态渲染出来的初始 HTML 里没有 form 和 input 标签或者字段名不叫 username / password工具按默认规则找不到可提交的字段。WebCrack 从静态 HTML 里识别表单不执行 JavaScript遇到这类页面就认为是“不是登录页”。解决手工打开登录页查看页面源码找到 form 的 action 地址和 input 的 name 属性把它们手动写进配置。之后关闭表单自动识别让工具直接向指定接口提交。前端渲染登录页在老旧系统改造后的站点里很常见不是工具 bug。5.2 线程一高后面全是超时现象批量任务前几分钟正常后面开始大面积 timeout部分目标返回 403。原因同一出口 IP 的请求频率超过了目标侧安全设备或 Web 服务器连接阈值目标开始丢弃或拒绝连接。这时日志里全是传输层错误没有一条业务层响应。解决把并发降下来并加大请求间隔。例如 --threads 2 --delay 800让节奏接近人工登录。仍然不行就把目标清单分批一次只跑一部分等频率限制窗口过了再跑下一批。5.3 爆破结果标记成功人工复核却进不去现象报告显示某后台存在弱口令用浏览器填同样的账号密码却被打回登录页。原因成功判定采用了单一特征比如只看 302 跳转没有校验跳转后的页面内容。部分站点在检测时返回了 302但跳转目的地仍是登录页而不是后台首页另外某些目标对特殊字符做了编码转换工具提交时绕过了校验浏览器明文提交时行为不同。解决把成功判定加严。同时配置 --success-text 和跳转校验要求登录成功后的页面里出现后台特征词。对报告中标记成功的记录人工复核时再用浏览器原始提交一次确认不是编码差异造成的误报。5.4 万能密码组全灭现象万能密码 payload 配置正确目标也能正常请求但一组跑完全部失败。原因目标使用了参数化 SQL 查询或 ORM输入和 SQL 语句在框架层已分离旧的字符串拼接构造失效。这种目标在近年部署的业务系统里占比很高万能密码只对拼接型 SQL 的老后台有效。解决先判断目标技术栈。老版本 PHP 后台、ASP 系统、无框架的旧平台值得跑万能密码主流框架和中间件部署的新系统直接关闭这个选项把请求留给弱口令字典避免浪费时间。5.5 同一目标两次结果不一致现象第一批跑出一个账号存在弱口令第二批换更大字典后反而一个结果都没出连之前确认的口令也失败。原因目标存在登录失败次数锁定策略。第一批跑批时已触发多次失败账号被临时锁定第二批再跑正确密码也返回认证失败看起来像是字典问题实际是账号被锁。解决跑批前把并发调低、延迟调大降低触发锁定的概率。对已出结果的目标人工复核前先重置目标侧账号状态。同一批目标不要短时间内重复跑同一个字典至少间隔一个锁定策略重置周期。6. 收尾技巧把爆破结果整理成可复查的清单再上手验证批量任务结束WebCrack 导出 CSV 报告这只是中间产物不是最终结论。报告里标记成功的记录还要经过一轮筛选和人工复核才算真正可用的检测结果。CSV 报告一般包含目标 URL、账号、密码、状态码、跳转地址和结果标记。先用一行命令把“成功”记录筛出来awk -F, NR1 || $5OK {print} report.csv confirm_list.csv这行命令按逗号分列保留表头再把第五列等于 OK 的记录单独存成一个文件。小规模任务手工筛选没问题目标一多就用这条命令先粗筛再人工复核。复核顺序我一般固定走三步。第一步打开跳转地址看是否真正进入后台首页而不是停留login页第二步看页面里是否出现用户信息、退出入口等登录后特征第三步对存疑记录重新提交一次明文账号密码确认不是编码或请求差异造成的假成功。通过这三步的记录才写进最终检测清单并补上目标名称、检测时间和复核结果。这个整理过程看着繁琐实际是检测报告的留痕依据后续如果要对业务方说明问题这份清单比工具原始导出更合适。从那以后我每次做批量检测前都强制走一遍流程先确认授权范围再规范化目标清单和字典调低并发和延迟跑完把所有成功项逐条人工过一遍。这个流程帮我把不少看起来像成功、实际是误报的记录排除掉了也让每一份报告都能拿得出手。希望帮到你。本文还有配套的精品资源点击获取