目录
API接口
接口文档
接口测试的方法
单流程
多流程
Swgger-ui未授权访问
在之间的一次面试中面试官问到了API接口测试,我回答的不好,因为自己确实不太会,后面才下去学习了,这里复习和练习一下
API接口
API(Application Programming Interface)是应用程序开发接口的缩写,意思是一些预设好的函数或方法,这些预设好的函数或方法允许第三方程序通过网络来调用数据或提供基于数据的服务。
Web API是网络应用程序接口。包含了广泛的功能,网络应用通过API接口,可以实现存储服务、消息服务、计算服务等能力,利用这些能力可以进行开发出强大功能的web应用。
API接口的类型
RESTful API:REST,Representational State Transfer的缩写,是一种使Web基础架构具有分布式特征的架构风格。RESTful API是基于REST架构风格的API,通常使用HTTP/js/ajax进行数据传输。它是使用最广泛的API类型之一。
SOAP API:全称是Simple Object Access Protocol,是UDDI、XML和SOAP的组合,它要求在高度可靠和安全的系统之间进行通信。SOAP API 使用 XML 格式请求和响应数据,并支持多种协议,包括 HTTP、HTTPS 等。对于企业级应用程序来说,SOAP API更适合处理大规模数据交换和复杂的业务流程。
GraphQL API:GraphQL是一种用于API的查询语言。与REST和SOAP不同,GraphQL不像API那样让开发者获取整个集合数据,而是根据开发者的需要返回客户端需要的数据。GraphQL API具有强大的类型系统和查询语言,使得客户端能够更精确地请求数据,而不是不必要地获取整个集合数据。
例如12306购票网站,所有的数据都在12306上,12306提供一整套接口,调用接口我们就可以获取到里面的数据。
接口文档
在项目开发中,web项目的前后端分离开发,APP开发,需要由前后端工程师共同定义接口,编写接口文档,之后大家都根据这个接口文档进行开发,到项目结束前都要一直维护。
接口文档的规范
每一个接口的文档分为四部分:请求方法、URI、请求参数、返回参数
-
请求方法:
获取(GET)
、新增(POST)
、修改(PUT)
、删除(DELETE)
等 -
URI:调用这个接口需要访问的URI
-
请求参数:字段、描述、类型、是否必填、备注
-
返回参数:是否调用成功,返回的数据有哪些
接口测试的方法
和web测试一样,模拟客户端向服务器发送报文请求,服务器接收请求报文后对相应的报文做处理并向客户端返回应答,客户端接收应答的一个过程。
唯一的区别是接口测试需要自己构造参数,而web测试时网页会自动辅助构造参数。
单流程
业务场景无上下游依赖,这个接口可以代表整个功能,如查询个人信息
-
构造参数 --> 发送请求 --> 校验结果
-
常规漏洞
-
...
多流程
接口之间有数据流转,共同形成一个完成的业务流程,如注册功能
-
构造参数 --> 发送请求 --> 校验结果
-
常规漏洞
-
流程是否可以绕过,直接到达最后一步
-
...
下面我就用Swgger-ui未授权访问漏洞来练习一下接口测试
Swgger-ui未授权访问
Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
-
Swagger-IU的原本用意:Swagger-UI会根据开发人员在代码中的设置来自动生成API说明文档
-
但是如果存在相关的配置缺陷就有可能攻击者可以未授权翻查Swagger接口文档,得到系统功能API接口的详细参数,再构造参数发包,通过回显获取系统大量的敏感信息。
Swgger-ui可以尝试未授权访问的目录:
/api
/api-docs
/api-docs/swagger.json
/api.html
/api/api-docs
/api/apidocs
/api/doc
/api/swagger
/api/swagger-ui
/api/swagger-ui.html
/api/swagger-ui.html/
/api/swagger-ui.json
/api/swagger.json
/api/swagger/
/api/swagger/ui
/api/swagger/ui/
/api/swaggerui
/api/swaggerui/
/api/v1/
/api/v1/api-docs
/api/v1/apidocs
/api/v1/swagger
/api/v1/swagger-ui
/api/v1/swagger-ui.html
/api/v1/swagger-ui.json
/api/v1/swagger.json
/api/v1/swagger/
/api/v2
/api/v2/api-docs
/api/v2/apidocs
/api/v2/swagger
/api/v2/swagger-ui
/api/v2/swagger-ui.html
/api/v2/swagger-ui.json
/api/v2/swagger.json
/api/v2/swagger/
/api/v3
/apidocs
/apidocs/swagger.json
/doc.html
/docs/
/druid/index.html
/graphql
/libs/swaggerui
/libs/swaggerui/
/spring-security-oauth-resource/swagger-ui.html
/spring-security-rest/api/swagger-ui.html
/sw/swagger-ui.html
/swagger
/swagger-resources
/swagger-resources/configuration/security
/swagger-resources/configuration/security/
/swagger-resources/configuration/ui
/swagger-resources/configuration/ui/
/swagger-ui
/swagger-ui.html
/swagger-ui.html#/api-memory-controller
/swagger-ui.html/
/swagger-ui.json
/swagger-ui/swagger.json
/swagger.json
/swagger.yml
/swagger/
/swagger/index.html
/swagger/static/index.html
/swagger/swagger-ui.html
/swagger/ui/
/Swagger/ui/index
/swagger/ui/index
/swagger/v1/swagger.json
/swagger/v2/swagger.json
/template/swagger-ui.html
/user/swagger-ui.html
/user/swagger-ui.html/
/v1.x/swagger-ui.html
/v1/api-docs
/v1/swagger.json
/v2/api-docs
/v3/api-docs
使用dirsearch扫描发现了一个页面:
访问可以看到是Swgger-ui的页面:
下面我们就可以根据页面提供的api接口文档进行api接口测试了
例如下面这样的一个页面:
这里的接口写的是所有煤矿信息,那么我们就可以尝试点击Try it Out尝试访问一下:
可以看到访问到了所有的煤矿的信息,那么设想一下,如果有一个查看用户账号信息的接口我们可以未授权访问是不是就可以获取到所有用户的敏感信息了
账号密码都有了,那么下一步就是快乐的登录系统了
参考文章:
什么是API接口?API接口的类型,如何调用API接口?-CSDN博客
Swagger未授权访问漏洞-腾讯云开发者社区-腾讯云