逻辑漏洞
逻辑漏洞应用在方方面面,主要是根据应用不通产生的逻辑方面漏洞不同。比如金融网站和互联网网站以及购物网站,挖掘逻辑漏洞方法完全不一样。
可能出现的场景
- 用户注册场景
- 登录场景
- 支付场景
- 修改资料场景
- 信息交互场景
- 绑定手机场景
三类业务逻辑漏洞
权限控制类
平行越权
平行越权访问漏洞,指的是权限平级的两个用户之间的越权访问。
比如银行汇款记录查询,张三先是查询了自己的汇款记录,然后发现可以通过修改URL中的参数来查询李四的汇款记录
某网站通过抓包修改自己信息的POST请求的参数,达到篡改他人信息的目的
垂直越权
- 垂直越权访问漏洞,指的是权限不等的两个用户之间的越权访问。
- 比如没有登录,直接能够无权限的情况下访问某页面
- 在博客论坛中,一个正常的普通用户,通过
burpsuite
抓包修改自己的用户ID为管理员的用户ID,使其成功登录了管理员的帐号。
接口控制
- 特殊接口,没有做访问权限控制,某些接口是并不是面向用户开放的,但是因为某种原因被泄露了,致使未授权用户访问接口
- 乌云一个未授权接口导致信息泄露的例子
密码修改找回类
凭证可破解
- 四位或者六位的验证码,开发者没有做频率限制,可以爆破
凭证可获取
密保或者验证码返回到相应包中
乌云丽子美妆的例子
- 通过找回密码功能
- 输入手机号,验证码,下一步,抓包,查看返回值
token可猜解
- token参数为时间戳MD5,用户名,邮箱等等
- 比如通过邮箱找回密码,邮箱中会收到密码重置链接,如果可以猜出token是什么组成的,如果是生成的时间戳,那么可以选出时间段去爆破时间戳,达到重置密码的目的
- tip:
Token
是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token
便将此Token
返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
前端校验
- 验证码校验成功后,通过
js
代码验证响应包来完成校验 - 比如请求修改密码,验证原密码后返回的是一个
Json
,通过修改Json
某个字段,可以绕过前端校验
步骤可跳过
- 可以直接跳过某些验证修改密码
支付类
支付金额
支付数量
- 数量的参数没有做数字签名导致可随机更改,经典的修改方式就是改为负数或者很大
并发提现
- 通过多线程同以时间发送大量提现请求,当数据库事务未加锁情况下出错
- 假设现有一个用户在系统中共有2000元可以提现,他想全部提现。于是该用户同时发起两次提现请求,第一次提交请求提现2000元,系统已经创建了提现订单但还未来得及修改该用户剩余金额,此时第二次提现请求同样是提现2000元,于是程序在还未修改完上一次请求后的余额前就进行了余额判断,显然如果这里余额判断速度快于上一次余额修改速度,将会产生成功提现的两次订单,而数据库中余额也将变为-2000。而这产生的后果将会是平台多向该用户付出2000元。
优惠券
- 遍历领取,同一个优惠券使用多次,未满足条件使用代金券
经典的测试方法
想发现逻辑漏洞,那就必须了解业务的运作流程,比如修改密码类的逻辑漏洞,你就得注册个账号,走一遍正常的找回密码流程,在这中途可以抓包看看业务时如何实现跳转到密码修改的,看看请求包和响应包中有什么,如果请求包中带有账户名称,你就得尝试修改账户名称,看看可不可实现修改其他账户密码的目的,查看返回包,如果到响应包带有验证信息,或者它直接做的是前端校验,那么你就可以尝试修改响应包来达到修改密码的目的。