about逻辑漏洞

1.概述

逻辑漏洞是指由于程序逻辑不严或逻辑太复杂,导致一些逻辑分支不能够正常处理或处理错误,一般出现在任意密码修改(没有旧密码验证)、越权访问、密码找回、交易支付金额等。 这种漏洞一般防护手段或设备无法阻止,因为走的是合法流量也没有防御标准。

​ 逻辑漏洞的破坏方式并非是向程序添加破坏内容,而是利用逻辑处理不严密或者代码问题或固有不足,操作上并不影响程序的允许,在逻辑上是顺利执行的。

2.逻辑漏洞与通用型漏洞的区别

常见的通用型漏洞(例如OWASP漏洞),通过一些漏洞扫描工具,都可以自动或半自动的扫描出来,且每一种都有其相对固定的手工探测手法。

但逻辑漏洞就很不一样,由于其和自身的功能、逻辑有很大的关系,每一处的漏洞出现可能存在一定的独特性,很难复制或者通过规则脚本和漏扫工具扫描出来,因此逻辑漏洞大多需要配合代码审计和手段测试才可以发现相关漏洞,这样的特性就使得工具是无法替代人工的。

3.逻辑漏洞的分类

越权漏洞
密码修改
密码找回
验证码漏洞
支付漏洞
投票/积分/抽奖
短信轰炸

4.逻辑漏洞的一般挖掘方式

基本步骤:
1,先尝试正确操作流程,记录不同找回方式的所有数据包
2,分析数据包,找到有效数据部分
3,推测数据构造方法
4,构造数据包验证猜测

5.一些逻辑漏洞的解读

(1)越权漏洞

概括一下就是该用户取得了原本不属于其的权限,主要分为水平越权和垂直越权。

产生原因:水平越权和垂直越权虽然在定义上有所不同,但是他们产生的原因是一样的,都是账户体系上在判断权限时不严格导致存在绕过漏洞,这一类的绕过通常发生在cookie验证不严,简单判断用户提交的参数,归根截底,都是因为这些参数实在客户端提交,服务端未严格校验
详细的请看前面关于基础漏洞的总结

(2)密码修改/重置

概念:密码重置这个功能本身没有问题,但如果对密码重置功能的验证机制不够完善就形成了漏洞。

密码修改

1.第一种,如果存在csrf漏洞我们就可以直接修改一波
2.如果存在越权漏洞就可以直接修改其他人的密码
3.点击修改后抓包测试,观察数据包有没有验证类似cookie随机数,如果没有的话可以尝试修改用户名,手机号或者uid来尝试重置其他密码
​ 如果后台是通过向注册手机或者注册邮箱来重置密码的,关于验证码的漏洞我们都可以尝试,这种方式的前提是你已经通过某种方式进入到了对方的个人中心所以意义不大。

找回密码的

一般情况下当我们点击找回密码的时候都是通过验证手机号或者邮箱,这就又变成了验证码的问题
1.验证码发送后前端返回
2.验证码时效导致验证码爆破
3.验证码有规律可控
4.验证码被放回在返回包中
5.输入验证码后通过修改响应包的状态来重置密码
6.验证码为空(原理就是后台未考虑验证码为空的情况,直接就是如果存在,然后下面仅判断了存在的情况)绕过过或使用万能密码
7.拦截数据包,发送验证码时可以向多个手机号发送验证码,这个时候就可以添加个云短信,直接接受验证码完成修改

修复建议

1.接受验证码的邮箱和手机号不可由用户控制,应该直接从数据库中读取出来
2.加强验证凭证复杂度,防止暴力破解
3.限制验证凭证错误次数,单个用户在半个小时内验证码错误三次,半小时内精致找回密码。
4.验证码凭证设置失效时间
5.验证凭证不要保存在页面
6.输入用户邮箱或ID,手机号取验证凭证的地方需要设置验证码防止短信炸弹和批量找回等
7.验证凭证跟用户名、用户ID、用户邮箱绑定、找回密码是验证当前凭证是否是当前用户的

(3)密码找回

密码找回是出现逻辑漏洞问题最多的一个地方,因为它的交互流程最多,目前找回密码的方式比较常见的有邮箱验证码、手机验证码、以及密码问题

输入用户名/邮箱/手机阶段

交互过程;即输入要重置账户信息点击确定时,大部分应用都用会直接从数据库中读取用户邮箱和手机信息,并且发送验证码,还有部分程序在输入用户名后,会提示使用手机还是邮箱找回密码

在提交的时候可以直接抓包修改手机或者邮箱参数,这是如果后端没有做验证,原本发送给账户A的验证码就会发送到被我们篡改的手机或者邮箱上,利用接收到的验证码即可重置密码

填写验证码和新密码阶段

填写验证码和新密码就意味着我们已经拿到了验证码或者重置密码的URL这里存在的问题有

1.验证凭证较简单,可以暴力破解(没有错误次数的限制)
2.验证凭证算法简单,凭证可预测
3.验证凭证直接保存在源码里(目前这种比较少,不过也存在一定比例,一种是在点击发送验证码的时候就可以直接在源码里看到给当前手机或者邮箱发送过去的验证码,还有一种就是在输入验证码的时候源码里面就直接保存了正确的验证码)

发送新密码阶段

凭证未绑定用户:我们在找回密码的时候发送到邮箱的链接通常是如下这个样子
http:///www.xxx.com//user.php?m=repwd&uid=用户ID&key=凭证密钥&email=邮箱
当请求这个链接的时候,后端程序根据uid和key对应上了从而判断这个找回密码的链接是否有效,但是在将新密码提交到服务器的时候
服务端并没有判断当前这个key是否跟uid或者email匹配,而是直接修改掉了uid或者email指定的用户密码这样我们只要拦截修改密码的请求包,将里面用户参数修改成我们要篡改密码的用户账户即可

修复建议

1.接受验证码的邮箱和手机号不可由用户控制,应该直接从数据库中读取出来
2.加强验证凭证复杂度,防止暴力破解
3.限制验证凭证错误次数,单个用户在半个小时内验证码错误三次,半小时内精致找回密码。
4.验证码凭证设置失效时间
5.验证凭证不要保存在页面
6.输入用户邮箱或ID,手机号取验证凭证的地方需要设置验证码防止短信炸弹和批量找回等

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值