当前位置: 首页 > news >正文

初步认识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的检测主要是用手工检测而工具只能作为辅助。

相关文章:

初步认识API安全

一、认识API 1. 什么是API API(应用程序接口):是一种软件中介,它允许两个不相关的应用程序相互通信。它就像一座桥梁,从一个程序接收请求或消息,然后将其传递给另一个程序,翻译消息并根据 API 的程序设计执行协议。A…...

MybatisX逆向工程方法

官方文档链接:MybatisX快速开发插件 | MyBatis-Plus (baomidou.com) 使用MybatisX可以快速生成mapper文件,实体类和service及实现 效果 方法:首先下载mybatisX插件 然后创建数据库信息 然后选中表,右键,点击Mybatis…...

每日一题:LeetCode-LCR 179. 查找总价格为目标值的两个商品

每日一题系列(day 16) 前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 &#x1f50e…...

SpringBoot 3.2.0 基于Logback定制日志框架

依赖版本 JDK 17 Spring Boot 3.2.0 工程源码:Gitee 日志门面和日志实现 日志门面(如Slf4j)就是一个标准,同JDBC一样来制定“规则”,把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接…...

微软发布安卓版Copilot,可免费使用GPT-4、DALL-E 3

12月27日,微软的Copilot助手,可在谷歌应用商店下载。目前,只有安卓版,ios还无法使用。 Copilot是一款类ChatGPT助手支持中文,可生成文本/代码/图片、分析图片、总结内容等,二者的功能几乎没太大差别。 值…...

【STM32】程序在SRAM中运行

程序在RAM中运行 1、配置内存分配。 2、修改跳转文件 FUNC void Setup(void) { SP _RDWORD(0x20000000); PC _RDWORD(0x20000004); } LOAD RAM\Obj\Project.axf INCREMENTAL Setup(); 3、修改下载ROM地址和RAM地址; 中断向量表映射 中断向量表映射到SRA…...

docker 部署mysql

docker pull mysql:5.7.25 docker run \ --name mysql \ -e MYSQL_ROOT_PASSWORD123456 \ -p 3306:3306 \ -v /soft/mysql/conf:/etc/mysql \ -v /soft/mysql/data:/var/lib/mysql \-d \mysql:5.7.25安装好之后可以用命令行进入查看 docker exec -it mysql mysql -u root -p密…...

科荣AIO ReportServlet存在目录遍历漏洞

文章目录 产品简介漏洞概述指纹识别漏洞利用修复建议 产品简介 科荣AIO是一款企业管理软件,提供企业一体化管理解决方案。它整合了ERP(如进销存、财务管理)、OA(办公自动化)、CRM(客户关系管理&#xff09…...

Ubuntu Desktop 22.04 桌面主题配置

Ubuntu Desktop 22.04 桌面主题配置 使用这么久 Ubuntu Desktop,本着不折腾的原则,简单介绍下自己的桌面主题配置。 安装 tweaks 安装 GNOME Shell 安装 GNOME theme安装 gnome-tweaks & chrome-gnome-shell sudo apt update # 安装 gnome-tweaks…...

SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API进行要素查询

作者:yx 前言 前面我们介绍了SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API加载,这里呢我们再来看看如何进行要素查询呢? 一、服务发布 SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API加载已经介绍如何发…...

H5向微信小程序发送信息(小程序web-view打开H5)

引入weixin-js-sdk npm i weixin-js-sdk 页面引入 // 引入wxjsimport wx from "weixin-js-sdk"; 点击触发方法 methods: {goweap(id){console.log(wx);// H5传递数据 (navigateBack)wx.miniProgram.navigateBack({delta: 1});wx.min…...

白话机器学习的数学-1-回归

1、设置问题 投入的广告费越多,广告的点击量就越高,进而带来访问数的增加。 2、定义模型 定义一个函数:一次函数 y ax b (a 是斜率、b 是截距) 定义函数: 3、最小二乘法 例子: 用随便确定的参…...

ubuntu22下安装minconda

bing 搜索 canda install 找到官方网站 https://docs.conda.io/projects/miniconda/en/latest/ 这里我们安装minconda。 官网有安装方法。 mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh…...

如何借助边缘网关打造智慧配电房安全方案

配电房是电力系统的重要组成部分,通常设置有各种高压配电装置和箱柜,是企业安全管理的重点。传统的人工巡检和监控总是难以避免疏漏,导致风险隐患的产生和扩大。 随着物联网、边缘计算、设备联动控制等技术的普及应用,佰马针对配电…...

k8s的二进制部署

k8s的二进制部署 k8s的二进制部署的实验: 源码包部署 k8s的master01:192.168.233.91 组件:kube-apiserver kube-controller-manager kube-scheduler etcd k8s的master02:192.168.233.92 组件:kube-api…...

Python基础语法总结

1.每条语句结束不需要分号(也可以加上), 直接换行, 注意: 如果两行代码写一行, 则必须加分号. 2.定义变量不需要指定类型(如果需要写类型, 需要在变量名后面加": 类型, 这个写法只是方便读代码). 3.变量名大小写敏感. 4.查看变量类型: type(变量名). 5.Python中的int表…...

矩阵理论基本知识

1、矩阵范数、算子范数 矩阵无穷范数是非自相容范数,矩阵1-范数、矩阵2-范数是自相容范数矩阵2-范数:Frobenius范数,是向量2-范数的自然推广。 ∥ A ∥ m 2 ∥ A ∥ F ∑ a i j ∗ a i j \|A\|_{m2}\|A\|_{F}\sqrt{\sum a_{ij}^*a_{ij}} ∥…...

《深入理解Java虚拟机(第三版)》读书笔记:Java内存区域与内存溢出异常、垃圾收集器与内存分配策略

下文是阅读《深入理解Java虚拟机(第3版)》这本书的读书笔记,如有侵权,请联系删除。 文章目录 第2章 Java内存区域与内存溢出异常2.2 运行时数据区域2.3 HotSpot虚拟机对象探秘 第3章 垃圾收集器与内存分配策略3.2 对象已死&…...

android 手机主界面侧滑退出app问题

最近重新搭了个app,发现手机显示APP主界面时,沿着手机右边向左滑,会直接关闭应用,所以想搞个第一次提示,第二次退出app的效果。 结果搞出个复杂的东西,下面是两段代码。1: 1:GestureDetector扩展函数。其…...

spring boot 配置全局日期和时间格式

spring boot 为项目配置 全局日期和时间格式化yyyy-MM-dd HH:mm:ss 方式一:代码配置全局日期和时间格式化 /*** author hua*/ Configuration public class WebConfiguration implements WebMvcConfigurer {/*** 项目全局时间格式化*/ Bean public ObjectMapper get…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

【JavaEE】-- HTTP

1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)&#xff0…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

12.找到字符串中所有字母异位词

🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...

今日科技热点速览

🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...