web基础漏洞-逻辑漏洞
1、定义
由于代码设计不严谨所导致的漏洞。
逻辑漏洞是指攻击者利用业务的设计缺陷,获取敏感信息或破坏业务的完整性。一般出现在密码修改、越权访问、密码找回、交易支付金额等功能处。
逻辑缺陷表现为设计者或开发者在思考过程中做出的特殊假设存在明显或隐含的错误。
精明的攻击者会特别注意目标应用程序采用的逻辑方式,并设法了解设计者与开发者可能做出的假设,然后考虑如何攻破这些假设,业务流程和http/https请求篡改。
2、分类
2.1 可猜解、可爆破
- 弱加密方案
- 常见账号与弱密码
- token、登录凭证cookie、口令(优惠券、支付卡、聊天室口令)
- 验证码
- 可组合的问答,比如姓名、年龄、所在省市、学号等
2.2 步骤可跳过
一个业务需要多个步骤配合,而检查只在前面步骤进行,导致攻击者直接提交后面步骤从而绕过检查。
- 活动要求分享转发后领取,跳转到聊天应用后直接返回,绕过转发
- 活动要求看视频或者浏览满时间,打开后快速退出,进行绕过
- 业务分为多个步骤,不同页面或接口,要求按顺序进行,但直接跳过
- 直接访问后一请求url页面
- 直接向后一接口提交数据
- 业务分为多个步骤,同一页面或接口,通过某变量控制,比如step,修改值控制跳过步骤
- 业务最终步骤未进行完全的数据验证,从而使得中间的数据验证也无效。比如注册时判断手机号、用户名是否存在
(1)对于简单的,直接篡改请求
- 比如步骤控制是基于接口控制的,直接访问后续的接口
- 步骤是基于step类似变量控制,直接篡改其值
(2)对于步骤复杂的,可能需要对响应进行修改,借助浏览器自动完成后续步骤
2.3 未检查数据和数据关系
(1)水平越权或垂直越权
一些有意思的操作
- 发送未经允许的图片、文字
- 绕过房主权限登录
- 踢出其他用户
(2)未检查数据关系,比如支出、收入和余额,单价、数量和总价
- 账号和密码的对应
- 手机、邮箱和验证码的对应
- 单价与商品id的对应
- 单价、数量和总价的计算关系
- 总价和优惠、实付的计算关系
- 登录身份权限与访问资源所需权限比较
- 活动时间与请求时间的比较,提前或者延后参与,一般常见于游戏角色更新
- 聊天室实际总人数与限制总人数的比较
(3)未检查数据是否为合理范围,比如颜文字输出、负价支出
- 直接删除数据,即请求中不包含
- 置空
- 边界数值,过大过小,比如为负数
- 超出表达范围
- 一般篡改
2.4 重放
前端初次提交请求,符合后端验证被执行,然后再次重放该请求,再次被执行。
如果执行的动作需要用到请求中的参数,且参数理论上只能使用一次,那么就造成了重放漏洞。
比如优惠券、支付卡、邀请码的重复使用。
- 重复注册账号,使得同一手机号、同一用户名可以注册多个账号
- 重复使用优惠券
- 重复生成订单交易,而只花费一单
- 重复退货
一个经历:
- 某网站有多个域名,被设计为其中一个域名用来做登录,在该域名下登录后发放登录凭证cookie,以及响应中包含登录成功的口令
- 用户可以基于此口令跳转到其他域名下,然后对应的服务端验证该口令有效,发放对应域名下的登录凭证cookie。
- 此时,该口令可以重复使用,或者重复请求登录域名以获取新的口令。而该重放漏洞被csrf利用导致口令泄露,发送到攻击者网站。
2.5 竞争
即同时发生多个请求,所造成的状态更新不及时问题。
- 购物时,例如用户A的余额是10元,商品B是6元,商品C是5元,利用竞争条件,使用多线程同时发送购买商品B和C的请求,可能出现:
- 一件商品购买失败
- 都购买成功,但只扣了6元
- 都购买成功,但余额变成了-1元
- 类似的,比如新手优惠多次使用,一般优惠券多次使用,重复退款等
- 一次性优惠券使用多次,可用余额多次支出以负债,连续退款申请均被视为初次。
- 上传文件漏洞,在上传之后立即访问执行,甚至可以将该木马文件复制迁移到其他地方,从而绕过服务端对上传文件的检查。
也不一定是程序代码的并发,比如实际业务中,通过业务员或者操作过程中有业务员存在,攻击者同时多线程沟通多个业务员,使得业务员在同一时间段确认攻击者的数据,然后操作,操作结果在一段时间后才显示。
2.6 覆盖
- 会话固定漏洞,攻击者将自己已知凭证cookie覆盖受害者用户的登录凭证cookie
- 利用session覆盖重置密码
- 任意注册漏洞,攻击者注册覆盖原手机账号,如果站内获取数据或者注销账号不是依赖账号id而是手机号操作,那么可以获取其相关数据等操作
2.7 其他业务缺陷
非代码因素。不涉及具体的代码测试,是直接的设计不合理。比如
- 验证信息返回,验证码或者图片验证信息包含在响应中
- 活动积分大大超过对应的商品,典型的案例就是可口可乐积分兑换飞机
- 商品下单后退货,返回金额包括优惠券部分