安全测试实践-万家APP越权逻辑漏洞挖掘
逻辑漏洞会导致业务面临着巨大的经济损失隐患与敏感数据泄露的风险,本文从安全测试的角度,以越权逻辑漏洞为例,介绍逻辑漏洞的挖掘方法和实践过程。
一、什么是越权逻辑漏洞
定义: 指由于系统的权限控制逻辑不够严谨,使得系统用户可以访问或操作未授权的数据和功能。包括水平越权和垂直越权。
水平越权: 指当系统存在多个相同权限的用户时,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的逻辑漏洞挖掘实践,提出以下两点建议:
建议使用DeepTest接口自动化测试平台,可以提高效率,便于维护和回归,从而使得逻辑漏洞挖掘常态化;
建议在工作中培养安全测试意识,比如:
(1)和账户相关的增删改查操作应使用当前用户身份约束;
(2)获取当前用户身份的方式应从session中获取;
(3)不以任何客户端传递的明文数据作为鉴权方式;
(4)用户可见索引字段应尽量设置成无规律;
(5)建立测试方法集,不断积累、执行,将安全测试常态化。
作者:京东零售 孟迪
来源:京东云开发者社区
安全测试实践-万家APP越权逻辑漏洞挖掘的更多相关文章
- Web安全测试中常见逻辑漏洞解析(实战篇)
		
Web安全测试中常见逻辑漏洞解析(实战篇) 简要: 越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户A通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽,对信息进行增删改 ...
 - 渗透测试学习 二十一、 JSP相关漏洞
		
大纲 ST2漏洞 (Struts2) 反序列漏洞 网站容器,中间键 其他漏洞 Struts2漏洞 简介: Struts2是一个基于MVC设计模式的Web应用框架,它本质上相 ...
 - 基于 burpsuite的web逻辑漏洞插件开发(来自JSRC安全小课堂,柏山师傅)
		
基于 burpsuite的web逻辑漏洞插件开发 BurpSuite 提供了插件开发接口,支持Java.Python.Ruby语言的扩展.虽然 BApp Store 上面已经提供了很多插件,其中也不乏 ...
 - 2. Web渗透测试中常见逻辑漏洞解析与实战
		
注:以下漏洞示例已由相关厂商修复,切勿非法测试! 0x01 漏洞挖掘 01 注册 注册中最常见的有两个,一个是恶意注册,另一个是账户遍历.一个好的注册界面应该是这样 或者这样的 而不是这样的 要么使 ...
 - 9-MySQL DBA笔记-测试实践
		
第9章 测试实践 在第8章中介绍了测试所需要的理论知识,本章将为读者讲述实际的测试过程.实际测试一般包括硬件测试.MySQL基准测试及应用服务压力测试,下面将分别讲述这三方面的内容.此外,测试工具的选 ...
 - Python实践之(七)逻辑回归(Logistic Regression)
		
机器学习算法与Python实践之(七)逻辑回归(Logistic Regression) zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习算法与Pyth ...
 - 从App业务逻辑中提炼API接口
		
2.1 从App业务逻辑中提炼API接口 业务逻辑思维导图 功能-业务逻辑思维导图 基本功能模块关系 功能模块接口UML(设计出API) 在设计稿标注API 编写API文档 2.2 设计API的要点 ...
 - 机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)
		
http://blog.csdn.net/zouxy09/article/details/20319673 机器学习算法与Python实践之(七)逻辑回归(Logistic Regression) z ...
 - APP测试基本流程以及APP测试要点
		
APP测试流程梳理 APP测试要点梳理 链接:http://pan.baidu.com/s/1gfaEZ1x 密码:07yt 1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开 ...
 - WEB安全第七篇--终结篇考验逻辑思维:逻辑漏洞大汇总(越权、会话逻辑、业务逻辑、暴力破解)
		
零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的pay ...
 
随机推荐
- 云原生API网关全生命周期管理Apache APISIX探究实操
			
@ 目录 概述 定义 NGINX 与 Kong 的痛点 APISIX 的技术优势 特性 架构 应用场景 主要概念 部署 快速入门 quickstart安装 Admin API创建路由 RPM安装 安装 ...
 - 使用ASP.NET CORE SignalR实现APP扫描登录
			
使用signalr实现APP扫码登录 1. 背景介绍 在移动化时代,web开发很多时候都会带着移动端开发,这个时候为了减少重复输入账号密码以及安全性,很多APP端都会提供一个扫码登录功能,web端生成 ...
 - Java——多线程(代码)
			
例子:创建三个窗口卖票,总票数为100张.使用实现Runnable接口的方式 * 1.卖票过程中出现重票.错票 --->出现了线程的安全问题 * 2.问题出现的原因:当某个线程操作车票的 ...
 - Kubernetes客户端认证(二)—— 基于ServiceAccount的JWTToken认证
			
1.概述 在 Kubernetes 官方手册中给出了 "用户" 的概念,Kubernetes 集群中存在的用户包括 "普通用户" 与 "Service ...
 - 【从零开始】Docker Desktop:听说你小子要玩我
			
前言 缘由 捡起遗忘的Docker知识 由于本狗近期项目紧任务重,高强度的搬砖导致摸鱼时间下降.在上线项目时,看到运维大神一系列骚操作,docker+k8s的知识如过眼云烟,忘得干净的很.所以想重新恶 ...
 - 【Spring5】框架新功能
			
Spring5框架新功能 整个Spring5框架的代码基于Java8,运行时兼容JDK9,许多不建议使用的类和方法在代码库中删除. Spring5自带了通用的日志封装:log4j2 已经移除了log4 ...
 - 机器学习(七):梯度下降解决分类问题——perceptron感知机算法与SVM支持向量机算法进行二维点分类
			
实验2 感知机算法与支持向量机算法 一.预备知识 1.感知机算法 二.实验目的 掌握感知机算法的原理及设计: 掌握利用感知机算法解决分类问题. 三.实验内容 设计感知机算法求解, 设计SVM算法求解( ...
 - [C++核心编程] 1、内存分区模型
			
文章目录 1 内存分区模型 1.1 程序运行前 1.2 程序运行后 1.3 new操作符 1 内存分区模型 C++程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统进 ...
 - 「学习笔记」tarjan求最近公共祖先
			
Tarjan 算法是一种 离线算法,需要使用并查集记录某个结点的祖先结点. 并没有传说中的那么快. 过程 将询问都记录下来,将它们建成正向边和反向边. 在 dfs 的过程中,给走过的节点打上标记,同时 ...
 - python自产调试工具pdb的使用
			
python自产调试工具pdb的使用 介绍 调试打印在写代码的时候不可避免 项目越大,调试可能花的时间会越多 print调试可能是最早用的,一段时间内你都会习惯这种方式 一旦成了老鸟,你应该会去用ID ...