初步认识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,一经查实,立即删除!

相关文章

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

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

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…

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

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

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…

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

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

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

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

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队

一、前言 性能测试之于软件系统,是保障其业务承载能力及稳定性的关键措施。以软件系统的能力建设为主线,系统能力设计工作与性能测试工作,既有先后之顺序,亦有相互之影响。以上,在性能测试的场景决策,架构…

Android Matrix剪切clipPath缩放scale图片postTranslate圆形放大镜,Kotlin(1)

Android Matrix剪切clipPath缩放scale图片postTranslate圆形放大镜,Kotlin(1) 实现查看图片的放大镜,放大镜随着手指在屏幕上的移动,放大镜里面展示手指触点为中心、半径长度的圆形放大后的图片。 剪切出一块圆形Path…

基于微信小程序的停车预约系统设计与实现

基于微信小程序的停车预约系统设计与实现 项目概述 本项目旨在结合微信小程序、后台Spring Boot和MySQL数据库,打造一套高效便捷的停车预约系统。用户通过微信小程序进行注册、登录、预约停车位等操作,而管理员和超级管理员则可通过后台管理系统对停车…

13.Go 异常

1、宕机 Go语言的类型系统会在编译时捕获很多错误,但有些错误只能在运行时检查,如数组访问越界、空指针引用等,这些运行时错误会引起宕机。 一般而言,当宕机发生时,程序会中断运行,并立即执行在该gorouti…

Vue2 - diff 原理(动图演示)

目录 1,diffdiff 的时间点 2,_update 函数3,_patch 函数(进行 diff)3.1,根节点比较3.2,子节点比较 4,key的问题举例1举例2 1,diff 解释:对比新旧虚拟DOM树&a…

软件测试基础理论学习-软件测试方法论

软件测试方法论 软件测试的方法应该建立在不同的软件测试类型上,不同的测试类型会存在不同的方法。本文以软件测试中常见的黑盒测试为例,简述常见软件测试方法。 黑盒测试用例设计方法包括等价类划分法、边界值分析法、因果图法、判定表驱动法、正交试…

神经网络:经典模型热门模型

在这里插入代码片【一】目标检测中IOU的相关概念与计算 IoU(Intersection over Union)即交并比,是目标检测任务中一个重要的模块,其是GT bbox与pred bbox交集的面积 / 二者并集的面积。 下面我们用坐标(top&#xff0…

数据结构与算法之美学习笔记:44 | 最短路径:地图软件是如何计算出最优出行路径的?

目录 前言算法解析总结引申 前言 本节课程思维导图: 我们学习了图的两种搜索算法,深度优先搜索和广度优先搜索。这两种算法主要是针对无权图的搜索算法。针对有权图,也就是图中的每条边都有一个权重,我们该如何计算两点之间的最短…