助你一臂之力
📋问题1:挖身份验证漏洞需要准备什么?
🎯信息收集(收集管理员,被攻击账号的相关消息)
🎯已有账号(将很大长度上提升挖到的概率)
🎯准备好字典
📋问题2:使用的工具有哪些?
🎯BP必备(爆破、数据包的分析)
🎯加解密工具(一些关键值一般会被加密)
一、身份验证定义
1、三个身份验证因素
(身份验证机制依赖于一系列技术来验证这些因素中的一个或多个)
知识因素:一些你知道,如密码或安全问题的答案。
占有因素:一些你有也就是像移动电话或安全令牌这样的物理对象。
内在因素:您的身份或行为,例如,您的生物特征或行为模式。
2、身份验证和授权
身份验证:验证用户是否确实是他们自称的那个人
授权:涉及验证用户是否被允许做一些事情
3、身份验证漏洞的产生
身份验证机制很弱:不能充分地防止暴力攻击
身份验证失败:实现中的逻辑缺陷或糟糕的编码允许攻击者完全绕过身份验证机制
第三方身份验证机制中的漏洞
————
示例:
1、基于密码的登录中的漏洞:
2、多因素身份验证中的漏洞
3、其他身份验证机制中的漏洞
4、实验的字典
用户名:
Authentication lab usernames | Web Security Academy
密码:
二、基于密码的登录中的漏洞
1、强制策略
强制特定用户名,强制特定的密码组成
2、用户枚举
观察网站行为的变化,以确定给定用户名是否有效
在尝试强行登录页面时,应特别注意以下方面的任何差异
1、状态代码:爆破返回的状态代码对于绝大多数都是错误的。如果返回不同的状态代码,则表明用户名正确
————
2、错误信息:有时返回的错误信息会有所不同,具体取决于用户名和密码是否都不正确或只有密码不正确。(如密码错误的提示)
————
3、响应时间:如果大多数请求都是以相似的响应时间处理的,那么任何偏离这个响应时间的请求都表明有更多的步骤。(如用户名有效,网站可能仅检查密码是否正确。这个额外的步骤可能会导致响应时间稍微增加)
————
涉及实验:
实验1:通过不同响应的用户名枚举
实验4:通过细微不同的响应进行用户名枚举
实验5:通过响应计时的用户名枚举
3、有缺陷的强力保护
暴力攻击会涉及多次失败,暴力保护的核心是尽可能巧妙地自动执行该过程,并降低攻击者尝试登录的速度。
————
防止暴力攻击的两种最常见方法是:
1、锁定账号:如果远程用户尝试登录失败的次数过多(或其他标准),则锁定他们尝试访问的帐户
锁定帐户可提供一定程度的保护,防止针对特定帐户的暴力强制。然而,这种方法不能充分地防止暴力攻击,在这种攻击中,攻击者只是试图获得对他们所能访问的任何随机帐户的访问权。 可以使用以下方法来解决此类保护问题: 1、建立可能有效的候选用户名列表。这可以通过用户名枚举或简单地基于公共用户名列表来实现。 2、确定一个非常小的密码候选名单,您认为至少有一个用户可能拥有这些密码。重要的是,您选择的密码数量不能超过允许的登录尝试次数。例如,如果您已计算出最多只能尝试3次,则最多需要选择3次密码猜测。 3、使用Burp Intruder之类的工具,对每个候选用户名尝试每个选定的密码。这样,您就可以尝试强行访问每个帐户,而不会触发帐户锁定。您只需要一个用户使用三个密码中的一个就可以危害帐户。 4、帐户锁定也无法防止凭据填充攻击。这涉及到使用大量的用户名:密码对字典,这些字典由在数据泄露中被盗的真实登录凭据组成。凭据填充依赖于许多人在多个网站上重复使用相同的用户名和密码这一事实,因此,字典中的一些受损凭据有可能在目标网站上也有效。帐户锁定无法防止凭据填充,因为每个用户名只尝试一次。凭据填充尤其危险,因为它有时会导致攻击者仅通过一次自动攻击就危及许多不同帐户的安全
2、锁定ip:如果远程用户连续进行过多的登录尝试,则阻止他们的IP地址
(都提供了不同程度的保护,但都不是无懈可击的,特别是在使用有缺陷的逻辑实现时)
用户速率限制 网站试图防止暴力攻击的另一种方法是通过用户速率限制。在这种情况下,在短时间内发出太多登录请求会导致您的IP地址被阻止。 用户速率限制有时比帐户锁定更可取,因为它不太容易受到用户名枚举和拒绝服务攻击。但是,它仍然没有完全安全。正如我们在前面的实验中看到的示例,攻击者可以通过多种方式操纵其表面IP来绕过拦截。 通常,只能通过以下方式之一解除阻止IP: 1、经过一段时间后自动执行 2、由管理员手动执行 3、用户在成功完成验证码后手动输入 4、由于该限制是基于从用户IP地址发送的HTTP请求的速率,因此如果您能够计算出如何通过单个请求猜测多个密码,有时也可以绕过此防御。
———
例如,如果多次登录失败,IP将被阻止。在一些实施方式中,但如果IP所有者成功登录,则用于失败尝试次数的计数器重置。这意味着攻击者只需每隔几次尝试就登录自己的帐户,以防止达到此限制。
在这种情况下,仅仅在整个单词列表中定期包含您自己的登录凭据就足以使这种防御措施实际上毫无用处。
————
涉及实验:
实验6:断蛮力保护、IP块
实验7:通过帐户锁定枚举用户名
实验13:暴力破解保护功能失效,每个请求有多个凭据
实验1:通过不同响应的用户名枚举
part1:
如果账号不存在,会有提示username不存在
(和实战中特别像)
part2:
爆破用户名
使用实验提供的usernaem
发现有一个长度不一样,提示的是密码的错误
账号:alterwind
part3:
爆破密码
使用实验提供的password
发现了有一个长度不一样的,302跳转
尝试一下是不是密码
密码:aaaaaa
part4:
登陆进去了
实验4:通过细微不同的响应进行用户名枚举
part1:
对用户名进行爆破
使用bp实验提供的username
在结果中发现有一个相应时长长一点,在想是不是username验证正确了,在验证密码了
(但最后结果是错的)
对爆破结果再分析
(提取错误的提示信息)
发现了错误提示不一样
(最后验证密码后:正确用户名后面是空格,错误用户名是一个点)
账号:root
part2:
对密码进行爆破
使用实验提供的password
熟悉的302跳转
密码:666666
part3:
登陆
root/666666
实验5:通过响应计时的用户名枚举
part1:
此实验,对ip有限制
爆破时候加上X-Forwarded-For:
payload1:
字典也就100来个,就设120就够了
payload2:
提前设置把提示信息提取出来
part2:
分析结果
把时间勾上
有4个的时间,差不多都是1000
oracle
agent
vagrant
alerts
part3:
对密码进行爆破
payload2:
改为密码字典
(有延迟,很难准确爆破出)
part4:
登陆账号
实验6:断蛮力保护、IP块
part1:
题目已经提供了
已有账号:wiener:peter
要攻击的用户名:carlos
(要准备和password一样多的账号数量,只能多)
因为每错次个就会封ip,所以在登陆错3次内,循环插入正确的账号和密码(且不能多线程,不然就容易直接错3次了)
(使用notepad++的替换功能)
正确账号:wiener
现在每2个里面就有一个正确账号
现在将密码与正确账号对应上(正确密码:peter)
part2:
开始使用
要攻击的用户名:carlos
payload1:
payload2:
part3:
结果分析(302是登陆成功后的跳转,找到账号为carlos的302跳转)
账号:carlos
密码:monitoring
part4:
登陆
实验7:通过帐户锁定枚举用户名
part1:
发现重复登陆5次就会锁定账号,所以把所有账号重复进行5次枚举(使用集束炸弹Cluster bomb),观察响应包
错误的payload2:添加5个null payload
(密码应该不能为空)
正确的payload2:
直接密码1-5,是一样的效果
part2:
分析账号
账号:att
part3:
爆破账号att的密码
虽然有锁定,但尝试观察报错信息
载入密码
分析结果:
有一个长度出奇的短
(应该是提示信息不一样,当通过长度无法区分的时候,就提取提示信息)
账号:att
密码:iloveyou
part4:
登陆
实验13:暴力破解保护功能失效,每个请求有多个凭据
part1:
可以发现请求以JSON格式提交登录凭据
整理的好看点
提示攻击的用户为carlos
将密码全部以json的格式添加到password关键字后面
先变一个开头(第一个"自己手动加上去)
再变一个结尾(最后一个"也自己手动加上去)
直接复制上去,要加上[数据块]
三、多因素身份验证中的漏洞
1、简述:
1、双因素身份认证实际性:验证生物特征因素对大多数网站来说是不切实际的。但是,基于以下内容的强制和可选双因素身份认证(2FA)越来越常见你知道的事以及你有的东西。这通常需要用户从他们拥有的带外物理设备输入传统密码和临时验证码。 2、双因素身份验证更安全:虽然攻击者有时可以获得单个基于知识的因素(如密码),但同时从带外来源获得另一个因素的可能性要小得多。因此,双因素身份验证显然比单因素身份验证更安全。然而,与任何安全措施一样,它的安全性取决于其实施情况。与单因素身份验证一样,实现不佳的双因素身份验证可以被击败,甚至完全绕过。 3、只是被验证两次:只有通过验证多个不同因素。以两种不同的方式验证同一因素不是真正的双因素身份验证。基于电子邮件的2FA就是这样一个例子。尽管用户必须提供密码和验证码,但访问验证码仅依赖于他们知道其电子邮件帐户的登录凭据。因此,知识认证因素只是被验证两次。
2、双因素身份验证令牌
1、一些网站会将验证码以短信的形式发送到用户移动的上。虽然这在技术上还在验证“你所拥有的东西”的因素,但它是开放的滥用。
————
2、首先,代码是通过SMS传输的,而不是由设备本身生成的。这就产生了代码被拦截的可能性。此外,还存在交换SIM卡的风险,即攻击者通过欺诈手段获得带有受害者电话号码的SIM卡。然后,攻击者将收到发送给受害者的所有SMS消息,包括包含其验证码的消息。
————
3、绕过双因素身份验证
有时,双因素身份验证的实现存在缺陷,以至于可以完全绕过它(但是我尝试的经验,一般是前后端分离,只是前端绕过了能进去,但是没有数据)
————
如果用户首先被提示输入密码,然后被提示在单独的页面上输入验证码,则用户在输入验证码之前实际上处于“登录”状态。在这种情况下,值得测试一下,看看在完成第一个身份验证步骤后是否可以直接跳到“logged-in only”页面。有时候,您会发现网站在加载页面之前实际上并不检查您是否完成了第二步
————
涉及实验:
实验2:2FA简单旁路
3、有缺陷的双因素验证逻辑
有时,双因素身份验证中的逻辑缺陷意味着,在用户完成初始登录步骤后,网站无法充分验证同一用户是否正在完成第二步
示例: 1、用户在第一步中使用其普通凭据登录,如下所示 POST /login-steps/first HTTP/1.1 Host: vulnerable-website.com ... username=carlos&password=qwerty 2、然后,在进入登录过程的第二步之前,他们将被分配一个与其帐户相关的cookie: HTTP/1.1 200 OK Set-Cookie: account=carlos GET /login-steps/second HTTP/1.1 Cookie: account=carlos 3、提交验证码时,请求使用此cookie来确定用户尝试访问的帐户: POST /login-steps/second HTTP/1.1 Host: vulnerable-website.com Cookie: account=carlos ... verification-code=123456 4、在这种情况下,攻击者可以使用自己的凭据登录,然后更改cookie到任何任意用户名时提交验证码 POST /login-steps/second HTTP/1.1 Host: vulnerable-website.com Cookie: account=victim-user ... verification-code=123456
如果攻击者随后能够强制验证代码,这将是极其危险的,因为这将允许他们完全基于用户名登录到任意用户的帐户。他们甚至不需要知道用户的密码。
————
涉及实验:
实验8:2FA断开逻辑
4、暴力破解2FA验证码
1、与密码一样,网站需要采取措施防止2FA验证码被强行使用。这一点尤其重要,因为代码通常是一个简单的4位或6位数字。如果没有足够的强力保护,破解这样的代码是微不足道的。
2、一些网站试图通过在用户输入一定数量的不正确验证码时自动注销用户来防止这种情况。这在实践中是无效的,因为高级攻击者甚至可以通过以下方式自动执行此多步骤过程创建宏。该涡轮入侵者扩展也可用于此目的
————
涉及实验:
实验16:使用暴力攻击的2FA旁路