从公开信息到远程解锁:电动滑板车安全漏洞引发关注!
2026/8/23 23:23:46 网站建设 项目流程

远程解锁电动滑板车

2026 年 8 月 21 日,阅读时长 9 分钟。注意:为保护该公司,所有可能指向该公司的信息都替换成了虚假示例。域名 `electricscootercompany.com.br`、应用程序包以及用户详细信息(别名、姓名和电子邮件)均为虚构,与真实公司信息无关。

一切始于一篇新闻报道。一家公司在当地城市投放了一批电动滑板车,多数人视其为新出行方式,而有人关注到这是一群连接互联网、后端系统尚未被探查过的设备。

首先要了解两件事:公司名称和普通用户使用服务的方式。文章提到公司名称,通过谷歌搜索找到其网站,使用流程为:打开手机应用程序;扫描滑板车二维码;付费解锁车辆;骑行。这是常规使用流程,有人想了解背后运作机制。

步骤 1:侦察

对与 `electricscootercompany.com.br` 相关内容进行梳理,通过子域枚举发现很多子域名,如 `www`、`app`、`api` 等。并非所有都是实际可用应用程序,`app`、`membro` 等基本指向同一页面,引导用户去应用商店,可探索新内容不多。

`dev` 主机返回 500 错误,设了 PHP 会话 cookie 但无可用信息。`validate` 返回 `Conta não localizada.`(即“未找到账户”),当时不知其所需参数,记录信息后继续探索。

有三个子域名较突出:`www.electricscootercompany.com.br` 是 WordPress 营销网站;`api.electricscootercompany.com.br` 是客户端使用的 REST API;`painel.electricscootercompany.com.br` 是供运营人员使用的 Angular 面板。网站无链接指向该面板,是通过枚举发现的,没链接不代表受严格保护。

步骤 2:无需登录即可访问面板

该面板对任何人可加载,是生产环境的 Angular 应用程序。下载 32 个 JavaScript 块并研究,发现 83 个端点,涉及用户和权限、车辆和地图等方面。这意识到目标价值,但仍无法访问。

尝试访问约 38 个受保护路由,因无有效会话,每个请求都返回 HTTP 401 错误。尝试的很多方法都没奏效,如直接访问路由被身份验证拦截,未签名的管理员 JWT 被后端拒绝等。身份验证在直接攻击面前表现良好,应用程序指明找到真实用户并获取其密码的途径。

步骤 3:WordPress 提供首个线索

公共的 WordPress REST API 允许列出作者信息,响应显示用户 ID 为 1,公开名称为 `admin`,别名是 `electricscootercompany`。通常是普通 WordPress 枚举操作,但这里可在运营面板上用相同标识符尝试。

登录时,根据输入内容不同有不同响应:存在的身份 + 错误的密码 → "Senha inválida"(即“密码无效”);不存在的身份 → "E-mail não encontrado"(即“未找到电子邮件”)。后端表明该身份在运营系统中也存在,将普通枚举操作变成有价值的目标列表。

步骤 4:暴力破解

确认用户身份后,对登录进行暴力破解。系统无重复尝试限流,最终找到有效密码,成功登录面板。这揭示问题根本原因,因无真正速率限制,知道用户身份就能通过猜测密码创建有效会话。

此后操作基于在 Burp 中捕获的真实会话。解码后的 JWT 显示账户信息,级别 `1000` 表示管理员角色,令牌有效期约 950 天,获取会话后,除非有人特意终止,会话将在数年内一直有效。

步骤 5:面板不再只是设想

拥有有效会话后情况改变,之前返回 401 错误的路由现在返回真实运营数据。捕获的请求中记录 168 个第一方请求,涉及 118 种不同的主机、方法和路径组合。

面板提供多种内容的读取权限,如 `/mapas/__veiculos` 车队地图、`/docas` 停靠点信息等。地图将数字信息与实际运营联系起来,点击标记可查看车辆详细信息。一些响应数据量很大,显示拥有的访问权限,Burp 在响应数据量约 3 KB 时会截断,记录的状态、路径和大小信息准确。

步骤 6:不只是查看数据

想知道面板能否写入数据,会话显示可对车辆记录、用户账户、代金券批次进行 `PUT` 调用,还能在测试账户上切换免费骑行标志,可更改业务规则和记录。

车辆注册表可查找车队中滑板车并打开编辑表单,表单有“解锁”“锁定”和“重启 IoT”按钮,操作会作用于物理设备。IoT 模块会发送命令,后端会响应确认信息。仅对一辆车测试表明,被盗用的管理员账户能在任何地方解锁滑板车并随时锁定。

让朋友在发送命令瞬间拍摄滑板车,结果成功,滑板车解锁可骑行,无需付费、扫描二维码或触碰。未对多辆车自动化测试,也未触碰可能导致危险的操作,一次操作证明 Web 面板可控制实际硬件设备。

值得记录的死胡同

拦截移动应用程序

安卓应用程序用 Flutter 开发,很多逻辑编译在 `libapp.so` 中。多次尝试才成功拦截会话,很多代理和证书组合无法获取想要的流量。捕获流量后,33 个流程显示 `validateApp` 保护机制依赖静态头部和承载令牌,有助于绘制 API 地图,但仍需有效令牌,这种绕过方法不能进入面板。

大范围地图查询

正常边界框查询可返回车辆位置和电池信息,扩大查询范围到整个国家大小时,后端返回 403 错误要求重新登录,此后相同 JWT 对之前可访问的端点也返回 403 错误。大范围查询触发防御机制导致会话失效,可能是异常过滤器或令牌撤销机制,这是后端有效防御情况之一。

行程历史记录

向历史记录端点发送车辆引用信息,得到空集或 400 错误,无法访问他人行程记录,但响应泄露了一些内部类名和 PHP/ORM 消息。

SQL 注入和伪造 JWT

尝试获取凭证前,尝试 SQL 注入和伪造 JWT 未成功,登录字段无法 SQL 注入,未签名或篡改的令牌会被拒绝。最终获得的访问权限并非来自 SQL 注入或 JWT 漏洞,而是枚举、弱密码和过高权限设置。

漏洞链的根本原因

这一系列问题由身份验证、认证和权限管理方面的问题累积导致:WordPress 暴露用户信息,登录确认用户存在,重复尝试允许暴力破解,凭证授予直接的 1000 级访问权限,管理员令牌有效期约 950 天,面板集中了数据、更改和 IoT 命令,最终可远程解锁滑板车。最大问题是缺乏有效备份机制,密码是开放互联网与控制物理硬件按钮间的唯一防线,过程中无二次登录要求,对 IoT 命令无额外确认。

实际影响

凭借被盗用的管理员凭证,可访问运营面板、车辆等地图、运营拓扑结构和地理围栏信息、车辆和 IoT 设备清单、广泛的用户数据和财务模块、编辑测试账户记录和福利、远程向测试滑板车发送“打开”和“关闭”命令。在实际攻击中,可能导致未经授权的车队使用、欺诈、运营损失、用户数据泄露以及间接的物理风险,且可通过一个凭证大规模实施。

结论

远程解锁滑板车途径并非始于复杂逆向工程或罕见加密漏洞,而是始于被遗忘的子域名、公开的用户信息和两条不同的错误消息。复杂攻击尝试失败,真正奏效的是明显攻击方式,已知用户身份、易猜测密码和缺乏第二道防线,足以将 Web 访问权限转化为对物理设备的控制权。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询