Web安全学院
Web安全学院
  • 首页
  • 译序
  • 学习路线
  • 前篇
    • Web应用程序安全测试
    • 动态应用程序安全测试(DAST)
    • 带外应用程序安全测试(OAST)
  • 服务器端主题
    • SQL注入
      • SQL注入
      • SQL注入UNION攻击
      • 在SQL注入攻击中检索数据库
      • SQL盲注
      • SQL注入速查表
    • 认证
      • 认证漏洞
      • 基于密码登录中的漏洞
      • 多因素认证中的漏洞
      • 其他认证机制中的漏洞
      • 如何保护你的认证机制
    • 目录遍历
      • 目录遍历
    • 命令注入
      • OS命令注入
    • 业务逻辑漏洞
      • 业务逻辑漏洞
      • 业务逻辑漏洞示例
    • 信息泄露
      • 信息泄露漏洞
      • 如何发现并利用信息泄露漏洞
    • 访问控制
      • 访问控制漏洞与权限提升
      • 不安全的直接对象引用(IDOR)
      • 访问控制安全模型
    • 文件上传漏洞
      • 文件上传漏洞
    • 条件竞争
      • 条件竞争
    • 服务器端请求伪造(SSRF)
      • 服务器端请求伪造(SSRF)
      • 盲SSRF漏洞
    • XXE注入
      • XML外部实体(XXE)注入
      • XML实体
      • 发现并利用盲XXE漏洞
  • 客户端主题
    • 跨站脚本(XSS)
      • 跨站脚本
      • 反射型XSS
      • 存储型XSS
      • 基于DOM的XSS
      • XSS上下文
        • 跨站脚本上下文
        • 客户端模版注入
      • 利用跨站脚本漏洞
      • 内容安全策略
      • 悬空标记注入
      • 如何防范XSS漏洞
      • 跨站脚本(XSS)速查表
    • 跨站请求伪造(CSRF)
      • 跨站请求伪造(CSRF)
      • XSS与CSRF
      • 绕过CSRF令牌验证
      • 绕过SameSite Cookie限制
      • 绕过基于Referer的CSRF防御
      • 如何防范CSRF漏洞
    • 跨域资源共享(CORS)
      • 跨域资源共享(CORS)
      • 同源策略(SOP)
      • CORS和Access-Control-Allow-Origin响应标头
    • 点击劫持
      • 点击劫持(UI伪装)
    • 基于DOM的漏洞
      • 基于DOM的漏洞
      • 控制Web消息源
      • 基于DOM的开放重定向
      • 基于DOM的Cookie操纵
      • 基于DOM的JavaScript注入
      • 基于DOM的document-domain操纵
      • 基于DOM的WebSocket URL投毒
      • 基于DOM的链接操纵
      • Web消息操纵
      • 基于DOM的Ajax请求标头操纵
      • 基于DOM的本地文件路径操纵
      • 基于DOM的客户端SQL注入
      • 基于DOM的HTML5 Storage操纵
      • 基于DOM的客户端XPath注入
      • 基于DOM的客户端JSON注入
      • DOM-data操纵
      • 基于DOM的拒绝服务
      • DOM破坏
    • WebSocket
      • 测试WebSocket安全漏洞
      • 什么是WebSocket?
      • 跨站WebSocket劫持
  • 进阶主题
    • 不安全的反序列化
      • 不安全的反序列化
      • 利用不安全的反序列化漏洞
    • 测试GraphQL API
      • 测试GraphQL API
      • 什么是GraphQL?
    • 服务器端模板注入
      • 服务器端模板注入
      • 利用服务器端模板注入漏洞
    • Web缓存投毒
      • Web缓存投毒
      • 缓存设计缺陷的利用
      • 缓存实现缺陷的利用
    • HTTP Host标头攻击
      • HTTP Host标头攻击
      • 如何识别和利用HTTP Host头的漏洞
      • 密码重置投毒
    • HTTP请求走私
      • HTTP请求走私
      • 查找HTTP请求走私漏洞
      • 利用HTTP请求走私漏洞
      • 高级请求走私
        • 高级请求走私
        • HTTP/2降级
        • 响应队列投毒
        • HTTP/2专属载体
        • HTTP请求隧道
      • 浏览器驱动的请求伪造
        • 浏览器驱动的请求伪造
        • CL.0请求走私
        • 客户端异步攻击
        • 基于暂停的异步攻击
    • OAuth认证
      • OAuth 2.0认证漏洞
      • OAuth授权类型
      • OpenID Connect
      • 如何防范OAuth认证漏洞
    • JWT攻击
      • JWT攻击
      • 在Burp Suite中使用JWT
      • 算法混淆攻击
    • 原型污染
      • 什么是原型污染?
      • JavaScript原型和继承
      • 客户端
        • 客户端原型污染漏洞
        • 通过浏览器API进行原型污染
      • 服务器端
        • 服务器端原型污染
      • 预防原型污染漏洞
    • 基本技能
      • 基本技能
      • 使用编码混淆攻击
      • 在手动测试中使用Burp Scanner
Powered by GitBook
On this page
  • 密码重置的工作原理
  • 如何构造一个密码重置投毒攻击
  1. 进阶主题
  2. HTTP Host标头攻击

密码重置投毒

Previous如何识别和利用HTTP Host头的漏洞NextHTTP请求走私

Last updated 1 year ago

密码重置投毒是一种攻击技术,攻击者通过操纵易受攻击的网站,使其生成指向攻击者控制的域的密码重置链接。这种行为可以被利用来窃取重置任意用户密码所需的秘密token,最终导致其账户被入侵。

Research

密码重置的工作原理

几乎所有需要登录的网站都实现了允许用户在忘记密码时重置密码的功能。有几种方法可以实现这一点,安全性和实用性各不相同。其中最常见的方法大致如下:

  1. 用户输入用户名或电子邮件地址,并提交密码重置请求。

  2. 网站检查该用户是否存在,然后生成一个临时的、独特的、高熵的token,并将其与用户的后端帐户关联起来。

  3. 网站向用户发送一封包含密码重置链接的电子邮件。用户独特的重置token作为相应URL的查询参数包含在内:

    https://normal-website.com/reset?token=0a1b2c3d4e5f6g7h8i9j
  4. 当用户访问此URL时,网站会检查提供的token是否有效,并使用它来确定正在重置哪个帐户。如果一切符合预期,用户可以选择输入一个新密码。最后,该token被销毁。

与其他方法相比,这个过程简单且相对安全。然而,它的安全性依赖于这样一个原则,即只有预期的用户才能访问他们的电子邮件收件箱,因此,才能访问他们的独特token。密码重置投毒是一种窃取这个token以便更改另一个用户密码的方法。

如何构造一个密码重置投毒攻击

如果发送给用户的URL是基于可控输入(如Host标头)动态生成的,那么可以按照以下方式构造密码重置投毒攻击:

  1. 攻击者根据要求获取受害者的电子邮件地址或用户名,并代表他们提交密码重置请求。在提交表单时,他们拦截所产生的HTTP请求,并修改Host标头,使其指向他们控制的域。在这个例子中,我们将使用evil-user.net。

  2. 受害者收到来自网站的一封真实的密码重置邮件。看似包含一个普通的密码重置链接,关键是包含一个与他们的帐户关联的有效密码重置token。然而,URL中的域名指向攻击者的服务器:

    https://evil-user.net/reset?token=0a1b2c3d4e5f6g7h8i9j
  3. 如果受害者点击此链接(或以其他方式获取,例如被反病毒扫描器获取),密码重置token将被发送到攻击者的服务器。

  4. 现在,攻击者可以访问易受攻击的网站的真实URL,并通过相应参数提供受害者的被盗token。然后,他们可以将用户的密码重置为他们喜欢的任何密码,并随后登录到他们的帐户。

在真实攻击中,攻击者可能会试图增加受害者点击链接的概率,例如首先发送一个虚假的违规通知。

即使你无法控制密码重置链接,有时也可以使用Host标头将HTML注入到敏感的电子邮件中。请注意,电子邮件客户端通常不执行JavaScript,但是其他HTML注入技术,如dangling markup攻击,可能仍然适用。

LAB

LAB

LAB

基础密码重置投毒
通过中间件进行密码重置投毒
通过dangling markup进行密码重置投毒
我们的研究总监James Kettle在2013年首次记录了这种技术。
查看我们的研究页面,了解James和团队其他成员发现的更多创新技术的完整文章和视频演示。