接口测试系列之——接口安全测试

news2024/12/23 17:38:38

“开源 Web 应用安全项目”(OWASP)在 2019 年发布了 API 十大安全风险 《OWASP API 安全 Top10》:失效的对象级别授权、失效的用户身份验证、过 度的数据暴露、资源缺乏和速率限制、失效的功能级授权、批量分配、安全配置 错误、注入、资产管理不当、日志和监视不足位列其中。我们以此为依据对 API十大安全风险进行介绍。

失效的对象级别授权

失效的对象级别授权是指:用户与服务器使用 API 进行通信时,服务器端未 进行对象级别的权限控制或限制不严格。攻击者可以通过修改请求数据中的对象ID 等信息,实现未授权获取或修改敏感信息。

案例:在使用某个功能时通过用户提交的对象 ID(如订单号、记录号)来 访问或操作对应的数据,且未进行严格的权限限制

如下图所示,正常订单查询请求:

如下图所示,使用 burpsuite 对 oid 参数进行遍历,尝试越权访问他人订单 详情,可以看到成功查看到了他人订单信息:

失效的用户身份验证

失效的用户身份验证是指:API 在访问时未对请求方进行身份验证或身份验证存在问题导致易被破解,那么攻击者可以实现未授权对 API 进行操作。

案例:

1. 未校验令牌的有效性;

2. 更新密码接口未限制请求频率,旧密码参数可暴力破解;
3. 短信验证码或者邮箱验证码有效期超出 10 分钟或者长度小于 6 位。

过度的数据暴露

发生过度数据暴露的主要原因之一是,开发人员和编码人员对他们的应用程 序将使用的数据种类没有足够的洞察力。正因为如此,开发人员倾向于利用通用 流程,在这种流程中,所有的对象属性都暴露给最终用户。

例如:

利用过度暴露的数据十分容易,通常通过嗅探流量分析 API 的响应获取不应 该返回给用户的多余敏感信息。

防御:

  1. 不要依赖客户端来过滤敏感数据;

  2. 检查 API 的响应,确认其中仅包含合法数据;

  3. 停止用通用 API 向用户发送一切的过程也很重要。例如,必须避免将所有信息直接执行 to_json()和 to_string(),然后发送给客户端。应该专门挑选需要 返回给授权用户的属性,并专门发送这些信息;

  4. 对于敏感数据应使用加密技术进行保护。这样,即使该数据的位置作为 过度数据暴露漏洞的一部分被泄露出去,也有一个良好的第二道防线,即使数据 落入恶意用户或威胁行为者手中,也能保护数据。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

 

资源缺乏和速率限制

随着资源的缺乏和速率的限制,每个 API 都有有限的资源和计算能力,这取 决于它的环境。大多数还需要处理来自用户或其他程序的请求,要求它执行所需 的功能。当有太多的请求同时进来,而 API 没有足够的计算资源来处理这些请求 时,就会出现这种漏洞。然后,API 可能变得不可用或对新的请求没有反应。

如果 API 的速率或资源限制没有被正确设置,或者限制没有在代码中被定义, 那么 API 就很容易出现这个问题。

具体案例如下图所示:

上述代码没有进行限制,我们可以通过短时间大量无限请求/api/users 访问 所有的用户,造成其他客户端请求无法相应的问题。

修改后:

API 将限制匿名用户每小时发出 200 次请求,已经被系统审核过的已知用户 会有更大的回旋余地,每小时有 5000 个请求,但即使是他们也受到限制,以防 止在高峰期意外超载,或者在用户账户被泄露并被用于拒绝服务攻击时进行补偿。

对用户调用 API 的频率执行明确的时间窗口限制,定义并强制验证所有传入 参数和有效负荷的最大数据量,例如字符串的最大长度和数组中元素的最大数 量。在突破限制时通知客户,并提供限制数量及限制重置的时间。

失效的功能级授权

失效的功能级授权漏洞允许用户执行应该被限制的功能,或者让他们访问应 该被保护的资源。

如下图所示,攻击者为站点普通用户权限,通过经验对站点可能存在的管理 功能 URL 进行猜测,多次尝试之后发现本应无权访问的 admin_statuspage 页面可 以访问成功:

如下图所示攻击者为站点普通权限用户,站点使用已知框架,攻击者查阅新 建管理用户功能需发送的数据包详情,并构造数据包进行发送,发现可以新建用户成功。

防止这种 API 漏洞尤其重要,因为攻击者不难找到结构化 API 中未受保护的 函数,因此所有业务层面的功能都必须使用基于角色的授权方法进行保护。一定 要在服务器上实现授权,不能试图从客户端保证功能的安全。在创建功能和资源 级别时,用户应该只被赋予做它们需要的事情的权限,实践最小权限的方法。

批量分配

后端应用对象可能包含许多属性,其中一些属性可以由客户端直接更新(如,user.firstname 或 user.address),而某些属性则不应该更新(如,user.isvip 标志)。

案例:

一个乘车共享应用程序为用户提供了编辑个人资料基本信息的选项。用户可 以更新“user_name”、“age”两个参数。

PUT /api/v1/users/me
{"user_name":"inons","age":24}
发现/api/v1/users/me 接口返回一个附加“credit_balance”参数:

GET/api/v1/users/me {"user_name":"inons","age":24,"credit_balance":10}

攻击者构造报文,重放第一个请求:

PUT/api/v1/users/me {"user_name":"attacker","age":60,"credit_balance":99999}

攻击者无需支付即可篡改自己的信用值。

如何防止:

1. 如果可能,请避免使用将客户输入自动绑定到代码变量或内部对象中的函数;2. 仅将客户端可更新的属性列入白名单;
3. 使用内置功能将客户端不应访问的属性列入黑名单;
4. 如果可能,为输入数据有效负载准确、明显的定义和实施 schema 格式。

安全配置错误

概述:

安全配置错误可以发生在一个应用程序堆栈的任何层面,包括平台、Web服务器、应用服务器、数据库、框架和自定义代码。

案例:

比如攻击者在服务器的根目录下找到.bash_history 文件, 该文件包含DevOps 团队用于访问 API 的命令:

$ curl -X GET 'https://api.server/endpoint/' -H 'authorization: Basic Zm9vOmJhcg==', 攻击者可由此命令获取权限认证信息(Zm9vOmJhcg== base64 解码:foo:bar)以 及接口信息。

注入

概述:

服务端未对客户端提供的数据进行验证、过滤或净化,数据直接使用或者拼 接到 SQL/NoSQL/LDAP 查询语句、 OS 命令、XML 解释器和 ORM(对象关系映射 器)/ODM(对象文档映射器)中,产生注入类攻击。

案例:
判断服务端是否支持 XML 解析,如果支持,可以尝试 XML 注入。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Anything [
<!ENTITY entityex SYSTEM "file:///etc/passwd">
]>
<abc>&entityex;</abc>
API 未对来自外部系统(如,集成系统)的数据进行验证、过滤或净化。

资产管理不当

不当的资产管理缺陷是现代的产物,以业务速度前进的组织有时每天都能旋 转出成百上千的服务和微服务。这通常是快速完成的,而且没有创建任何的附带 文档,也没有解释相关的 API 是用来做什么的,需要多长时间或其重要性。这可 能会快速产生 API 蔓延,随着时间的推移可能会变得无法控制,特别是如果没有 全面的政策来定义 API 可以存在多久。这种环境下,很有可能一些 API 会丢失、 被遗忘或者未销毁。

这就导致了如果资产管理不当会直接导致攻击者可以访问敏感数据,甚至可 以通过旧的、未打补丁的 API 版本连接到同一数据库。

如何消除不当的资产管理缺陷:应该做到对所有的 API、他们的用途和版本 进行严格的盘点。主要关注因素包括,部署到什么环境中,如生产或开发,谁应 该对它们有网络访问权限、收集和处理哪些数据,是常规数据还是敏感数据、API

的存活时间、当然还有它们的版本。一旦完成,需要实施一个流程,将文档添加 到任何新创建的 API 或服务中。这应该包括 API 的所有方面,包括速率限制、如 何请求和相应、资源共享、可以连接到哪些端点、以及它任何以后需要审计的内 容,还需要避免在生产中使用非生产 API,考虑给 API 增加一个时间限制等。

日志和监视不足

如果没有日志和监视,或者日志和监视不足,就会导致无法及时发现攻击者 的恶意活动,同时也就无法快速定位跟踪可疑活动并作出及时响应,给攻击者留 有足够的时间来破坏系统。

API 的脆弱项:

  1. 没有生成任何日志、日志级别没有正确设置、或日志消息缺失足够的细 节信息;

  2. 不能保证日志的完整性;

  3. 没有对日志进行持续监视;

  4. API 基础设施没有被持续监视。

建议:
1. 应该有一个记录各种认证和授权事件的系统,比如登陆失败、暴力攻击、访问敏感数据等;

2. 必须建立有效的监测和警报系统,此系统能够发现可疑活动并作出及时反应;

3. 日志应保证有足够的详细信息记录攻击者的行为,识别恶意活动;
4. 如果出现问题,必须通知相关团队。5.必须采用行业标准制定事故相应和恢复计划。

END今天的分享就到此结束了,点赞关注不迷路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1190371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

进程管理(一)

程序执行分析及前趋图 前驱图是有向图。 P2的执行是以P1的执行完成为条件的,或者P2是依赖P1的。 P1的有向边指向P2。 程序顺序执行 程序并发执行 I输入,C计算,P输出 第二道程序的输入和第一道程序的计算是同时进行。斜着是一个程序。 进程的定义及特征 <

WMS仓储管理系统中常见的波次划分策略

在如今高度竞争的物流行业中&#xff0c;提高订单处理效率和资源利用率是企业追求的关键目标。为了实现这些目标&#xff0c;一种被广泛应用的方法是采用拣货波次计划。本文将详细解析拣货波次计划的概念、意义以及在WMS仓储管理系统中的实现过程。 拣货波次计划是一个将不同订…

基于swing的人事管理系统

概述 个人项目人事管理系统&#xff0c;针对部门和人员之间的管理。 详细 一、项目UI 二、项目结构 三、项目使用方法 Eclipse导入现有现有项目到工作空间即可&#xff0c;会自动加载包内相关jar包&#xff0c;使用的java源文件 四、部分代码 MainFrm.java package view…

IP-guard WebServer 远程命令执行漏洞

IP-guard WebServer 远程命令执行漏洞 免责声明漏洞描述漏洞影响漏洞危害网络测绘Fofa: app="ip-guard"漏洞复现1. 构造poc2. 访问文件3. 执行命令免责声明 仅用于技术交流,目的是向相关安全人员展示漏洞利用方式,以便更好地提高网络安全意识和技术水平。 任何人不得…

playwright与cypress各有什么优势与劣势

Playwright和Cypress都是用于自动化测试的工具&#xff0c;但它们在一些方面有所不同。 Playwright的优势&#xff1a; 跨浏览器支持&#xff1a;Playwright支持多种浏览器&#xff0c;包括Chrome、Firefox和Safari等&#xff0c;可以在不同浏览器上运行测试&#xff0c;提高…

对象反序列化

使用到的流是对象字节输入流&#xff1a;ObjectInputStream 作用&#xff1a;以内存为基准&#xff0c;把存储到磁盘文件中去的对象数据恢复成内存中的对象&#xff0c;称为对象反序列化。 ObjectInputStream反序列化方法 /**目标&#xff1a;学会进行对象反序列化&#xff1…

c语言刷题第10周(16~20)

规律&#xff1a; 若多个次数最多按ASCII码顺序输出。 用for循环i取&#xff08;0~26&#xff09; 则输出满足条件的字符串中位置最靠前的那个。 用while循环遍历&#xff08;while&#xff08;a[i]!\0&#xff09;&#xff09; 从键盘输入任意只含有大小写字母的串s&…

Python全栈安全:构建安全的全栈应用

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 第一部分&#xff1a;全…

2022ICPC济南站

K Stack Sort 题意&#xff1a;给你一个长度为n的排列&#xff0c;设有m个栈&#xff0c;你需要将这n个数按出现顺序入栈&#xff0c;每次入栈操作从m个栈中选择一个栈从栈顶入栈。当所有元素入栈完成后&#xff0c;需要不断选择栈&#xff0c;将栈中元素弹空。需满足出栈顺序…

行人检测综述 之 精华提取——图表与挑战

From Handcrafted to Deep Features for Pedestrian Detection:A Survey 从手工制作到深度特征的行人检测&#xff1a;一项调查 调查内容&#xff1a; 关于行人检测的传统算法和深度学习算法&#xff1b;关于行人检测的单光谱检测和多光谱检测&#xff1b;关于行人检测的多种数…

Web APIs——综合案例

1、学生就业统计表 2、渲染业务 根据持久化数据渲染页面 步骤&#xff1a; ①&#xff1a;读取localstorage本地数据 如果有数据则转换为对象放到变量里面一会使用它渲染页面如果没有则用默认空数组[]为了测试效果&#xff0c;可以先把initData存入本地存储看效果 ②&…

超声波热量表和电磁热量表有哪些区别?

随着我们能源消耗日益增长&#xff0c;热量计量已成为节能减排、能源管理的重要手段。热量表是用于测量热能消耗的仪表&#xff0c;其中超声波热量表和电磁热量表是常见的两种类型。下面&#xff0c;就由小编来为大家详细的介绍下超声波热量表和电磁热量表的区别&#xff0c;一…

电影《二手杰作》观后感

上周看了电影《二手杰作》,在看电影的时候&#xff0c;自己感觉其实多少有些文艺范&#xff0c;或者有些尴尬的&#xff0c;但是在电影里还好&#xff0c;不过整个故事看下来&#xff0c;多少有点代入感&#xff0c;不多但还是有点。 故事情节&#xff0c;比较简单&#xff0c…

为你摘星辰

欢迎来到程序小院 为你摘星辰 玩法&#xff1a;鼠标控制人物方向&#xff0c;点击鼠标键上升人物&#xff0c;经过⭐️⭐️吃掉获得分数&#xff0c;共三次生命&#xff0c;碰到红色障碍物减去一次生命&#xff0c; 人物掉落底部游戏结束&#xff0c;看你获得多少分^^。开始游…

Linux C基础(9)

1、指针的算术元素 总结&#xff1a; p n:pn对于p向地址增大的方向移动n个数据实际的变化&#xff1a;p sizeof(数据类型)*np - n:p-n对于p向地址减小的方向移动n个数据实际的变化&#xff1a;p - sizeof(数据类型)*np:p向地址增大的方向移动1个数据实际的变化&#xff1a;p …

【手把手教你】将python程序打包成exe可执行文件

1. 安装环境 pip install pyinstaller6.0.02. 打包文件 pyinstaller -D “要启动的文件名“.py比如我的命令就是&#xff1a;pyinstaller -D eval.py 执行完后&#xff0c;会生两个文件夹dist和bulib两个文件和一个xxx.spec文件 3. 删除生成的文件 删除生成的bulid和dist文…

Java实现调用openAI接口返回流式数据

一&#xff0c;添加依赖 <dependency><groupId>com.github.plexpt</groupId><artifactId>chatgpt</artifactId><version>4.0.7</version> </dependency>二&#xff0c;重写SseEmitter 改为UTF-8编码 import org.springframe…

TSINGSEE青犀智能分析网关工服识别算法,如何最大限度保障工人安全?

众所周知&#xff0c;TSINGSEE青犀智能分析网关算法繁多&#xff0c;大多数算法已经和大家讲解过了&#xff0c;今天就和大家聊一聊工服识别算法。工服识别算法一般应用于工地、化工、煤矿等场所&#xff0c;用来监督检测施工人员是否按照要求着工服&#xff0c;最大程度保障人…

助力网络安全攻防演练 | 中睿天下获国网蒙东电力数字化事业部感谢信

近日&#xff0c;中睿天下因积极协助和支撑国网蒙东电力数字化事业部在2023年国家网络安全专项演习期间的工作&#xff0c;有效保障了护网行动期间网络的安全稳定运行&#xff0c;因而获得了国网蒙东电力数字化事业部的高度认可&#xff0c;并向我司致书面表扬信&#xff0c;这…

Aria2 任意文件写入漏洞复现

漏洞描述 Aria2 是一款轻量级、多协议、多源下载工具&#xff08;支持 HTTP/HTTPS、FTP、BitTorrent、Metalink&#xff09;&#xff0c;内置 XML-RPC 和 JSON-RPC 接口。 我们可以使用 RPC 接口来操作 aria2 并将文件下载到任意目录&#xff0c;从而造成任意文件写入漏洞。 …