初步认识API安全

一、认识API

1. 什么是API

API(应用程序接口):是一种软件中介,它允许两个不相关的应用程序相互通信。它就像一座桥梁,从一个程序接收请求或消息,然后将其传递给另一个程序,翻译消息并根据 API 的程序设计执行协议。API 几乎存在于我们数字生活的各个方面,可以说是我们现代插件、数字接口和软件通信环境的隐藏支柱。它们将所有内容连接在一起,使软件系统协调一致地工作。

通俗的来说API就是A调用B中某个功能的接口,比如说我们自己搭建的网站有个上传图片的功能,我们要把图片上传到阿里云的云储存,就需要调用阿里云的云储存的API接口。如果还无法理解,更通俗的说法比如你的电脑需要连接移硬盘,移动硬盘用来连接电脑的那根线就是API。

2. 为什么使用API

当我们在开发功能的时候比如我们需要使用A程序的地图功能,如果我们要在程序上添加地图这个功能,需要写一大堆代码,但是有了API我们直接调用地图这个功能的函数,带来了很大的便利。

3. API造成的安全问题

当然带来便利的同时也带来了安全隐患:信息截获、篡改信息、信息泄露

详细的分类可以参考:OWASP API Security TOP 10 2023

4. 常见API特征

SOAP:WSDL

OpenApi:Swagger

RESTful:/v1/api

二、API利用

(一) 工具介绍

Postman(常用)

ReadyAPI

Burp插件APIKit

工具联动xray、burp等方法,虽然工具好但是不精确,所以手工也是不可缺的部分。

(二) 靶场实战练习

vAPi:GitHub - roottusk/vapi: vAPI is Vulnerable Adversely Programmed Interface which is Self-Hostable API that mimics OWASP API Top 10 scenarios through Exercises.

1. 靶场搭建
git clone https://github.com/roottusk/vapi.git
cd vapi/
docer-compose up -d

访问http://ip/vapi

Postman导入Collection

Collection:https://raw.githubusercontent.com/roottusk/vapi/master/postman/vAPI.postman_collection.json

设置hosts

2. vapi1

一共有三个接口:创建用户、查看用户、修改用户

创建用户

查看用户

user后面是用户id,还需要修改Authorization-Token的值为username:password编码成base64

修改用户

最开始的步骤修改Authorization-Token更改查看用户一样

漏洞点只要登录了凭证就可以查看所有用户

防护措施:完善权限校验

3. vapi2

两个接口:登录用户、获取用户信息

这关是爆破,不用burp抓包我们直接在Postman中复制到burp中

复制到burp的爆破模式中,使用Pitchfork模式

字典在vapi/Resources/API2_CredentialStuffing目录中

因为字典前面是邮箱后面是密码所以我们要设置一下burp爆破规则

邮箱设置把","以及后面的数据都删掉

密码设置取后面8位数字

爆破得到账号密码

刚刚爆破得到的响应的token值放入获取用户接口的Authorization-Token中得到flag

防护方法:添加登录验证码;限制账号、IP登录次数。

4. vapi3

在/bc/vapi/Resources/API3_APK目录下有个apk文件安装到虚拟机打开

输入靶场地址,不要再后面加上/

利用接口创建用户

用在Postman注册的用户登录

登录成功后找到这个数据包

发送请求得到flag,可以在登录的时候就开始抓包然后放包到这个请求在查看返回值就可以了

防护方法:返回数据时,统一使用特定的 Wrapper 包裹,进行数据过滤; 在 DAO 层中指定非 JSON 序列化属性; 使用特定数据传输类。

5. vapi4

一共三个接口:手机号登录、验证码、获取用户信息

这个验证码是一次性验证码我们可以直接爆破4位数的验证码

把key值放在获取用户信息的接口Authorization-Token中,得到flag

防护方法:限制OTP错误次数;增强OTP复杂度。

6. vapi5

有两个接口:创建用户、查询用户

先利用创建用户接口创建一个用户

利用查询用户接口查询用户

有个查询所有用户的接口为users,我们用这个普通用户的权限就可以查看所有用户

防护方法:完善权限校验机制

7. vapi6

两个接口:创建用户、查询用户

先创建用户

查询用户credit为0

重新创建用户把credit的值改为200

得到flag

防护方法:添加数据传输层;添加权限校验;抽离函数功能,指定修改字段。

8. vapi7

四个接口:创建用户、登录用户、获取Key值、退出登录

创建用户

登录

存在CORS漏洞,添加Origin随便输入值

防护方法:配置 CORS 添加 CSRF_TOKEN

9. vapi8

两个接口:登录用户、获取用户信息

登录用户地方存在sql注入利用万能账户登录成功

得到flag

防护方法:预处理;过滤特殊字符。

10. vapi9

一个接口(这是一个v2的接口):登录

爆破pin的值

爆破时发现返回的全是500,因为v2有放爆破机制的,我们更改为v1

改了v1后爆破得到为1655

防护方法:停用老版本 API; 将老版本 API 放入内网。

11. vapi10

直接发送就可以

(三) 工具利用检测

Post联动xray自动检测

开启xray被动监听

./xray.exe webscan --listen 127.0.0.1:1236

打开Postman的下游代理

Postman发包

跳转到这个页面点击run vapi

分别找到了第七关和第九关的漏洞

三、总结

API发现接口的方法:爆破、开放的接目录

如何测试:利用Postman工具(Postman工具是专门给开发人员测试功能的并不具备安全检测功能,所以需要联动其他检测工具进行批量检测),配合Postman手工检测,主要查看返回状态码为200的包,与burp联动插件自动检测。

API的检测主要是用手工检测而工具只能作为辅助。

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

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

相关文章

Hystrix相关面试题及答案(2024)

1、什么是Hystrix,它是如何工作的? Hystrix是一个由Netflix开源的库,主要用于在分布式系统中提供延迟和容错功能,通过阻止服务故障的蔓延和提供回退机制来保护系统。它在服务架构中扮演着重要的角色,特别是在微服务架…

利用阿里云的尖端数据库解决方案增强游戏数据管理

在快节奏和动态的游戏世界中,对于努力为玩家提供无缝体验的公司来说,管理大量数据是一项关键挑战。阿里云是亚太地区的主要参与者,也是全球公认的运营数据库管理系统领导者,提供量身定制的创新解决方案,以应对游戏公司…

C# 全屏label控件实现的贪吃蛇。

C# 全屏label控件实现的贪吃蛇。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using stat…

T527 配置edp配置pwm不正常引起的背光不亮问题

前言 T527 主板在调试edp点屏的时候,配置了一个pwm8对应的引脚作为背光,这个pwm8默认在dts中是没有配置的,需要添加对应的pin脚配置,于是参考了其他pwm的配置,添加到了dts。但是开机后edp屏的背光就是不亮&#xff0c…

案例074:基于微信小程序的儿童预防接种预约管理系统

文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder …

信息学奥赛一本通2035:【例5.2】平移数据

2035:【例5.2】平移数据 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 55733 通过数: 36735 【题目描述】 将aa数组中第一个元素移到数组末尾,其余数据依次往前平移一个位置。 【输入】 第一行为数组aa的元素个数; 第二行为nn个小于10001…

vue中provide和inject使用的注意事项

在Vue.js中,provide 和 inject 是用于父组件向子组件传递数据的高级选项。它们通常用于跨层级组件之间的通信,而不需要通过中间组件进行 props 或事件的传递。 provide 选项: provide 选项用于在父组件中声明需要传递给后代组件的数据。 /…

uniCloud 的 schema2code 【实用教程】

schema2code 用于通过 schema 文件,自动生成对表进行增删改查的操作页面。 以 uniCloud-aliyun/database/todo.schema.json 为例 {"bsonType": "object","required": [],"permission": {"read": true,"cr…

Halcon区域的面积和中心点area_center

Halcon区域的面积和中心点 提到区域的特征,最常用的莫过于区域的面积和中心点坐标信息。实际工作中,经常会使用面积或中心点进行特征的选择和定位。Halcon中的area_center算子就是用于实现这一功能的,该算子一次返回以下两个结果。 &#xf…

Vue3-33-路由-路由的别名配置 alias

别名的作用 路由中的别名配置,可以实现 多个路径 对应 同一个路由。 例如 : 路由的路径是 /a; 配置别名为 : /a2; 则 访问 /a 或 /a2 的时候,都可以访问到 同一个组件。 别名的特点 关键字 : alias 当通过别名进行路由…

认识CUDA

CUDA CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及…

抽奖的问题

import randomlucky_num [] # 存放中奖人名单,避免多次中奖 lucky_count 0 # 表示每一种奖品人数够了for time in range(0, 3): # 抽三次奖lucky_count 0 # 每次刷新print(f第一次抽奖现在开始,这次抽的是{3-time}等奖\n)# 判断奖品是哪个if time…

金和OA c6 uploadfileeditorsave接口存在任意文件上传漏洞

产品简介 金和网络是专业信息化服务商,为城市监管部门提供了互联网监管解决方案,为企事业单位提供组织协同OA系统升开发平台,电子政务一体化平台智慧电商平合等服务 漏洞概述 金和-c6 uploadfileeditorsave 任意文件上传,攻击者…

线程的基础

文章目录 线程的介绍:创建线程的三种方式:一、继承Thread二、实现Runnable接口三、实现Callable接口 线程的优先级:多线程:线程终止:线程常用方法:用户线程和守护线程线程的生命周期:Synchroniz…

SpringBoot实用开发(六)-- RedisTemplate处理Hash类型的数据

目录 1.以map集合的形式添加键值对 2.获取变量中的键值对 3.查看hash表中指定字段是否存在

代码随想录算法训练营第五十六天|583. 两个字符串的删除操作、72.编辑距离、编辑距离总结篇

代码随想录 (programmercarl.com) 583. 两个字符串的删除操作 本题和LC115.不同的子序列 相比,其实就是两个字符串都可以删除了,情况虽说复杂一些,但整体思路是不变的。 1.dp数组及下标含义 dp[i][j]:表示使以下标i-1为结尾的字符…

【DevOps-04]】Operate阶段工具

一、简要说明 安装Docker安装Docker-compose二、安装Docker 官网地址:https://www.docker.com文档地址:Docker Docs仓库地址:https://hub.docker.com1、Docker相关网站 官方网站Get Docker | Docker Docs

MySQL慢查询日志分析(慢查询日志)

一、背景   MySQL的慢查询日志是MySQL提供的一种日志记录,他用来记录在MySQL中响应的时间超过阈值的语句,具体指运行时间超过long_query_time(默认是10秒)值的SQL,会被记录到慢查询日志中。 &em…

861. 二分图的最大匹配(匈牙利算法, 二分图的最大匹配)

861. 二分图的最大匹配 - AcWing题库 给定一个二分图,其中左半部包含 n1 个点(编号 1∼n1),右半部包含 n2 个点(编号 1∼n2),二分图共包含 m 条边。 数据保证任意一条边的两个端点都不可能在同…

AI:112-基于卷积神经网络的美食图片识别与菜谱推荐

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…