浅谈逻辑漏洞
越权漏洞、密码找回漏洞、支付逻辑漏洞、指定账户恶意攻击、登录体系安全、业务一致性安全、业务数据篡改、验证码突破、数据重放安全
前言
整理下逻辑漏洞:程序本身逻辑不严或逻辑太复杂,导致一些逻辑分支不能够正常处理或处理错误,造成的一系列漏洞
逻辑漏洞通常很难发现的,因为通常不会在应用程序的正常使用中暴露它们。但是,攻击者可以通过开发人员“意料之外”的方式与应用程序进行交互来攻击利用
业务逻辑的主要设计意图之一是强制执行设计应用程序或功能时定义的规则和约束。业务规则规定了在特定场景发生时应用程序应如何反应,包括阻止用户会对业务产生负面影响的行为
逻辑上的缺陷可以使攻击者绕过这些规则。例如,他们可能无需购买即可完成交易。在其他情况下,可能通过将意外的值传递到服务器端逻辑,攻击者有可能诱使应用程序执行不应执行的操作
基于逻辑的漏洞可能非常多样,并且通常是应用程序及其特定功能所独有的。识别它们通常需要一定数量的专业知识,例如对业务流程的理解或攻击者在给定上下文中可能具有的目标。逻辑漏洞很难使用自动漏洞扫描程序进行检测
挖掘逻辑漏洞过程
逻辑漏洞只出现在业务流程中
- 发现网站的功能模块,如修改密码
- 针对具体功能确定业务流程,如购物:挑选商品–>立刻购买–>显示购买信息–>提交订单–>付款
- 拦截HTTP/HTTPS请求,分析参数
- 修改参数,尝试触发逻辑漏洞
逻辑漏洞示例
本文将简单介绍以下这些逻辑漏洞:
- 越权漏洞
- 密码找回漏洞
- 支付逻辑漏洞
- 指定账户恶意攻击
- 登录体系安全
- 业务一致性安全
- 业务数据篡改
- 验证码突破
- 数据重放安全
一、越权漏洞
1、基础概念
授权
应用程序首先会判断用户的身份(账号密码登录),随后确认后续请求是否由该用户发出(会话管理),然后判断是否允许用户执行“所请求的操作”或访问“所请求的资源(访问控制)”
- 垂直访问控制:控制不同权限等级的用户访问应用程序不同的功能;如“管理员”可以修改/删除账号,而普通账号无法操作。
- 水平访问控制:控制用户只能访问自己的资源,而不能访问其他用户相同类型的资源;如“银行程序用户只能从自己的账号进行付款,而不能查看其他用户的账户”。
- 上下文相关的访问控制(多步骤):防止用户以错误的顺序执行操作;如“零售网址阻止用户付款后,修改订单信息”等逻辑顺序。
越权
简单讲,就是访问了没有授权的资源或信息
三种访问控制模型分别对应着
- 垂直越权
- 水平越权
- 交叉越权
并且这些漏洞之间没有明确界限,按照漏洞的表现形式和检测方法差异会分为很多不同的类型:
- 未受保护的功能
- 基于标识符的访问控制漏洞
- 基于多步骤的访问控制漏洞
- IDOR
- 不安全的访问控制机制
- 访问控制绕过漏洞
2、水平越权
很好理解,就是Bob可以访问甚至修改Alice的信息和资源
一个例子如下:
这段源码就有任意密码修改漏洞 假设有两个用户:Alice,UserID=1;Bob,UserID=2 Bob发请求修改密码时,拦截数据包,并修改ID为1,则Alice的密码被修改
作为应对措施 可以对密码进行二次验证
3、垂直越权
简单讲,就是管理员和普通用户可以访问对方的资源或信息 通常可能是截获了cookie之类的
一个解决方案:做个过滤器
4、交叉越权
是前两个的合集 可以这么理解:技术部的员工干了人事部部长的事。。。
这个文档里有几个例子: 访问控制/越权漏洞 – 学习笔记
5、防范
- 基础安全架构,完善用户权限体系。要知道哪些数据对于哪些用户,哪些数据不应该由哪些用户操作
- 鉴权,服务端对请求的数据和当前用户身份做校验
- 不要直接使用对象的实名或关键字
- 对于可控参数进行严格的检查与过滤
二、密码找回漏洞
过程
- 分析数据包,定位敏感信息 在实现找回密码功能时,有些网站会在返回包里加入一些敏感内容
- 分析找回机制 看是通过邮箱验证码还是手机验证码验证用户身份的
- 修改数据包验证 改cookie等信息
- 任意密码找回 通过分析验证码、cookie、状态码找回、修改密码——或者跳过验证步骤、找回方式等步骤,直接跳到设置新密码界面
一个例子:
三、支付逻辑漏洞
网上看到一张图挺直观
一个例子如下:
商品数量为负
一般出现在有虚拟币的网站 导致结果:支付金额为负
一个例子:
在计算价格时,没有对负数进行验证 导致可以输入负数的商品数“赚钱”
四、指定账户恶意攻击
这个就是对输入密码错误次数限制的反向思维 就是想封锁你的账户 故意多次输入错误密码
五、登录体系安全
1、暴力破解
主要是弱密码 用弱密码字典,或者社工生成针对性的字典去爆破密码 在线生成社工密码
2、cookie安全
有的网站对cookie不加密,也不base64编码,直接明文表示。可以自己重构组建cookie
3、加密测试
测试cookie、用户名、密码等敏感信息是否加密、使用了什么加密算法,然后解密
4、登录验证绕过
直接在url里输入要进入的页面路径、文件名,看能不能不登录就直接访问
5、任意注册
- 不验证手机号,不要求提供手机验证码(或者可绕过) 比如生成十亿条手机号,然后批量注册,将没有注册过的手机号都注册掉,影响正常用户的注册
- 或者只验证手机号,不验证是否注册过 比如这个手机号a用来注册一个微信号,然后a不用了,营业厅又把这个手机号卖给b了,b又拿着这个手机号注册了一个微信。结果b新注册的微信覆盖掉了a的微信(只是举例,纯属虚构)
六、业务一致性安全
1、手机号篡改
抓包,将目标手机号改为自己的手机号,然后自己的手机号就接收到了验证码 有的网站只会验证验证码是否正确,没绑定用户,不验证是发给谁的
2、邮箱和用户名更改
同上,只是改的是邮箱和用户名
3、订单ID更改
改ID,第一次下了5万的订单,第二次下一个5块钱的订单 可以抓包将第二次的订单号改成第一次的订单号 或者换成别人值钱的订单号,系统可能会将第一次的订单发两次
4、商品编号更改
改商品编号,比如本来买的是5毛钱的1号商品,改成50k的2号商品
5、用户ID篡改
使用自己的账号密码登录成功,获取登录成功的状态码。然后将ID换成别人的ID,系统如果只验证状态码的话,就会以别人的ID登录
6、流程顺序
比如一个自动售货机,本来应该是先收钱,再吐商品。换个顺序,就成了先吐商品,再收钱。然后你就能拿了商品就跑
七、业务数据篡改
1、金额数据篡改
修改商品价格 0元购(一般是虚拟货币,比如用金币、Q币支付),0.01元购(一般是RMB支付,因为银行卡每次转账的金额必须大于等于0.01)
2、商品数量篡改
修改商品数量,本来只买1件衣服,改成买了100件衣服
3、最大数限制突破
比如特价商品限购1件,改成10件
4、金额&优惠组合修改
顾名思义,同上
八、验证码突破
1、暴力破解
验证码爆破,有的验证码就是0000-9999,可以一个一个试
2、时间、次数突破
有的验证码在一定时间内可以重复使用 比如使用手机验证码登录,然后登录完之后,还可以使用这个验证码修改密码(如果修改密码需要用到手机验证码的话),或者再重新登录一次
3、回显测试
进入找回密码页面,输入手机号,获取验证码,服务器会向手机发送验证码 可以抓包查看返回包信息,有时返回包中会包含验证码
4、验证码绕过测试
注册的时候需要手机验证码,此时可以随便填一个手机号 然后抓包改状态码,比如将0改为1,将false改为true
5、验证检验机制猜解
验证码生成有规律,可以猜测 比如是用户名加当前时间:这一次是0001,下一次是0002,下下一次是0003……验证码可控,我们能猜出下一次验证码是什么
九、数据重放安全
1、恶意注册
同任意注册
2、短信&邮件炸弹
有的只在前端验证,比如60s后才能重新发送短信验证码,但是后端没有验证 可以让他一直重发,耗尽他短信池的流量,一般用来做DDoS
3、条件竞争
比如上传一个木马,服务器识别到就会删除一个 同时发100000万个,然后不停的请求执行这个木马 在某一刻,服务器还没识别到这是个木马并删除的时候,你先请求执行这个木马——只要你上传的速度大于他删除的速度,总会成功请求一个的
4、信息遍历
比如有的网站,id=1,就返回1号用户的信息;id=2,就返回2号用户的信息……id=10000,就返回10000号用户的信息 重发的时候,可以设置id逐步加1,就能遍历所有人的信息
结语
对逻辑漏洞做个小梳理
红客突击队于2019年由队长k龙牵头,联合国内多位顶尖高校研究生成立。其团队从成立至今多次参加国际网络安全竞赛并取得良好成绩,积累了丰富的竞赛经验。团队现有三十多位正式成员及若干预备人员,下属联合分队数支。红客突击队始终秉承先做人后技术的宗旨,旨在打造国际顶尖网络安全团队。