初步认识API安全

一、认识API

1. 什么是API

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

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

2. 为什么使用API

初步认识API安全_第1张图片

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

3. API造成的安全问题

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

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

4. 常见API特征

SOAP:WSDL

初步认识API安全_第2张图片

OpenApi:Swagger

初步认识API安全_第3张图片

RESTful:/v1/api

初步认识API安全_第4张图片

二、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

初步认识API安全_第5张图片

Postman导入Collection

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

初步认识API安全_第6张图片

设置hosts

初步认识API安全_第7张图片

初步认识API安全_第8张图片

2. vapi1

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

创建用户

初步认识API安全_第9张图片

查看用户

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

初步认识API安全_第10张图片

初步认识API安全_第11张图片

修改用户

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

初步认识API安全_第12张图片

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

初步认识API安全_第13张图片

防护措施:完善权限校验

3. vapi2

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

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

初步认识API安全_第14张图片

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

初步认识API安全_第15张图片

字典在vapi/Resources/API2_CredentialStuffing目录中

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

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

初步认识API安全_第16张图片

密码设置取后面8位数字

初步认识API安全_第17张图片

爆破得到账号密码

初步认识API安全_第18张图片

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

初步认识API安全_第19张图片

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

4. vapi3

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

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

初步认识API安全_第20张图片

利用接口创建用户

初步认识API安全_第21张图片

用在Postman注册的用户登录

初步认识API安全_第22张图片

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

初步认识API安全_第23张图片

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

初步认识API安全_第24张图片

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

5. vapi4

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

初步认识API安全_第25张图片

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

初步认识API安全_第26张图片

初步认识API安全_第27张图片

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

初步认识API安全_第28张图片

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

6. vapi5

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

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

初步认识API安全_第29张图片

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

初步认识API安全_第30张图片

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

初步认识API安全_第31张图片

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

7. vapi6

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

先创建用户

初步认识API安全_第32张图片

查询用户credit为0

初步认识API安全_第33张图片

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

初步认识API安全_第34张图片

得到flag

初步认识API安全_第35张图片

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

8. vapi7

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

创建用户

初步认识API安全_第36张图片

登录

初步认识API安全_第37张图片

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

初步认识API安全_第38张图片

防护方法:配置 CORS 添加 CSRF_TOKEN

9. vapi8

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

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

初步认识API安全_第39张图片

得到flag

初步认识API安全_第40张图片

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

10. vapi9

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

爆破pin的值

初步认识API安全_第41张图片

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

初步认识API安全_第42张图片

改了v1后爆破得到为1655

初步认识API安全_第43张图片

初步认识API安全_第44张图片

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

11. vapi10

直接发送就可以

初步认识API安全_第45张图片

(三) 工具利用检测

Post联动xray自动检测

开启xray被动监听

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

初步认识API安全_第46张图片

打开Postman的下游代理

初步认识API安全_第47张图片

Postman发包

初步认识API安全_第48张图片

跳转到这个页面点击run vapi

初步认识API安全_第49张图片

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

初步认识API安全_第50张图片

三、总结

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

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

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

你可能感兴趣的:(API安全,安全)