一、逻辑漏洞
1.简介
逻辑漏洞是指由于程序逻辑不严或逻辑太复杂,导致一些逻辑分支不能够正常处理或处理错误,一般出现任意密码修改(没有旧密码验证)、越权访问、密码找回、交易支付金额等。
对常见的漏洞进行过统计,发现其中越权操作和逻辑漏洞占比最高,在我们所测试过的平台中基本都有发现,包括任意查询用户信息、任意删除等行为;最严重的漏洞出现在账号安全,包括重置任意用户密码、验证码暴力破解等。
2.详细解读
其中不安全对象引用指的是平行权限的访问控制缺失,比方说,A和B两个同为一个网站的普通用户,他们之间的个人资料是相互保密的,A用户的个人资料可以被B用户利用程序访问控制的缺失恶意查看,由于A用户和B用户之间是一个同级的账号,因此称为平行权限的访问控制缺失。功能级别访问控制缺失指的是垂直权限的访问控制缺失,比方说,A账号为普通账号、B账号为管理员账号,B账号的管理页面时必须是以管理员权限登录后方可查看,但A账号可通过直接输入管理页面URL的方式绕过管理员登录限制查看管理页面,由于A用户和B用户的权限是垂直关系,因此称为垂直权限的访问控制缺失。该类型属于业务设计缺陷的安全问题,因此传统的扫描器是无法发现的,只能通过手工的渗透测试去进行检查。在金融平台中以平行权限的访问控制缺失较为常见。
3.常见的逻辑漏洞
交易支付、密码修改、密码找回、越权修改、越权查询、突破限制等各类逻辑漏洞。
4.如何挖掘逻辑漏洞
确定业务流程--->寻找流程中可以被操控的环节--->分析可被操控环节中可能产生的逻辑问题--->尝试修改参数触发逻辑问题
5.交易支付中的逻辑问题
1、加入购物车时是否可以修改购买数量为负数,商品价格是否可以修改.
2、确认购物车信息时是否可以修改商品数量为负数,是否存在折扣限制突破问题,是否可以修改商品总金额.
3、输入物流信息时是否可以控制运费,如果可以,尝试修改为负数.
4、确认订单后跳转支付接口时是否可以修改支付金额,可否不支付直接跳转到交易成功环节.
6.密码修改逻辑漏洞
(1)需要验证原密码
· 验证不输入原密码可否修改,xss或抓包将提交原密码的参数进行删除
· 验证原密码输入处是否准在sql注入
· 验证是否跳过输入原密码可以直接修改
(2)不需要验证原密码
· 验证修改密码提交数据中是否包含了用户身份信息
· 验证提交的用户身份信息被修改后是否可以成功修改
· 验证修改cookie中的每一项包含用户身份的信息是否回影响修改结果
· 验证是否可以在不登陆的情况下直接提交修改密码的请求进行修改
· 验证是都可以越权任意修改用户密码
二、越权访问
越权访问(Broken Access Control,简称BAC)是Web应用程序中一种常见的漏洞,由于其存在范围广、危害大,被OWASP列为Web应用十大安全隐患的第二名。
其中越权访问又分为两种
该漏洞是指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定。越权访问漏洞主要分为水平越权访问和垂直越权访问。
1.水平越权
水平越权访问是一种“基于数据的访问控制”设计缺陷引起的漏洞。由于服务器端在接收到请求数据进行操作时没有判断数据的所属人/所属部门而导致的越权数据访问漏洞。
假设用户A和用户B属于同一角色,拥有相同的权限等级,他们能获取自己的私有数据(数据A和数据B),但如果系统只验证了能访问数据的角色,而没有对数据做细分或者校验,导致用户A能访问到用户B的数据(数据B),那么用户A访问数据B的这种行为就叫做水平越权访问。
2.垂直越权
垂直越权是一种“基于URL的访问控制”设计缺陷引起的漏洞,又叫做权限提升攻击。
由于后台应用没有做权限控制,或仅仅在菜单、按钮上做了权限控制,导致恶意用户只要猜测其他管理页面的URL或者敏感的参数信息,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。
3、越权访问修复
1、基础安全架构,完善用户权限体系。要知道哪些数据对于哪些用户,哪些数据不应该由哪些用户操作;
2、鉴权,服务端对请求的数据和当前用户身份做校验;
3、不要直接使用对象的实名或关键字。
4、对于可控参数进行严格的检查与过滤!
5、前后端同时对用户输入信息进行校验,双重验证机制
6、调用功能前验证用户是否有权限调用相关功能
执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限
7、直接对象引用的加密资源ID,防止攻击者枚举ID,敏感数据特殊化处理