1. 项目概述与核心价值最近在整理一些自动化部署脚本的安全审计报告时发现了一个挺有意思的共性问题很多基于开源项目快速搭建的服务为了方便部署会在脚本里直接写死一个默认的认证令牌Token。如果管理员部署后忘记修改或者直接使用了社区里流传的“一键脚本”那么这个服务就等于在互联网上裸奔。今天要聊的这个工具BruteClaw就是专门针对这类场景的一个审计脚本。它的核心目标很明确就是用来检测那些使用了OpenClaw项目的实例是否配置了默认的、弱密码的或者常见的占位符令牌。我把它定位为一个“安全自查工具”。想象一下你作为运维或者安全负责人在公司内网或自己的VPS上部署了一套服务你怎么能快速确认自己的配置是否足够安全没有留下这种低级但危害巨大的漏洞手动去猜、去试显然不现实。BruteClaw做的就是这件事它通过 WebSocket 协议自动化地对一批目标地址尝试一批可能的令牌从而高效地找出那些“不设防”或“门锁太简单”的 OpenClaw 实例。这背后的原理其实和针对网站后台、数据库的弱口令爆破类似只不过协议和对象换成了 WebSocket 和特定的认证令牌。需要特别强调的是这个工具的设计初衷和唯一合法用途是用于授权的渗透测试和安全研究。比如你对你自己拥有管理权限的资产进行安全检查或者是在获得明确书面授权的情况下对客户系统进行安全评估。任何未经授权对他人系统使用此类工具的行为不仅是非法的也严重违背了安全从业者的职业道德。工具本身没有善恶关键在于使用它的人。接下来我会详细拆解这个工具的工作原理、配置方法、使用技巧并分享一些在实际使用中积累的经验和避坑指南。2. 工具原理与设计思路拆解2.1 为什么是 OpenClaw 和 WebSocket要理解BruteClaw的价值首先得了解它的目标——OpenClaw。OpenClaw 是一个在某些特定场景下例如远程管理、数据代理被广泛使用的开源项目。它通常采用 WebSocket 协议进行通信并在连接建立阶段通过一个令牌Token来完成客户端的认证。这个设计本身没有问题问题出在部署环节。很多开发者为了降低部署复杂度会在提供的 Docker Compose 文件、Kubernetes YAML 或者 Shell 安装脚本中预先设置一个默认的令牌比如admin123、token甚至changeme_please。他们的本意是提醒使用者去修改但现实情况是大量管理员在部署时要么没仔细看文档要么图省事直接运行导致这个默认令牌被原封不动地用于生产环境。BruteClaw正是瞄准了这个“部署-遗忘”的安全缺口。选择 WebSocket 协议作为检测入口是技术上的必然。因为 OpenClaw 的服务端监听的是 WebSocket 连接。与 HTTP 协议不同WebSocket 是一种全双工通信协议连接建立后可以长期保持并双向传输数据。BruteClaw的工作就是在连接建立的握手阶段提交待测试的令牌。如果令牌正确握手成功连接建立如果令牌错误服务端会直接拒绝连接。这个过程高效且明确。2.2 核心工作流程解析BruteClaw的整个工作流程可以概括为“读取-组合-并发测试-记录结果”。它摒弃了低效的单线程顺序尝试采用了异步并发的设计这也是其能够快速扫描大量目标的关键。资源加载脚本启动后首先会在其所在目录下寻找两个关键的文本文件targets.txt和tokens.txt。前者包含了所有待检测的 OpenClaw 服务地址后者则是一个可能的令牌字典。这种设计将数据和逻辑分离非常灵活。你可以随时更新目标列表或令牌字典而无需修改脚本代码。组合生成脚本会计算这两个列表的笛卡尔积即每一个目标地址都会尝试字典里的每一个令牌。假设你有 100 个目标和 1000 个常用弱令牌那么总共会产生 10 万次测试组合。高效的并发处理能力在这里至关重要。异步并发测试这是工具的核心。它利用 Python 的asyncio和websockets库创建一批并发的检测任务。每个任务的行为是尝试与一个目标建立 WebSocket 连接并在握手请求中携带当前要测试的令牌。脚本会控制一个“并发度”默认是10即同时最多有10个连接尝试在进行中以避免对目标服务造成过大压力或被误判为拒绝服务攻击。结果判定与记录对于每次尝试根据服务端的响应会有三种结果成功连接建立说明令牌有效。脚本会立即将这个“目标-令牌”组合记录到success_log.txt文件中这是一个非常重要的证据文件。失败连接被明确拒绝通常收到 HTTP 401 等错误码说明令牌无效。脚本会简单记录并继续下一个测试。异常网络不通、连接超时、目标服务非 WebSocket 协议等。脚本会记录错误信息帮助使用者排查是目标地址错误还是网络问题。这个流程清晰地将“爆破”这一概念自动化了把安全工程师从繁琐的手工测试中解放出来专注于目标列表的整理和结果的分析。2.3 工具设计的可取之处与潜在风险从设计上看BruteClaw有几个值得称道的地方。首先是它的“自省”和“友好”设计首次运行时如果找不到targets.txt和tokens.txt它会自动生成模板文件降低了使用门槛。其次它明确设定了并发限制这是一种负责任的表现避免因扫描速度过快而冲击目标服务。最后它将成功结果单独记录方便后续的漏洞验证和报告编写。然而使用这类工具也伴随着固有的风险必须在实际操作中保持警惕法律风险这是最大的风险。未经授权扫描任何不属于你的系统都是非法的。务必确保你的扫描行为在合法授权的范围内进行。误判风险工具的原理是尝试连接。一个“连接成功”未必100%等于“令牌正确”。理论上存在一些不进行认证的开放 WebSocket 服务或者配置错误的 OpenClaw 实例认证功能被意外关闭。因此对于success_log.txt中的结果需要进行手动验证例如尝试用该令牌进行一些简单的数据交互以确认其完全有效。行为暴露风险高频的、来自同一源IP的 WebSocket 连接尝试很容易被目标服务器的安全防护设备如WAF、IDS识别为攻击行为从而导致你的IP被封锁甚至触发警报。在授权测试中有时需要与客户协调将测试IP加入白名单或者采用更低速、更分散的方式进行。3. 环境准备与详细配置指南3.1 基础运行环境搭建工欲善其事必先利其器。BruteClaw基于 Python 3.8 开发所以第一步是确保你的系统环境符合要求。我个人推荐使用 Linux 发行版如 Ubuntu、CentOS或 macOS 进行这类工作因为命令行环境更为原生和强大。Windows 用户可以使用 WSL2 来获得接近 Linux 的体验。首先检查你的 Python 版本python3 --version如果版本低于 3.8你需要先升级 Python。在 Ubuntu 上可以使用apt安装较新的版本在 macOS 上推荐使用brew install python3.11。接下来是安装依赖。BruteClaw依赖两个核心库websockets: 用于处理 WebSocket 协议的连接、握手和数据通信。cryptography: 这是一个功能强大的加密库在这里可能用于处理一些令牌的哈希或编码验证尽管在基础的爆破中可能未直接使用但作为依赖需要安装。使用 pip 一键安装即可pip3 install websockets cryptography我习惯在重要的项目中使用虚拟环境以避免包版本冲突。你可以这样操作# 创建虚拟环境 python3 -m venv brutenv # 激活虚拟环境 (Linux/macOS) source brutenv/bin/activate # 激活虚拟环境 (Windows cmd) brutenv\Scripts\activate.bat # 然后在虚拟环境中安装依赖 pip install websockets cryptography3.2 关键文件配置详解配置是BruteClaw发挥效力的关键。它完全依赖于两个文本文件因此正确地准备这两个文件比什么都重要。1.targets.txt- 目标地址列表这个文件定义了你要扫描的所有 OpenClaw 实例的地址。格式必须严格遵守ws://host:port wss://host:port协议必须使用ws://明文 WebSocket或wss://基于 TLS 加密的 WebSocket。这取决于目标服务的配置。如果服务配置了 SSL/TLS 证书你必须使用wss://否则连接会失败。主机与端口host可以是 IP 地址如192.168.1.100或域名如openclaw.example.com。port是服务监听的端口OpenClaw 的默认端口可能因部署而异常见的有8080、8443、7860等这需要你通过信息收集来确认。实操心得如何收集目标列表在授权测试中目标列表通常来自客户提供的资产清单。在自查场景下你需要整理自己所有的公网IP和域名。此外可以通过一些被动信息收集手段注意合法性例如在 GitHub 上搜索公开的、可能包含 OpenClaw 配置的代码仓库但其中暴露的地址需要谨慎甄别。绝对不要使用网络空间搜索引擎如 Shodan, Fofa对未经授权的目标进行批量搜索和添加这等同于主动侦察是违法的。2.tokens.txt- 令牌字典文件这是爆破的“弹药库”其质量直接决定了检测的效果。每一行是一个待尝试的令牌字符串。默认令牌首先应该包含 OpenClaw 项目官方文档、流行部署脚本如那些高星的 GitHub Gist 或 Docker 镜像中出现的所有默认令牌。例如default_token,admin,123456,openclaw_secret等。常见弱口令将常见的弱密码列表引入进来如password,qwerty,abc123等。可以从rockyou.txt这类经典弱口令字典中提取前几万个进行尝试。模式化令牌有些部署脚本会用模式生成令牌比如{date}、{hostname}的哈希或者是简单的 UUID。可以尝试一些简单的模式如token_2024,secret_等。自定义规则根据你对目标组织的了解授权测试中可以添加公司名缩写、项目代号、常用密码规则等组合。一个有效的tokens.txt开头部分可能长这样admin 123456 password token secret openclaw changeme default test 123456789 qwerty 1q2w3e4r ...字典的大小需要权衡。太大如上百万会导致扫描时间极长太小则可能覆盖不全。建议从一个小而精的字典开始比如包含所有已知的默认令牌和 Top 1000 弱口令如果时间允许再逐步扩大。3.3 首次运行与模板生成当你第一次运行BruteClaw时如果当前目录下没有targets.txt和tokens.txt脚本会贴心地为你生成这两个文件的空模板。python3 brutecraw.py运行后你会在目录下看到新生成的targets.txt和tokens.txt文件。里面会有几行示例内容并附有注释说明格式。你需要做的是清空或修改targets.txt填入你真正的目标地址。清空或修改tokens.txt填入你准备好的令牌字典。 这是一个非常人性化的设计避免了用户因文件格式错误而无法启动脚本的问题。4. 工具使用与结果深度解析4.1 执行扫描与过程监控配置好两个核心文件后就可以开始扫描了。命令非常简单python3 brutecraw.py脚本启动后它会首先读取文件计算总任务数目标数 × 令牌数然后开始异步并发测试。在控制台你会看到实时的输出信息格式通常如下[] Loaded 50 targets from targets.txt. [] Loaded 1000 tokens from tokens.txt. [] Starting brute-force with concurrency: 10. Total tasks: 50000. [] Testing ws://example.com:8080 with token admin... ❌ Failed [] Testing ws://example.com:8080 with token 123456... ❌ Failed [] Testing wss://secure-host.com:8443 with token default... ✅ Success! Saved. [] Testing ws://example.com:8080 with token password... ⚠️ Exception: [Errno 111] Connection refused ...✅ Success!这是你最希望看到的结果意味着找到了一个有效的组合。脚本会立即将其追加写入到success_log.txt文件中。务必养成习惯定期查看这个文件因为它记录了所有成功的漏洞。❌ Failed这是最常见的结果表示令牌被拒绝。脚本会快速跳过继续下一个测试。⚠️ Exception这表示遇到了网络或协议层面的问题需要关注。常见的异常有Connection refused目标IP的端口没有开放服务。Timeout网络延迟过高或目标没有响应。[SSL: CERTIFICATE_VERIFY_FAILED]在使用wss://时遇到自签名证书问题可能需要添加参数跳过验证但会降低安全性仅在测试环境使用。error https://x.x.x.x/ isnt a valid URI: scheme isnt ws or wss这是一个非常典型的错误。它意味着你提供的URL是http://或https://开头的但脚本期望的是ws://或wss://。这通常发生在目标服务将 WebSocket 连接请求重定向到了其 HTTP 主页。解决方法检查你的targets.txt确保所有地址都以ws://或wss://开头。如果目标服务只暴露了 HTTP/HTTPS 端口你可能需要先通过其他方式如查看文档、抓包分析确认其 WebSocket 的实际端点路径通常是像ws://host:port/ws或wss://host:port/api/ws这样的形式。4.2 结果文件分析与验证扫描结束后你的工作目录下会多出一个success_log.txt文件。它的每一行可能记录着一个成功的组合格式例如wss://vulnerable-server.com:8443 | valid_token_here ws://192.168.10.5:7860 | admin123重要不要完全信任自动化工具的结果。你必须对每一个“成功”的记录进行手动验证。这是因为假阳性可能存在某些服务不需要认证或者脚本的逻辑误判。手动验证可以排除这种情况。漏洞确认手动验证是渗透测试流程中必不可少的一环你需要确认这个漏洞确实存在且可利用。手动验证的方法很简单可以使用任何支持 WebSocket 的工具例如浏览器开发者工具中的“网络”标签页过滤 WS或者使用命令行工具wscat# 安装 wscat npm install -g wscat # 使用发现的令牌进行连接 wscat -c ws://192.168.10.5:7860 -H Authorization: Bearer admin123 # 或者根据目标服务的认证头格式调整有时可能是 Sec-WebSocket-Protocol: token 或其他如果连接成功并可以保持或者服务端返回了欢迎信息那么漏洞就得到了确认。此时你应该详细记录下目标URL、有效令牌、验证时间、验证方式并截图留存作为后续报告或修复的依据。4.3 性能调优与高级参数基础的python3 brutecraw.py使用的是默认配置。但面对不同规模的测试你可能需要调整参数以优化性能或适应网络环境。虽然当前版本的BruteClaw脚本可能没有暴露太多命令行参数但我们可以通过修改源码如果你熟悉 Python或调整使用方式来达到目的。1. 调整并发度 (concurrency)并发度是影响扫描速度和目标负载的关键因素。默认值10是一个比较保守的设置。在授权测试且网络环境良好的内网中你可以适当提高这个值以加快扫描速度比如提高到50或100。修改方法通常是找到脚本中定义并发数的地方可能是一个变量CONCURRENCY_LIMIT将其调大。但请注意过高的并发度可能会耗尽你本机的网络资源或端口。对目标服务造成明显的负载压力可能触发对方的流量监控警报。导致你的连接因频率过高而被中间防火墙或WAF拦截。2. 超时时间控制网络环境复杂时默认的超时设置可能不适用。如果目标网络延迟高你需要增加连接超时和读写超时时间避免大量因超时导致的“异常”误判为失败。同样这通常需要在脚本内部调整asyncio.wait_for或websockets.connect的超时参数。3. 断点续扫与任务分割如果目标列表和令牌字典非常庞大一次扫描可能需要数小时甚至数天。为了避免程序意外中断导致前功尽弃一个高级的技巧是实现“断点续扫”。思路是将大的targets.txt或tokens.txt分割成多个小文件分批运行脚本并记录每批的进度。或者更优雅的方式是修改脚本让它将成功和失败的结果持久化到数据库或文件中并在启动时读取进度跳过已测试的组合。这对于大型项目审计来说是至关重要的功能。5. 实战经验、避坑指南与防御建议5.1 常见问题排查实录在实际使用BruteClaw或类似工具的过程中我踩过不少坑这里总结一下最常见的问题和解决方法问题一运行脚本后立即报错ModuleNotFoundError: No module named websockets原因依赖库没有安装或者你在一个 Python 环境中运行但依赖安装在另一个环境中。解决确保你激活了正确的虚拟环境如果你用了的话然后运行pip install websockets cryptography。如果已安装仍报错尝试使用python3 -m pip install来指定 Python 解释器。问题二大量目标提示⚠️ Exception: [Errno 111] Connection refused原因目标IP:Port 没有开放或者防火墙阻止了连接。排查先用telnet或nc命令手动测试端口连通性nc -zv target_ip port。如果不通说明目标服务未运行或网络不可达。如果是在测试公网资产请确认目标端口是否真的对外暴露。问题三所有wss://目标都报 SSL 证书错误原因目标使用了自签名证书或无效证书。解决仅限授权测试环境在websockets.connect()函数中可以添加ssl_handshake_timeout参数或配置一个不验证证书的 SSL 上下文。注意这会完全失去 TLS 的认证保护仅在测试可控环境时使用切勿用于生产或未知环境。修改脚本需要一定的 Python 能力。问题四扫描速度异常缓慢原因可能是网络延迟高、并发度设置过低或者目标响应慢。排查与优化先测试单个目标的连接延迟。适当提高并发度修改脚本内参数。检查本地网络和系统资源CPU、内存是否充足。考虑是否因触发目标防护策略导致IP被临时限速。问题五success_log.txt中出现了成功记录但手动无法连接原因可能是“假阳性”。例如服务端接受了连接但随后立即断开或者脚本对成功状态的判断逻辑有瑕疵。解决这就是为什么强调必须手动验证。用wscat或编写一个简单的 Python WebSocket 客户端脚本尝试用记录的令牌建立连接并发送一条心跳或查询消息看是否能得到正常响应。5.2 给防御者的建议如何保护你的 OpenClaw 实例作为安全从业者我们不仅要懂得如何发现漏洞更要知道如何修复和防御。如果你正在运行 OpenClaw 服务以下措施至关重要立即修改默认令牌这是最基本、最重要的一步。部署后第一件事就是生成一个高强度、随机且唯一的令牌。使用密码管理器生成至少16位以上包含大小写字母、数字和特殊字符的复杂字符串。启用强认证机制如果 OpenClaw 支持考虑集成更强大的认证方式如 OAuth、JWT 或与现有的单点登录SSO系统对接避免使用简单的静态令牌。网络层隔离不要将 OpenClaw 的管理接口直接暴露在公网。将其部署在内网通过 VPN 或跳板机进行访问。如果必须公开则严格限制访问源 IP只允许可信的IP段连接。使用 WebSocket 安全WSS始终使用wss://而不是ws://为你的服务配置有效的 TLS/SSL 证书对传输数据进行加密。实施速率限制在服务端或前置的网关如 Nginx上对 WebSocket 连接请求实施速率限制。例如限制每个IP地址每分钟的连接尝试次数这能有效减缓暴力破解的速度。监控与告警在日志系统中监控认证失败事件。短时间内出现大量来自同一IP的认证失败日志应立即触发安全告警。定期审计与更新定期检查你的部署脚本和配置文件确保没有残留的默认密码或测试令牌。同时关注 OpenClaw 项目的安全更新及时打补丁。5.3 法律与道德红线再强调最后我必须再次强调使用此类工具的法律和道德边界。BruteClaw是一个功能强大的审计工具但它的力量来自于使用者的责任心。授权是前提没有授权就等于攻击。在测试任何系统之前务必获得资产所有者的书面授权。即使是测试自己的家庭实验室也最好有明确的范围界定。控制影响在授权测试中要明确测试时间窗口并选择对业务影响最小的时段进行。设置合理的并发度和速度避免造成服务中断。保护数据在测试过程中如果意外接触到非授权数据应立即停止并报告。不得读取、下载、篡改或泄露任何数据。规范报告发现漏洞后应通过规范的渠道向授权方提交详细、客观的报告协助其修复而不是公开炫耀或利用漏洞谋利。安全是一把双刃剑。BruteClaw这样的工具在正确的人手中是捍卫网络安全的利器在错误的人手中则可能成为破坏的凶器。希望每一位使用者都能恪守底线用技术去做正确的事。