身份验证是核心防御机制中最薄弱的环节,身份验证机制也是攻击者的主要攻击目标之一。
验证机制是应用程序防御恶意攻击的中心机制。它处于防御未授权的最前沿,如果用户能够突破那些防御,他们通常能够控制应用程序的全部功能,自由访问其中的数据缺乏安全稳定的验证机制,其他核心安全机制(如会话管理和访问控制)都无法有效实施
验证机制最常见的方式是信息系统要求用户提交用户名与密码,正确则允许用户登买错误则拒绝用户登录。
验证机制问题主要分为两个方面 : 分别为 设计缺陷和执行缺陷 。
Web应用程序常用的验证机制有 :
有些应用程序需要用户注册时用户名符合某一特定规则,比如需要满足“姓名缩写_数字”的这种形式,其中数字是为了防止用户名重复,也就是说如果在存在姓名缩写相同的情况下后面要跟数字或者进行数字累加。这种在学校邮箱注册时是比较常见的,通过这种方式攻击者可以很方便的获得大量有效用户名。
极少部分的应用程序不要求用户名的唯一性,这就可能造成这样的问题。
在恰巧有两名用户使用相同的用户名及密码的情况下,应用程序要么阻止第二个用户设置密码,要么允许其设置相同的密码。前者这种情况可能导致第一名用户的密码泄露给第二名用户,这种情况下攻击者如果想获得某个已知用户名对应的密码则可以通过注册功能针对于此用户名使用不同的密码注册,如果应用程序返回禁止注册,那么我们可以推测出此次注册时的密码就是这个用户名对应的密码。后者则可能导致第二名用户可以访问第一名用户的状态。
弱口令(Weak Password)指容易被他人猜到的口令,除123456、12345678admin等常见口令外,生日、姓名、手机号、1qaz@WSX也被称为弱口令。
为节省攻击成本,通常会适用弱口令字典进行字典攻击
一些应用程序在用户注册设置密码时,出于一些原因往往会对密码进行如下处理:
上述操作均会减少应用程序的密码空间,攻击者通过仔细分析应用程序的密码处理规则后,可以适当修改自己的暴破字典从而提高暴破的成功率。
在像学校,企业这种存在批量注册大量用户需求的应用程序中,经常会为批量用户设置默认密码,这种默认密码可以是相同的也可以是与用户名或者其身份证信息等有关系的。这种情况下攻击者可以通过Google hacking来在公开信息汇总收集大量初始密码,也可以根据默认密码规律推测出大量密码。
暴力破解(Brute Force),也可称为蛮力攻击,指利用举法将所有的可能性-一尝试,理论上可以破解所有密码问题。实际测试中,考虑到攻击成本问题,通常使用字典攻击(Dictionary Attack),即逐一尝试用户自定义词典中的可能密码(单词或短语)的攻击方式。
如果应用程序允许用户在登录失败很多次后,仍能继续尝试登录,那么这种情况下此应用可能存在暴破攻击。为了防止暴破攻击,应用程序应该设置用户登录失败次数上限,当用户失败的登录次数达到上限后应用程序应该阻止用户进一步的登录。但是通过前端脚本或者Cookie来统计用户失败的登录次数是不可靠的,因为这些都是攻击者可以接触到并且可以修改的,如果服务器端使用Session来存储用户失败登录的次数这样就可靠的多。除了用户登录次数的统计问题外,如何处理失败登录次数达到上限的用户也是一个需要谨慎处理的问题,如果用户在登录失败很多次后被锁定,但是锁定状态下的用户使用正确密码登录时和使用错误密码登录时Web应用程序的响应信息不同那么此时此应用还是存在暴破漏洞。
对于暴力破解,还有一些多余的提示信息可以利用。比如登录失败后,提示“用户名不存在”“用户未注册”等提示信息,通过这些信息可以更加快速“密码错误”、的推断出用户名及密码。
多余的提示信息
可预测信息
在暴力破解的时候,若拥有验证码还需要绕过验证码,验证码常见的有图片验证码和短信验证码。
图片验证码
短信验证码
案例:查看其中的isVerfi参数,第一次传入1返回3没有得到验证码,但是修改参数为0之后返回2,绕过了验证码的限制
案例:某OA系统验证码设计缺陷导致可以暴力破解用户
案例:某OA系统设计缺陷导致可暴力破解账户大量敏感信息泄漏,其中yongping/12345为管理员,权限很大
案例:某OA系统设计缺陷导致可暴力破解账户大量敏感信息泄漏
在逻辑漏洞中密码重置问题是比较常见的一种场景,常见于用户修改密码页面、用户找回密码页面等涉及到网站重置密码功能的页面。
修改密码
目前的修改密码的方式大概可以分为两种,第一种是要求用户键入用户名、旧密码新密码、确认新密码四部分,一些Web应用程序会忽略修改密码处旧密码错误输入次数过多的问题,这就容易被攻击者利用来进行密码暴破;还有一种最不安全的情况就是只需要用户键入用户名、新密码、确认新密码即可更改用户名相应的密码,这种情况下攻击者无需暴破即可获得正确的用户名及密码组合
找回密码
常见密码重置问题
案例:修改Respone
填写验证码点击下一步,利用Burpsuit进行抓包,需设置Burp拦截Response包
若返回包中具有明显的参数字段,如yes/no、:success/failed、0/1等字段,可以尝试修改为成功,或是走一遍正确的流程,记录成功的返回包
放包跳转至更改密码界面,可直接修改成功密码
一些应用程序为了方便用户访问通常会提供“记住密码”的功能,此功能通常仅通过cookie中的某个字段来实现。比如Cookie中会设置一个存储用户名的字段来实现基础我的功能如果这样的话攻击者仅需要随便注册一个用户然后将Cookie中用户名修改为其想要访问用户的用户名即可实现对目标用户的访问。Cookie中还可能通过存储个ID字段来唯一的标识用户,这种情况下攻击者可以遍历ID从而实现遍历访问用户。
目前很多应用程序在注册时都会要求用户填入邮箱信息,并在稍后发送给用户一封激活邮件,如果邮件中保存有用户的初始用户名及密码并且这种邮件有没有及时的删除在邮件泄露或者邮箱被攻击者攻破的情况下,则会泄露应用程序的密码。
除此之外有些激活URL可能存在某种规律,攻击者可以通过注册,连续地注册用户来观察这种规律,从而推测其他用户的激活URL。
如果Web应用程序在网络环境中以明文的方式传递证书,那么攻击者则可能通过探、中间人等各种方式获取。
验证机制在代码实现过程中也可能由于编码者某些疏忽造成安全问题
1.使用控制的一个账户执行一次完整、有效的登录。使用拦截代理服务器记录提交的每一份数据、收到的每一个响应
2.多次重复登录过程,以非常规方式修改提交的数据。比如,对于客户端传送的每个请求参数或Cookie
3.仔细检查应用程序对提交的每个畸形请求的响应,确定任何不同于基本情况的差异
4.根据这些观察结果调整测试过程。如果某个修改造成行为改变,设法将这个修改与其他更改组合在一起,使应用程序的逻辑达到最大限度
有些对于安全性要求较高的应用可能会采取多阶段登录验证机制,比如一个多阶段验证机制可以有以下三个过程组成:
多阶段登录机制确实可以明显的提高登录验证的安全性,但是更多的阶段同样意味着可能潜在有更多的执行缺陷。比如可能存在以下几个常见的缺陷:
测试多阶段验证机制可以按照以下步骤进行:
本文部分图片摘自深信服安全服务认证工程师课程课件中,为方便个人学习使用,勿作商用!!!!文字内容为自己手打,并非直接搬运!如有侵权,请联系删除!!!
本文档所提供的信息仅用于教育目的及在获得明确授权的情况下进行渗透测试。任何未经授权使用本文档中技术信息的行为都是严格禁止的,并可能违反《中华人民共和国网络安全法》及相关法律法规。使用者应当合法合规地运用所学知识,不得用于非法入侵、破坏信息系统等恶意活动。我们强烈建议所有读者遵守当地法律与道德规范,在合法范围内探索信息技术。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。