其他身份验证机制的漏洞
翻译
原文:https://portswigger.net/web-security/authentication/other-mechanisms
- name: 翻译
desc: 原文:https://portswigger.net/web-security/authentication/other-mechanisms
bgColor: '#F0DFB1'
textColor: 'green'
2
3
4
# 其他身份验证机制的漏洞
在本节中,我们将介绍一些与身份验证相关的附加功能,并演示这些功能为何会受到攻击。我们还准备了几个交互式实验室,你可以将所学的知识付诸实践。
除了基本的登录功能外,大多数网站还提供附加功能,以允许用户管理其帐户。例如,用户通常可以在忘记密码时 更改或重置其密码。这些机制还可能引入新的漏洞。
网站通常会避免其主要登录页面中的已知漏洞。但是很容易忽略这样一个事实,假如攻击者能够创建自己的帐户,并因此能够轻松访问、研究这些附加页面,那这一点就会变得尤其重要。你需要采取类似的安全步骤,来确保其他相关功能同样健壮。
# 1.1保持用户登录
这是一个常见的功能选项,即使在关闭浏览器会话后,也可以保持登录状态。通常是一个简单的复选框,名为 “记住我” 或 “保持登录状态” 。
此功能一般通过生成某种类型的 “记住我”令牌 来实现,然后将其存储在持久性 Cookie 中。由于拥有此 cookie 可以有效地绕过整个登录过程,因此猜测此 cookie 是不切实际的(一般为 32 位随机字符串,很难猜测)。
但是,某些网站会根据可预测的静态值(例如用户名和时间戳)来串联生成此 Cookie。有些人甚至将密码作为 cookie 的一部分。如果攻击者能够创建自己的帐户,则这种方法特别危险,因为他们可以研究自己的 cookie,并推断出它是如何生成的。一旦他们确定了令牌的计算公式,他们就可以尝试暴力破解其他用户的 cookie 来访问他们的帐户。
假设,一些网站的 cookie 以某种方式加密,即使它使用了静态值,也不会被猜测到。如果加密操作正确,这可能是安全的。
但是,如果使用了简单的双向编码(如Base64)天真地以为 “加密” 了 cookie,则提供不了任何的保护。
就算使用单向哈希函数进行加密,也不是完全安全的。例如,加密时没有使用 salt(盐),并且攻击者能够识别哈希算法,则他们可以构建哈希过后的密钥列表(字典),来暴力破解此 Cookie。如果没有对 Cookie 应用类似的暴力猜测限制,则可以使用此方法 尝试绕过登录限制。
- name: 实验室-从业者
desc: 对保持登录状态的 Cookie 进行暴力破解 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/authentication/other-mechanisms/lab-brute-forcing-a-stay-logged-in-cookie
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6
即使攻击者无法创建自己的帐户,但他们仍然可以利用此类漏洞。例如使用一些常见的技术(如 XSS (opens new window)),攻击者可以窃取另一个用户的 “remember me” Cookie,并从中推断出 Cookie 是如何构建的。
假如网站是使用开源框架构建的,则构建 Cookie 的关键细节甚至可能被公开披露。
在极少数情况下,就算 Cookie 经过哈希处理,也可以从中以明文形式获取用户的实际密码。常见的哈希密码字典可以从网络上获得,因此,如果用户的密码出现在其中一个字典中,这就像 直接在搜索引擎里搜索密码一样简单。这恰恰说明了salt(盐)在有效加密中的重要性。
- name: 实验室-从业者
desc: 离线密码破解 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/authentication/other-mechanisms/lab-offline-password-cracking
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6
# 1.2重置用户密码
在实际场景中,一些用户可能会忘记他们的密码,因此,通常有一种方法 可以让他们重置密码。在这种情况下,寻常的 “基于密码的身份验证” 显然是不可能的,因此网站必须使用替代方法,来确保重置密码的用户是真实用户。因此,密码重置功能本质上是危险的,它的实现方式必须要安全。
通常,此功能有几种不同的实现方式,每种方式都有不同程度的漏洞。
# 1.2.1通过邮件发送密码
不言而喻,如果一个网站使用安全的方式处理密码,则永远不可能向用户发送当前使用的密码。相反,一些网站会生成一个新密码,并通过电子邮件将其发送给用户。
在这种情况下,安全性依赖于 生成的密码会在很短的时间内过期,或者 用户立即更改新密码。否则,这种方法非常容易受到中间人攻击。
通常,电子邮件不被认为是安全的,因为收件箱是持久性的,并且不是为 “机密信息的安全存储” 而设计的。许多用户通过不安全的渠道,在多个设备之间自动同步他们的收件箱。
# 1.2.2通过URL重置密码
重置密码的另一种更可靠方法,向用户发送一个唯一的 URL,将用户带到密码重置页面。
如果采用了安全性较低的实现方法,例如,使用带有易于被猜测参数的 URL 来标识正在重置的帐户,例如:
http://vulnerable-website.com/reset-password?user=受害用户名
在此示例中,攻击者可以更改user
参数,来引用他们已知的任何用户名。然后,他们将被直接带到一个页面,在该页面中,他们可以为这个用户设置新密码。
此过程的更好实现方式,生成一个高强度、难以猜测的令牌,并基于该令牌创建重置 URL。在最佳情况下,此 URL 不应提供有关于 正在重置哪个用户的密码的提示。
http://vulnerable-website.com/reset-password?token=a0ba0d1cb3b63d13822572fcff1a241895d893f659164d4cc550b421ebdd48a8
当用户访问这个 URL 时,系统应该检查后端 是否存在此令牌,如果存在,则应该重置哪个用户的密码。此令牌应在短时间后过期,并在重置密码后立即销毁。
然而,一些网站在提交重置表单后,无法再次对令牌进行验证。在这种情况下,攻击者只需要用自己的帐户 去提交重置表单,删除令牌,然后利用此页面重置任意用户的密码。
- name: 实验室-学徒
desc: 破坏密码重置的逻辑 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/authentication/other-mechanisms/lab-password-reset-broken-logic
bgColor: '#001350'
textColor: '#39d50c'
2
3
4
5
6
如果电子邮件中的重置 URL 是动态生成的,则可能容易受到 密码重置投毒 的攻击。在这种情况下,攻击者可能会窃取另一个用户的令牌,并使用令牌来更改其密码。
- name: 实验室-从业者
desc: 通过中间件实现密码重置投毒 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/authentication/other-mechanisms/lab-password-reset-poisoning-via-middleware
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6
# 1.3更改用户密码
通常,更改密码需要输入当前密码,然后输入新密码两次。这些页面基本上依赖于 与正常登录页面相同的验证过程,来检查用户名和当前密码是否匹配。因此,这些页面可能容易受到相同的攻击技术。
如果密码更改功能 允许攻击者直接访问它,而无需以受害用户身份登录,则密码更改功能可能特别危险。例如,如果在隐藏字段中提供了用户名,则攻击者就可能在请求中编辑此值,从而攻击任意用户。这可能会被用于枚举用户名和暴力破解密码。
- name: 实验室-从业者
desc: 通过密码更改功能进行密码暴力破解 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/authentication/other-mechanisms/lab-password-brute-force-via-password-change
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6