逻辑漏洞会导致业务面临着巨大的经济损失隐患与敏感数据泄露的风险,本文从安全测试的角度,以越权逻辑漏洞为例,介绍逻辑漏洞的挖掘方法和实践过程。
定义:指由于系统的权限控制逻辑不够严谨,使得系统用户可以访问或操作未授权的数据和功能。包括水平越权和垂直越权。
水平越权:指当系统存在多个相同权限的用户时,A 用户可以访问或操作到其他用户的资源。如图 1.1 所示,用户 A、B、C、D 都是普通用户,当用户 A 可以访问到用户 B 或者其他用户资源时,就产生了水平越权。
垂直越权:指当系统存在不同权限的用户时,低权限用户可以访问或操作到高权限用户的资源。如图 1.1 所示,当普通用户或者其他低权限用户可以访问到比自己权限高的用户资源时,就产生了垂直越权。
图 1.1
基于越权逻辑漏洞的定义和分类,从模拟攻击者攻击漏洞的角度出发,可以总结出以下两种挖掘方法。
指用户在没有通过认证授权的情况下能够直接访问需要通过认证才能访问的页面或者信息。具体流程为:
1)统计测试接口;
2)使用抓包工具获取接口入参;
3)不填写 cookie 或者填写无效 cookie 重新请求;
4)查看请求结果,如果返回了正确 cookie 才能取得的结果,说明该接口存在未授权访问漏洞。
通过抓包修改参数的方式绕过客户端实施攻击,从而测试是否存在越权漏洞。具体流程为:
1)统计测试接口;
2)使用抓包工具获取接口入参;
3)水平越权测试:分析入参中是否标识用户身份的敏感信息,如果存在,则修改为其他测试用户信息,重新请求查看返回结果,若返回结果正确,则该接口存在水平越权漏洞;
4)垂直越权测试:分析高级权限用户的请求入参,将高权限用户信息替换为低级权限用户的信息,重新请求查看返回结果,若返回结果正确,则该接口存在垂直越权漏洞。
抓包工具:使用 Charles,它是一个 HTTP 代理、HTTP 监视器、反向代理工具,可以帮助开发人员查看他们的机器和 Internet 之间的所有 HTTP 和 SSL、HTTPS 流量,包括请求、响应和 HTTP 头(其中包含 cookie 和缓存信息)。官网安装链接:https://www.charlesproxy.com/documentation/installation/
请求平台:使用京东内部测试平台 DeepTest。
图 3.1
首先确定测试接口,京东万家 APP 的所有接口都需要登录才能访问,因此需要逐一验证。获取接口及参数信息,流程如下:
(1)打开 Charles 并将手机代理开启;
(2)检查手机代理 ip 及端口是否与 Charles 设置一致,如不同则将其改为一致;
(3)手机启动京东万家 APP;
(4)对应 Charles 中查看相应的接口和请求,如图 3.1 所示。
以 Charles 中的 user_baseinfo 接口为例,进行未授权访问逻辑漏洞测试。首先从 Charles 的抓包信息中复制该接口、body 和 cookie 信息,然后在 DeepTest 平台进行接口入参修改并重新请求。其中入参主要修改 cookie,原因是登录信息的校验都是从 cookie 中获取。因此,进行未授权的测试的本质就是修改入参中的 cookie 信息为无效信息然后重新请求。注意,cookie 无效包括不填写 cookie 或填写已过期的 cookie。如图 3.2 所示,此时接口不填写 cookie,但重新请求后,依然可以获取到结果,即用户在没有通过认证授权的情况下依然能够直接访问需要通过认证才能访问的信息,说明该接口存在未授权访问逻辑漏洞。
图 3.2
水平越权测试:首先确定所有测试接口,以万家 APP 中订单详情接口测试为例,抓包得到接口入参为:
{"from":"","orderId":"239703099155","sdkClient":"plugin_apple","appName":"apollo","isPublish":"","apolloId":"ca3d","apolloSecret":"7157","wjPin":"ceshibu3"}
分析入参:由于入参中存在 orderId 和 wjPin 两个字段来标识用户身份,因此修改其为其他同级别权限用户信息,进行水平越权测试。修改前和修改后的请求及返回结果如图 3.3 所示,令当前登录用户为 A 用户,修改请求入参的用户信息为 B 用户,可以发现,修改入参后,A 用户依然可以访问到 B 用户的订单详情,也就是当前登录用户可以访问到其他用户的订单详情,说明该接口存在水平越权逻辑漏洞。
图 3.3
垂直越权测试:在万家 APP 业务中,店主的权限高于店员的权限,因此需要进行垂直越权测试来验证店主的信息是否存在泄漏风险。
首先确定店主比店员多的具体权限,需要具体到每个接口。然后使用店主权限登录万家 APP,找到只有店主权限才能看到的应用,进行请求、抓包、分析参数、修改参数、重新请求的测试过程。其中,修改参数指将店主身份的 cookie 修改为店员身份的 cookie,如图 3.4 所示,重新请求后可以正常返回结果,说明该接口存在垂直越权逻辑漏洞。
图 3.4
本文介绍了越权逻辑漏洞的基本概念及挖掘方法,并通过万家 APP 的三个具体场景,介绍了越权逻辑漏洞挖掘的主要流程,包括:确定测试接口抓包获取接口入参分析入参修改入参部分信息后重新请求分析返回结果。最后,通过此次万家 APP 的逻辑漏洞挖掘实践,提出以下两点建议:
建议使用 DeepTest 接口自动化测试平台,可以提高效率,便于维护和回归,从而使得逻辑漏洞挖掘常态化;
建议在工作中培养安全测试意识,比如:
(1)和账户相关的增删改查操作应使用当前用户身份约束;
(2)获取当前用户身份的方式应从 session 中获取;
(3)不以任何客户端传递的明文数据作为鉴权方式;
(4)用户可见索引字段应尽量设置成无规律;
(5)建立测试方法集,不断积累、执行,将安全测试常态化。
作者:京东零售 孟迪
来源:京东云开发者社区
原文:https://www.freebuf.com/articles/endpoint/367967.html
点击下方小卡片或扫描下方二维码观看更多技术文章
师傅们点赞、转发、在看就是最大的支持
文章引用微信公众号"猪猪谈安全",如有侵权,请联系管理员删除!