基本介绍

Swagger是一种用于描述、构建和使用RESTful API的开源框架,它提供了一套工具和规范,帮助开发者设计、文档化和测试API以及生成客户端代码和服务器存根,Swagger的核心组件是OpenAPI规范(以前称为Swagger规范),它是一个用于定义和描述API的规范,OpenAPI规范使用JSON或YAML格式,包括API的路径、参数、响应、错误处理等信息,它提供了一种标准的方式来描述API的结构和行为

版本介绍

Swagger是一个持续发展的项目,经历了以下几个主要版本的演变:

  • Swagger 1.0:Swagger最初的版本,它提供了一种基本的API描述语言和工具集,用于定义和文档化RESTful API,Swagger 1.0使用JSON格式的规范并提供了一些基本的注解和工具来生成API文档

  • Swagger 2.0:Swagger 2.0引入了一些重要的改进和扩展,它是Swagger项目的一个重要里程碑,最显著的变化是引入了OpenAPI规范的概念(当时称为Swagger规范),它提供了一种更强大、更灵活的方式来定义和描述API,Swagger 2.0支持JSON和YAML两种格式的规范并提供了更多的注解和工具来生成API文档、客户端代码和服务器存根

  • OpenAPI 3.0:为了进一步推进API描述的标准化,Swagger项目在Swagger 2.0之后演化为OpenAPI规范,OpenAPI 3.0是一个独立的规范,它与Swagger 2.0兼容但引入了一些重要的改进和新功能,OpenAPI 3.0支持更多的数据类型、响应内容协商、请求体和响应的内容协商、安全定义等,它还引入了组件的概念,用于更好地组织和重用规范中的各个部分

  • Swagger UI:Swagger UI是一个用于可视化展示和测试API文档的工具,它可以根据Swagger或OpenAPI规范自动生成一个交互式的API文档界面,让开发者可以方便地浏览API的路径、参数、响应等信息并进行API调试和测试

应用界面

Swagger系统大致如下所示:

点击查看接口时会给出接口的调用示例,包括参数、可能出现的回显状态等

版本鉴别

我们在访问swagger的时候可以留意一下swagger的接口文件信息,其中可以鉴别当前的swagger的版本类别,下面的版本为swagger 2.0版本:

下面的版本为openapi 3.0

安全评估

未授权类

Swagger文件给出了系统的完整的接口列表信息,包含接口路径、参数信息、回显状态情况等,渗透测试人员可以根据接口构造请求数据报文对接口的安全测试,例如:接口的未授权访问等,所以对于企业而言Swagger文件无疑是一个资产暴露点,对于此类系统建议设置访问权限,仅限于测试阶段供测试人员进行测试使用,或者将其调至内网访问,不建议映射到外网去,从而降低这类信息比恶意利用的风险

自动化类

在针对上面的接口测试时我们有一个很头疼的点就是需要挨个去手动测试一遍所有的swagger接口,这是一个非常耗时的工作量,所以我们思考的是如何对其实现自动化的安全评估,初步的流程如下:

  • 获取接口文件

  • 接口导入工具

  • 工具发包测试

接口文件

接口文件的获取我们一般可以直接通过访问Swagger页面获取到,例如:

接口导入

这里我们选择postman接口测试工具

https://www.postman.com/downloads/

注册账户123)

完成登录之后进入到主界面并导入文件

然后执行导入操作:

随后我们可以在API界面看到完整的API接口列表:

环境设置

初始状态下我们导入工具后baseUrl是一个空值:

此时我们需要设置全局的环境变量:

填写如下信息设置变量名为test,其值设置为"http://49.75.27.150:8020/swagger/"

随后选择刚刚设置的环境"test"

随后我们在项目当中即可看到baseUrl被替换

自动化类

随后我们设置一个代理

发送请求后在burpsuite中收到请求记录,说明代理成功

随后我们直接运行

随后在burpsuite中收到请求记录:

此时我们可以接入Xray进行漏洞的挖掘,在burpsuite中再进行一层代理将请求代理到Xray中去

然后在xray中开启监听开始自动化对所有api接口进行扫描

防御措施

禁止将Swagger接口外置到外网环境中

小结

本篇文章我们主要介绍了Swagger接口的基本概念、发展历史、未授权访问的检测方式、自动化安全测试的方法、安全防御措施等

免责声明

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本平台和发布者不为此承担任何责任。