逻辑漏洞会导致业务面临着巨大的经济损失隐患与敏感数据泄露的风险,本文从安全测试的角度,以越权逻辑漏洞为例,介绍逻辑漏洞的挖掘方法和实践过程。

一、什么是越权逻辑漏洞

定义: 指由于系统的权限控制逻辑不够严谨,使得系统用户可以访问或操作未授权的数据和功能。包括水平越权和垂直越权。

水平越权: 指当系统存在多个相同权限的用户时,A用户可以访问或操作到其他用户的资源。如图1.1所示,用户A、B、C、D都是普通用户,当用户A可以访问到用户B或者其他用户资源时,就产生了水平越权。

垂直越权: 指当系统存在不同权限的用户时,低权限用户可以访问或操作到高权限用户的资源。如图1.1所示,当普通用户或者其他低权限用户可以访问到比自己权限高的用户资源时,就产生了垂直越权。

图1.1

二、越权逻辑漏洞挖掘方法

基于越权逻辑漏洞的定义和分类,从模拟攻击者攻击漏洞的角度出发,可以总结出以下两种挖掘方法。

2.1 未授权访问测试

指用户在没有通过认证授权的情况下能够直接访问需要通过认证才能访问的页面或者信息。具体流程为:

1)统计测试接口;

2)使用抓包工具获取接口入参;

3)不填写cookie或者填写无效cookie重新请求;

4)查看请求结果,如果返回了正确cookie才能取得的结果,说明该接口存在未授权访问漏洞。

2.2 越权访问测试

通过抓包修改参数的方式绕过客户端实施攻击,从而测试是否存在越权漏洞。具体流程为:

1)统计测试接口;

2)使用抓包工具获取接口入参;

3)水平越权测试:分析入参中是否标识用户身份的敏感信息,如果存在,则修改为其他测试用户信息,重新请求查看返回结果,若返回结果正确,则该接口存在水平越权漏洞;

4)垂直越权测试:分析高级权限用户的请求入参,将高权限用户信息替换为低级权限用户的信息,重新请求查看返回结果,若返回结果正确,则该接口存在垂直越权漏洞。

三、万家系统越权逻辑漏洞挖掘实践

3.1 实现工具和平台

抓包工具: 使用Charles,它是一个 HTTP 代理、HTTP 监视器、反向代理工具,可以帮助开发人员查看他们的机器和Internet之间的所有HTTP和SSL、HTTPS 流量,包括请求、响应和 HTTP头(其中包含cookie和缓存信息)。官网安装链接:https://www.charlesproxy.com/documentation/installation/

请求平台: 使用京东内部测试平台DeepTest。

3.2 未授权访问测试实践

图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

3.3 越权访问测试实践

水平越权测试: 首先确定所有测试接口,以万家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的逻辑漏洞挖掘实践,提出以下两点建议:

  1. 建议使用DeepTest接口自动化测试平台,可以提高效率,便于维护和回归,从而使得逻辑漏洞挖掘常态化;

  2. 建议在工作中培养安全测试意识,比如:

(1)和账户相关的增删改查操作应使用当前用户身份约束;

(2)获取当前用户身份的方式应从session中获取;

(3)不以任何客户端传递的明文数据作为鉴权方式;

(4)用户可见索引字段应尽量设置成无规律;

(5)建立测试方法集,不断积累、执行,将安全测试常态化。

作者:京东零售 孟迪

来源:京东云开发者社区

安全测试实践-万家APP越权逻辑漏洞挖掘的更多相关文章

  1. Web安全测试中常见逻辑漏洞解析(实战篇)

    Web安全测试中常见逻辑漏洞解析(实战篇) 简要: 越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户A通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽,对信息进行增删改 ...

  2. 渗透测试学习 二十一、 JSP相关漏洞

    大纲 ST2漏洞  (Struts2) 反序列漏洞              网站容器,中间键 其他漏洞 Struts2漏洞 简介: Struts2是一个基于MVC设计模式的Web应用框架,它本质上相 ...

  3. 基于 burpsuite的web逻辑漏洞插件开发(来自JSRC安全小课堂,柏山师傅)

    基于 burpsuite的web逻辑漏洞插件开发 BurpSuite 提供了插件开发接口,支持Java.Python.Ruby语言的扩展.虽然 BApp Store 上面已经提供了很多插件,其中也不乏 ...

  4. 2. Web渗透测试中常见逻辑漏洞解析与实战

    注:以下漏洞示例已由相关厂商修复,切勿非法测试! 0x01 漏洞挖掘 01  注册 注册中最常见的有两个,一个是恶意注册,另一个是账户遍历.一个好的注册界面应该是这样 或者这样的 而不是这样的 要么使 ...

  5. 9-MySQL DBA笔记-测试实践

    第9章 测试实践 在第8章中介绍了测试所需要的理论知识,本章将为读者讲述实际的测试过程.实际测试一般包括硬件测试.MySQL基准测试及应用服务压力测试,下面将分别讲述这三方面的内容.此外,测试工具的选 ...

  6. Python实践之(七)逻辑回归(Logistic Regression)

    机器学习算法与Python实践之(七)逻辑回归(Logistic Regression) zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习算法与Pyth ...

  7. 从App业务逻辑中提炼API接口

    2.1 从App业务逻辑中提炼API接口 业务逻辑思维导图 功能-业务逻辑思维导图 基本功能模块关系 功能模块接口UML(设计出API) 在设计稿标注API 编写API文档 2.2 设计API的要点 ...

  8. 机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)

    http://blog.csdn.net/zouxy09/article/details/20319673 机器学习算法与Python实践之(七)逻辑回归(Logistic Regression) z ...

  9. APP测试基本流程以及APP测试要点

    APP测试流程梳理 APP测试要点梳理 链接:http://pan.baidu.com/s/1gfaEZ1x 密码:07yt 1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开 ...

  10. WEB安全第七篇--终结篇考验逻辑思维:逻辑漏洞大汇总(越权、会话逻辑、业务逻辑、暴力破解)

    零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的pay ...

随机推荐

  1. Mysql 事务隔离级别和锁的关系

    我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力.所以对于 ...

  2. 如何用浏览器读取本地文件(兼容IE8),new bing能帮我吗?

    浏览器读写文件? 有一份老旧而精巧的代码(2006或更早),带js的html,可以只用浏览器来处理一些二进制存档数据. 文件的读写怎么办?通过变动的方法来完成. 利用十六进制编辑软件如WinHEX,直 ...

  3. 《HelloGitHub》第 84 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...

  4. 总结workerman启动与停止相关命令

    手册:https://www.workerman.net/doc/workerman/install/start-and-stop.html 本篇文章给大家介绍一下workerman启动与停止相关命令 ...

  5. 简单入门echart方法

    图表用echart, 然后前端的 HTML 跟 nodejs  , nodejs 去调用 后端PHP的接口 链接:https://www.jianshu.com/p/1f2c37c5c02f 官网:h ...

  6. Java基础关于栈和堆的内存分配问题(转载)

    AVA在程序运行时,在内存中划分5片空间进行数据的存储.分别是:1:寄存器.2:本地方法区.3:方法区.4:栈.5:堆. 基本,栈stack和堆heap这两个概念很重要,不了解清楚,后面就不用学了. ...

  7. Cesium案例(六) Time Dynamic Wheels

      Cesium.Ion.defaultAccessToken =         "token";       const viewer = new Cesium.Viewer( ...

  8. python入门教程之二十二网络编程

    Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络 ...

  9. 正则表达式、datetime

    1.正则表达式就是用来匹配字符串的 2.常用\d表示一个数字,\w表示数字或者字母,'.'表示任意字符 3.如果要匹配边长的字符串,使用*表示任意个字符,+表示至少一个字符,?表示0个或者1个字符,{ ...

  10. 回顾.NET系列:Framework、Net Core、Net 过往

    目录 一.个人最近工作变化 二.Framework.Net Core..NET 时过境迁 Framework:爱你定格在4.8 .Net Foundation:.Net变革大脑 重新统一的 .NET ...