一、漏洞介绍
逻辑漏洞是指由于程序逻辑不严谨导致一些逻辑分支处理错误造成的漏洞。
在实际开发中,因为开发者水平不一没有安全意识,而且业务发展迅速内部测试没有及时到位,所以常常会出现类似的漏洞。
二丶常见类型
三、挖掘思路
首先将所有逻辑漏洞的问题分为前端和后端两个部分,先测试绕过前端规则限制再测试绕过后端规则限制,一般情况下只要能够突破原有规则限制的都就可以算是漏洞。
挖掘逻辑漏洞总体步骤分为以下三步:
- 明确业务逻辑流程,根据业务需求的特点,有针对性的进行测试。
- 寻找流程中可以被操控的环节,分析可被操控环节中可能产生的逻辑问题。
- 修改参数触发逻辑问题,重放包对比结果差异。
四、漏洞情景
1、登录模块
- 暴力破解
- 任意用户/密码登陆
- 短信/邮箱轰炸
- 验证码绕过/爆破/重放/回传
- 用户名/手机号枚举
- 越权登陆(例如修改数据包中用户ID)
- 账号权限绕过(越权) Cookie伪造 用户空密码登陆
2、注册模块
- 前端验证绕过
- 用户任意/批量注册
- 恶意验证注册账户
- 账户重复注册
- 用户名/绑定手机号枚举
- 注册信息插入XSS
- 短信/邮箱轰炸
- 验证码绕过/爆破/重放/回传
3、密码找回
- 任意/批量用户密码重置
- 任意邮箱/手机号验证(验证码与绑定用户未统一验证)
- 用户绑定手机号枚举
- 新密码劫持
- 短信验证码劫持/绕过/回传/爆破/重放
- 用户邮箱劫持/篡改
4、购买支付/充值
- 商品金额/数量篡改
- 替换支付模块
- 交易信息泄露
- 虚假充值金额
- 充值账户/金额/数量篡改
- 支付验证绕过
- 整数溢出,int最大值为2147483647
- 修改本地JS或服务端返回的数据包中的关键值
5、个人资料
- 手机号/用户/邮箱枚举
- 修改个人资料插入XSS
- 邮箱/用户/手机号篡改
- 用户信息遍历/泄露
- 越权修改他人账户资料
6、订单
- 订单信息遍历/泄露
- 订单信息泄露导致用户信息泄露
- 越权修改/删除他人订单
7、评论模块
- 无session/token导致CSRF
- 评论时插入XSS
- 遍历用户ID导致用户信息泄露
8、验证码安全
- 验证码参数删除绕过
- 验证码生成规律预测
- 验证码图像内容可被工具识别
- 验证码长期不失效,进行爆破
- 验证码回显到页面或者数据包中
- 单个验证码可多次重复利用
- 短信验证码与手机号未统一验证
- 短信验证码未做发送时间限制,导致短信轰炸
- 可能存在万能验证码
关于验证码
- 万能验证码:
程序员在开发验证码模块时,为了方便调用验证码验证功能是否完善,故意设置了几个万能的验证码作为测试数据。在开发结束后由于程序员的疏忽,没有删除该测试验证码数据从而导致该漏洞的产生。
- 验证码回传:
通过抓包的方式,可以看到验证码内容回显在了数据包中;或者通过查看网页源代码可以看到验证码中的内容,导致正确验证码可以被直接读取利用到。
- 删除验证码绕过:
通过抓包将验证码的值删除或者直接删除验证码参数,然后将修改后的数据包进行重放导致验证码验证被绕过。
- 验证码绕过:
其实这里不只是验证码,在某些密码找回,或者验证用户凭证的时候,会根据返回的状态码进行校验,假设验证码是正确的,返回的状态码为1,错为2,这里我们就可以通过抓取响应包,修改状态码为1,即可达到验证绕过。最开始的时候我不会抓响应包后来才知道怎么抓,很简单,就是在Burp里面的Do intercept -> Response to this request。
- 验证码爆破:
此处验证码爆破通常是指手机短信验证的方式,由于没有对输入同一个验证码的次数做限制,并且验证码的内容太简单,例如4位或者6位的纯数字组成。可以通过Burp的Intruder模块对验证码内容进行爆破,直到匹配到正确的验证码。
- 验证码重放:
首先,输入错误的验证码,进行抓包重放一次,观察验证的返回的数据包内容,再用正确的验证码再进行抓包重放,对比两个数据包的差异,然后根据这些差异验证码是否失效。
然后将正确的验证码发送至Burp的Intruder模进行不断的重放,比较这些数据包是否都是正确验证码时返回的一样内容,如果数据包内容一样说明存在验证码重放的漏洞。
- 任意用户密码重置:
通常发生在忘记密码处,由于系统没有严格匹配用户忘记密码时的验证方式,通过抓包修改用户参数,导致任意用户的密码都能够被重置。
比如某个忘记密码功能处采用手机号短信验证的方式来重置用户密码,如果该验证手机号没有对用户账户进行绑定,我们可以通过抓包修改绑定的手机号码为我们的手机号,即可造成密码重置。