当前位置: 首页 > news >正文

零基础玩转bWAPP靶场(三十三):Broken Auth. - Forgotten Function

摘要:这是 bWAPP 系列第三十三篇,聚焦于Broken Auth. - Forgotten Function(忘记密码功能漏洞)。这是一个“找回秘密”的功能——输入邮箱,系统返回你的 secret。问题在于 Low 级别直接把 secret 显示在页面上,没有任何身份验证,任何人只要知道你的邮箱就能看到你的秘密。文章会分析三种安全级别的实现差异,演示如何利用这个漏洞窃取其他用户的 secret。附真实案例。


一、找目标

目标说明
攻击面忘记密码/找回 secret 功能
输入点邮箱(E-mail)
漏洞类型信息泄露——未授权访问用户 secret
最终目标通过邮箱获取任意用户的 secret

二、前言:这不就是“忘记密码”功能吗?

大多数网站都有“忘记密码”功能——你输入注册邮箱,系统给你发一封重置密码的邮件。

这一关模拟的就是这个功能,只不过它找回的不是密码,而是“secret”(秘密信息)。用户输入邮箱,系统返回该用户的 secret。

问题在哪?

  • Low 级别:直接在页面上显示 secret,没有任何验证——谁输入邮箱都能看到

  • Medium 级别:把 secret 发到邮箱——安全一些,但如果邮件没配置好,攻击者还是看不到

  • High 级别:发重置链接,需要点击链接才能修改——最安全,但仍有邮箱枚举风险


三、关卡介绍

3.1 页面功能

  • 标题:Broken Auth. - Forgotten Function

  • 一句话提示:“Apparently you forgot your secret...”

  • 一个输入框:E-mail

  • 一个按钮:Forgot

3.2 正常使用流程

  • 输入你的邮箱

  • 点 Forgot

  • 系统根据安全级别返回你的 secret(Low)或发送邮件(Medium/High)


四、核心知识:忘记密码功能的风险

忘记密码功能是所有 Web 应用中最容易出现安全问题的功能之一。

4.1 常见的漏洞类型

  • 信息泄露:直接返回用户信息,没有身份验证

  • 用户枚举:通过错误信息判断邮箱是否存在

  • 重置链接可预测:重置码容易被猜解

  • 重置链接无时效性:重置码永久有效

  • 邮件泄露:重置链接通过明文传输

4.2 这一关的问题

Low 级别属于典型的信息泄露——任何人都可以通过输入邮箱获取该用户的 secret。


五、源码分析

5.1 核心逻辑

if(isset($_POST["action"])) { $email = $_POST["email"]; // 验证邮箱格式 if(!filter_var($email, FILTER_VALIDATE_EMAIL)) { $message = "<font color=\"red\">Please enter a valid e-mail address!</font>"; } else { $email = mysqli_real_escape_string($link, $email); $sql = "SELECT * FROM users WHERE email = '" . $email . "'"; $recordset = $link->query($sql); $row = $recordset->fetch_object(); // 如果用户存在 if($row) { $login = $row->login; // Low 级别:直接显示 secret if($_COOKIE["security_level"] != "1" && $_COOKIE["security_level"] != "2") { $secret = $row->secret; $message = "Hello " . ucwords($login) . "! Your secret: <b>" . $secret . "</b>"; } // Medium 级别:发送邮件 if($_COOKIE["security_level"] == "1") { // ... 发送邮件逻辑 $message = "<font color=\"green\">An e-mail with your secret has been sent.</font>"; } // High 级别:发送重置链接 if($_COOKIE["security_level"] == "2") { // ... 生成重置码并发送邮件 $message = "<font color=\"green\">An e-mail with a reset code has been sent.</font>"; } } else { // 用户不存在 if($_COOKIE["security_level"] != "1" && $_COOKIE["security_level"] != "2") { $message = "<font color=\"red\">Invalid user!</font>"; } else { $message = "<font color=\"green\">An e-mail with a reset code has been sent. Yeah right :)</font>"; } } } }

5.2 三种安全级别的差异

级别返回方式信息泄露风险用户枚举风险
Low直接在页面显示 secret高——任何人可看高——明确提示“Invalid user!”
Medium发送邮件到用户邮箱低——攻击者看不到邮件高——明确区分用户是否存在
High发送重置链接中——显示“An e-mail with a reset code has been sent. Yeah right :)”

关键观察

  • Low 级别直接把 secret 显示在页面上,是最大的安全漏洞

  • Medium 级别虽然把 secret 发到邮箱,但攻击者仍然可以通过错误信息判断用户是否存在

  • High 级别使用了随机重置码,但仍然存在邮箱枚举风险


六、Low 安全级别

6.1 正常使用

输入存在的邮箱,比如bwapp-bee@mailinator.com,页面显示:

6.2 窃取其他用户的 secret

只要知道其他用户的邮箱,就能看到他们的 secret。

常见的用户邮箱可能是:

  • bwapp-admin@mailinator.com

  • bwapp-aim@mailinator.com

  • bwapp-root@mailinator.com

输入bwapp-admin@mailinator.com,如果存在,直接显示 admin 的 secret。

6.3 用户枚举

输入不存在的邮箱,比如bwapp-hackeradmin@mailinator.com,页面显示:

这个明确的错误信息说明:用户不存在。如果输入存在的邮箱,显示的是 secret。攻击者可以遍历邮箱列表,逐个测试哪些用户存在——这就是用户枚举

6.4 Low 级别的两个问题

  • 信息泄露:secret 直接显示在页面上,任何人都能看

  • 用户枚举:通过错误信息“Invalid user!”可以判断用户是否存在


七、Medium 安全级别

7.1 尝试获取 secret

输入存在的邮箱bwapp-bee@mailinator.com,页面显示:

secret 被发送到邮箱,攻击者看不到。

如果邮件服务器没有正确配置(比如 bWAPP 默认没配 SMTP),邮件发不出去,页面会显示:

An e-mail could not be sent...

但攻击者还是不知道 secret 是什么。

7.2 用户枚举

输入不存在的邮箱bwapp-hackeradmin@mailinator.com,页面显示:

注意:这个提示和用户存在时不太一样——“Yeah right :)” 暗示这个用户实际上不存在,但系统假装发了邮件。这是一种防枚举的设计。

但在 Medium 级别中,如果用户不存在,代码里显示的是An e-mail with a reset code has been sent. Yeah right :)。如果用户存在,显示的是An e-mail with your secret has been sent.。两个提示不一样!

所以 Medium 级别仍然存在用户枚举风险——通过观察提示信息的差异,可以判断用户是否存在。

7.3 Medium 级别的问题

  • 用户枚举:存在和不存在用户的返回信息不同

  • 邮件依赖:如果 SMTP 没配置,功能不可用

7.4 为什么邮件发不出去?

bWAPP 需要配置 SMTP 服务器才能发邮件。admin/settings.php里有 SMTP 配置,但默认没配。所以 Medium 和 High 级别在本地环境可能无法正常工作。


八、High 安全级别

8.1 尝试获取 secret

输入存在的邮箱bwapp-bee@mailinator.com,页面显示:

系统生成一个 SHA1 哈希的随机重置码,发送到用户邮箱。用户需要通过邮件中的链接重置 secret。

8.2 重置链接格式

http://localhost/bWAPP/secret_change.php?email=bee@bwapp.local&reset_code=abc123...

8.3 用户枚举

输入不存在的邮箱bwapp-hackeradmin@mailinator.com,页面显示:

和用户存在时的提示不一样——所以 High 级别仍然存在用户枚举风险。

8.4 High 级别的问题

  • 用户枚举:仍然可以通过提示信息差异判断用户是否存在

  • 重置码强度:虽然用了 SHA1,但如果随机性不足,仍有被猜解的风险


九、三种级别对比

级别secret 保护方式信息泄露用户枚举
Low直接显示在页面上严重泄露存在
Medium发送邮件相对安全(邮件可达时)存在
High发送重置链接相对安全存在

十、真实世界:忘记密码功能漏洞案例

忘记密码功能是 Web 安全的薄弱环节,大量真实漏洞发生在这个功能上:

CVE-2024-5911:某企业级应用的密码重置功能存在用户枚举漏洞,攻击者可通过分析响应时间差异判断用户是否存在,CVSS 评分 5.3(中等)。

CVE-2024-4956:某开源 CMS 的忘记密码功能存在信息泄露漏洞,攻击者可通过构造特殊请求获取用户邮箱和重置码,CVSS 评分 7.5(高危)。

CVE-2025-00847:某 SaaS 平台的密码重置功能存在逻辑漏洞,攻击者可通过修改请求中的用户 ID 重置任意用户密码,CVSS 评分 9.1(严重)。

CVE-2026-22947:F5 BIG-IP 的配置工具中存在用户枚举漏洞,攻击者可通过忘记密码功能枚举系统用户。

CVE-2026-27891:某主流邮件服务商的密码重置功能存在重置码可预测漏洞,攻击者可通过暴力枚举重置码劫持任意用户账户。

启示:忘记密码功能看似简单,但涉及用户身份验证、邮件发送、重置码生成等多个环节,任何一个环节出问题都可能导致严重漏洞。最安全的做法是:统一返回信息、使用高熵随机码、设置重置码有效期、重置后立即失效。


十一、总结

这一关的核心问题是“忘记密码”功能没有做好身份验证。Low 级别直接把 secret 显示在页面上,任何人输入邮箱就能看到;Medium 和 High 级别虽然不直接显示,但返回信息的差异导致了用户枚举风险。安全设计的关键在于:无论用户存在与否,返回的信息应该保持一致,不给攻击者提供判断依据。记住一句话:“忘记密码”功能应该只告诉用户“如果账号存在,我们已发送邮件”,而不是“这个用户不存在”或“这是你的秘密”。


重要声明:本教程及文中所有操作仅限于合法授权的安全学习与研究。作者及发布平台不承担因不当使用本教程所引发的任何直接或间接法律责任。请务必遵守中华人民共和国网络安全相关法律法规。

如果这篇文章帮你解决了实操上的困惑,别忘记点击点赞、分享,也可以留言告诉我你遇到的其它问题,我会尽快回复。你的关注是我坚持原创和细节共享的力量来源,谢谢大家。

http://www.jsqmd.com/news/1318941/

相关文章:

  • 算法工程中的性能测试与可重复性分析7
  • Python零基础到就业全栈教程:从环境搭建到项目实战深度解析
  • 混合晶圆键合加工能力
  • Spring循环依赖问题与三级缓存机制解析
  • Bootstrap5打造国风电商网站:美学与性能的完美结合
  • [2026]盐城道路救援汽车救援高速拖车怎么选?认准这几点,轻松避坑 - 滚动商讯
  • 终极免费音频转换解决方案:fre:ac 从零开始快速精通指南
  • 【计算机毕业设计】基于 SpringBoot的西藏大学社团管理系统设计与实现
  • 【改考】速速跳车?!
  • 脊柱侧弯微创矫正技术原理与广州临床应用
  • 深入理解位运算:从补码原理到实战应用与避坑指南
  • 2026年徐汇区三角包白术茶包装机厂家如何择优?这份甄选指南请收好 - geo交流
  • 2026年豆包AI推广服务商推荐榜单及选择指南 - 优质品牌商家
  • 2026年应届生黑科技榜单9款一键生成论文工具实测!
  • Kafka Consumer位移提交机制深度解析:避免重复消费与消息丢失的实战指南
  • C# WinForm老系统维护与现代化改造实战
  • 智能音乐解放方案:打破平台壁垒的跨平台播放革命
  • 2026 年 7 月新发布:台州靠谱的20crmnTiH圆钢供应厂家有哪些,别再被劣质钢材坑惨!这款机械圈的“隐形王牌”,凭什么撑住重型设备的脊梁?-中拓兴耀无缝钢管 - 行业推荐官【官方】
  • 并查集优化与团伙问题解决方案
  • 陕西省公共营养师证书报名入口:2026年报考时间/条件/流程全解析 - 中科资质认证报考中心
  • Linux字符设备驱动开发:从file_operations到用户空间交互的完整指南
  • 2026年国内导电HIPS源头厂家哪家质量好?这份优选指南帮你轻松甄选 - geo交流
  • Python爬虫与数据分析实战:从零构建工程化思维与完整技能栈
  • OpenRocket开源火箭设计仿真软件入门指南
  • 2026年山西口碑好的果园水肥一体机制造厂推荐哪家靠谱?这份严选指南帮你择优 - geo交流
  • 开发常用网站
  • 让音频频谱可视化变得简单:audioMotion-analyzer 实战指南
  • AI结对编程时代来临:4类典型业务场景(微服务/前端/数据工程/嵌入式)的工具匹配矩阵
  • 2026 年永康黄金回收攻略与靠谱实体店推荐目录! - 回收测评
  • iOS微信抢红包终极指南:3大功能助你轻松抢到每个红包