1.17.1 接口未授权访问漏洞(API Unauthorized)

0x01 漏洞描述

接口未授权访问,顾名思义在不进行请求授权的情况下,能够直接对相应的业务逻辑功能进行访问、操作等。通常是由于认证页面存在缺陷或者无认证、安全配置不当等导致的。

0x02 常见应用场景

最常见的应用场景为后台某些API接口在不登录系统的情况,直接请求对应的URI即可访问、操作该接口。

攻击者最常见的攻击途径主要有如下:

  1. 通过目录扫描工具加载目录字典探测
  2. 通过模糊测试URI中的参数进行探测
  3. 通过前端静态文件,比如JS、webpack等查找

0x03 漏洞危害

  • 攻击者可在没有认证的情况下直接操作对应的API接口,可直接被非法增删改次数据。
  • 因为攻击是在未认证下进行的,所以后续无法通过定位用户进行异常排查。

0x04 修复建议

  1. 对于后台接口,确保所有API接口先经过登录控制器。
  2. 在验证用户身份权限前不进行任何数据的交互。

1.17.2 越权操作漏洞(Out Of Authority)

0x01 漏洞描述

越权漏洞是指应用程序未对当前用户操作的身份权限进行严格校验,导致用户可以操作超出自己管理权限范围的功能,从而操作一些非该用户可以操作的行为。

0x02 常见应用场景

越权漏洞一般可以分为:垂直越权,水平越权两种

  • 水平越权

攻击者可以访问与他拥有相同权限的用户的资源,资源权限ID不变,资源归属ID改变;

  • 垂直越权

低级别攻击者可以访问高级别权限用户的资源,资源权限ID不变,资源归属ID改变;

低级别攻击者可以访问高级别权限用户的资源,资源权限ID改变,资源归属ID不变;

0x03 漏洞危害

  • 垂直越权漏洞会导致低权限用户用来执行高权限用户的功能,获取高权限用户的账号信息,执行高权限用户的操作功能。
  • 水平越权会导致同一层级间的用户可以互相访问到对方的敏感信息,如姓名、手机号、联系地址、个人资料、订单记录等。同时还可能会以其他平级权限用户的身份来执行某行功能,如删除,添加,修改等。

0x04 修复建议

  • 设计表时对用户ID、订单ID等根据ID进行操作的ID字段进行随机化、比如加入时间戳的md5值md5($datetime.$id)
  • 严格校验当前用户操作与当前登录用户身份权限是否匹配。

1.17.3 越权操作漏洞(Defective Payment)

0x01 漏洞描述

支付漏洞是指应用程序在支付环节,由于数据包中没有签名校验或者签名算法太容易而被破解,导致可以直接拦截数据包,修改支付订单中的参数为恶意非法参数而导致的支付缺陷。

0x02 常见应用场景

2.1 购买

  • 修改支付的价格
  • 修改支付的状态
  • 修改支付的数量or价格为999999999999...
  • 修改购买数量or价格为负数
  • 修改金额为负数
  • 重放成功的请求(包含支付附加值时等)
  • 使用任意用户优惠券
  • 修改运费价格
  • 修改支付接口为不存在的支付接口
  • 替换支付订单号
  • 并发数据库锁处理不当

2.2 业务风控

  • 刷优惠券
  • 无限试用
  • 套现

2.3 订单

同越权漏洞

0x03 漏洞危害

攻击者利用支付缺陷,通过绕过签名、修改支付参数等各种途径,直接会给企业造成巨大风险。

0x04 修复建议

  1. 对支付数据表进行数据包加密;
  2. 对提交数据包做数据签名处理,保证支付数据参数无法修改;
  3. 服务端效验客户端提交的参数;
  4. 服务端严格校验支付参数的合法性,比如金额、数量的长度,金额、数量的正负等;
  5. 对于用户提交的数据,应从数据库重新拉取,并校验用户提交与用户所有是否匹配;
  6. 对于多线程等并发问题,可以先打入队列,在与数据库交互;

1.17.4 用户模块漏洞(User module)

0x01 漏洞描述

目前大部分应用程序都会有用户模块,比如用户登录、注册、忘记密码、修改密码、申诉等,如果后端逻辑存在缺陷将直接导致大量用户信息泄漏,甚至直接接管任意用户。

0x02 常见应用场景

2.1 注册

  • 短信验证码or邮箱验证码可爆破导致任意账号注册
  • 数据库和后端逻辑处理不一致可能导致注册覆盖
  • 万能注册码or验证码
  • 注册处用户名暴力猜解
  • 邮箱大小写、手机号前缀、账号前后使用空格/回车/换行等处理不当
  • 特殊注册地址or测试地址

2.2 登录

  • 撞库or账号密码爆破
  • 登录处用户名暴力猜解
  • 默认密码
  • 任意账号锁死
  • 账号劫持
  • 短信验证码or邮箱验证码可爆破导致任意账号登录

2.3 忘记密码

  • 忘记密码处用户名暴力猜解
  • 任意用户短信轰炸or短信接口滥用
  • 发送验证随机码至任意验证设备导致任意用户密码重置
  • 随机码可被暴力猜解导致任意用户密码重置
  • 随机校验码在返回包或者cookie中
  • 忘记密码流程前端校验导致验证绕过

2.4 修改密码

  • 越权修改任意用户密码
  • 修改密码未校验旧密码
  • 同上相关场景...

2.5 Session

  • Session机制可被猜测or爆破
  • Session伪造
  • Session泄漏
  • Session会话固定

0x03 漏洞危害

攻击者通过相关措施可直接查看、修改、添加、删除用户信息,以站内信任用户身份发起其他非法操作,甚至直接接管网站任意用户。

0x04 修复建议

  1. 严格校验当前操作与当前用户身份是否匹配;
  2. 登录、忘记密码、修改密码、注册等处建议添加图形验证码,并保证使用一次即销毁;
  3. 用户中心操作数据包建议添加包含随机码的签名,防止数据包被非法篡改;
  4. 用户中心操作建议对数据包or特殊字段进行加密等处理;

1.17.5 验证码模块漏洞(Captcha module)

0x01 漏洞描述

验证码模块为线上应用系统中最常用的模块,涉及用户模块、业务逻辑、支付模块等几乎所有模块。验证码模块通常是用来抵御攻击者攻击的常用手段。一旦验证码模块存在逻辑缺陷,将导致对应的业务逻辑存在极大风险。通常将验证码模块分为两类:短信or邮箱验证码、图形验证码。

0x02 常见应用场景

2.1 图形验证码

  • 没有销毁,可复用:图形验证码要遵循一个原则,在一次对比之后,无论用户输入正确与否,都有立刻将验证码销毁
  • 图形验证码前端校验
  • 图形验证码校验一次,永久使用
  • 图形验证码过于简单可被简单程序识别
  • 图形验证码在响应包、响应头、cookie中

2.2 短信/邮箱验证码

  • 短信/邮箱验证码四位,可被爆破
  • 短信/邮箱验证码未失效或失效期过长,可被爆破
  • 短信/邮箱验证码未和手机号或用户身份等做绑定
  • 短信/邮箱验证码规则简单,可被猜测到
  • 短信/邮箱验证码可预测
  • 短信/邮箱验证码没有验证次数限制
  • 万能验证码
  • 短信/邮箱验证码在响应包、响应头、cookie中
  • 短信/邮箱验证码用于手机短信/邮箱轰炸
  • 短信内容自定义:常出现在一些发送短信的后端管理系统中,容易出现类似钓鱼等类型的攻击
  • 短信平台自身问题

0x03 漏洞危害

验证码模块通常是用来抵御攻击者攻击的常用手段。一旦验证码模块存在逻辑缺陷,将导致对应的业务逻辑存在极大风险。

0x04 修复建议

4.1 图形验证码

  • 验证码后端随机生成,且验证码内容不能出现在客户端的网页源代码以及response数据包中。
  • 验证码要有背景干扰,干扰元素包括:颜色、位置、数量且元素需要随机变化。
  • 验证码后端校验,且使用一次后即失效。
  • 验证码在不同场景下需要与请求的参数一起提交给后端进行校验,且优先校验验证码。

4.2 短信验证码

  • 请求获取短信接口添加图形验证码。
  • 单位时间内:单个IP、单个手机号设置请求限制,具体需要根据场景而定。
  • 单个手机号每日短信验证码获取上限。
  • 发送短信接口地址白名单。

4.3 其他验证途径

  • 语音验证码
  • Google reCaptcha
  • 滑动验证码
  • 点选验证码
最后修改:2021 年 06 月 23 日 10 : 57 PM
如果觉得我的文章对你有用,请随意赞赏