API接口安全测试Tips

admin 2024年7月4日21:50:24评论2 views字数 3838阅读12分47秒阅读模式

API接口安全

在日常的测试中,我们会经常看到一些接口文档或接口地址,在数字化时代,API成为了数据交互的核心,但同时也带来了安全问题,本文的思路在于总结一些api方面常见的攻击面。笔者在此方向也是一个小白,如有错误,还望各位反馈。

0x01 API分类

SOAP - WSDL soap是简单对象访问协议,用于分布式环境的基本信息交换的同行协议,描述传递信息的格式和规范,它可以用于连接web服务和客户端之间的接口,是一个可以在不同操作系统上运行的不同语言编写的程序之间的传输通信协议,格式为xml。

fofa探针:

?wsdl

API接口安全测试Tips

像上图所示,即为soap接口文档,或一般后缀为.asmx,即可判断为soap接口,在.asml后添加?wsdl会以xml的形式显示当前接口文档所有信息。

API接口安全测试Tips

OpenApi - Swagger OpenAPI是用来描述API的文档,该文档基于控制器中的xml注释以及实体类属性attribue特性,它是OpenAPI流程的核心。Swagger我们就比较常见了,Swagger是一套围绕OpenApi规范构建的开源工具,可以帮助设计、构建、记录和使用Open API。

fofa探针:

Swagger-UI

API接口安全测试Tips

RESTful - /v1/api Rest 是web服务的一种架构风格,一种设计风格,是一种思想;同时Rest不是针对某一种编程语言的。

API接口安全测试Tips

0x02 如何判断网站使用何种接口

wsdl

方法1:一般站点在传参时url为.asmx时,可能为wsdl接口

API接口安全测试Tips

方法2:在其IP下其他端口存在如此类似站点,可能使用wsdl接口

API接口安全测试Tips

swagger

方法1:查看js资源中有没有请求swagger

API接口安全测试Tips
方法2:目录扫描,有以下类似格式的目录或文件代表可能存在swagger

/swagger
/api/swagger
/swagger/ui
/api/swagger/ui
/swagger-ui.html
/api/swagger-ui.html
/user/swagger-ui.html
/libs/swaggerui
/api/swaggerui
/swagger-resources/configuration/ui
/swagger-resources/configuration/security
API接口安全测试Tips

0x03 工具测试API

wsdl 工具测试

API接口安全测试Tips

这里我们选择New Security Test后选择API Definition输入我们所获得的wsdl url地址

API接口安全测试TipsAPI接口安全测试Tips

下一步选择测试安全选项,可进行sql注入、xml测试等漏洞。

API接口安全测试Tips

以下就开始了安全测试

API接口安全测试Tips

swagger 工具测试

常见的测试工具有:https://github.com/lijiejie/swagger-exp https://github.com/jayus0821/swagger-hack 这里我习惯用的是swagger-hack,在启动后它会自动化爬取并测试所有swagger API接口。运行非常的简单,直接在命令行后输入swagger首页的url地址即可

python3 swagger-hack2.0.py -u http://x.x.x.x:8080/swagger/v1/swagger.json
API接口安全测试Tips

ApiKit burp插件使用

APIKit是基于BurpSuite提供的JavaAPI开发的插件。APIKit可以主动/被动扫描发现应用泄露的API文档,并将API文档解析成BurpSuite中的数据包用于API安全测试。以下是APIKit所支持探测并扫描应用泄露的API分类

API接口安全测试Tips

下载链接:

https://github.com/API-Security/APIKit

安装也非常的简单,在burp的Extensions中选择安装APIkit插件即可

API接口安全测试Tips

安装成功之后,APIKit中有两个选项默认是没有被勾选的

API接口安全测试Tips这两个选项的意思分别是:

  1. Auto request sending  对子API进行自动化鉴权测试,快速发现API未授权访问漏洞。
  2. Send with cookie 开启Cookie,可以把包的Cookie存下来,生成请求的时候保留Cookie。在平时测试时,第一个Auto request sending 一定要慎重勾选,它会将爬取到的所有子API自动传参跑一遍,非常容易影响业务(吃牢饭)

安装好之后,就可以被动扫描应用泄露的API文档

API接口安全测试Tips

这里可以看到它也自动给我们构造好了参数,我们可以直接放到Repeater中发包进行测试

API接口安全测试TipsAPI接口安全测试Tips

0x04 手工测试API

以下是在进行API测试中常用的方法,

Method:请求方法
 攻击方式:OPTIONS,PUT,MOVE,DELETE
 效果:上传恶意文件,修改页面等
URL:唯一资源定位符
 攻击方式:猜测,遍历,跳转
 效果:未授权访问等
Params:请求参数
 攻击方式:构造参数,修改参数,遍历,重发
 效果:爆破,越权,未授权访问,突破业务逻辑等
Authorization:认证方式
 攻击方式:身份伪造,身份篡改
 效果:越权,未授权访问等
Headers:请求消息头
 攻击方式:拦截数据包,改Hosts,改Referer,改Content-Type等
 效果:绕过身份认证,绕过Referer验证,绕过类型验证,DDOS等
Body:消息体
 攻击方式:SQL注入,XML注入,反序列化等
 效果:提权,突破业务逻辑,未授权访问等

VAPI靶场搭建

靶场安装

#安装docker的前提下
git clone https://github.com/roottusk/vapi.git
cd vapi/

我这里是直接导入的靶场文件,下载之后,修改yaml文件 vAPI默认绑定主机80(HTTP)、3306(MySQL)、8001(PHPMyAdmin)端口

vim docker-compose.yml

API接口安全测试TipsAPI接口安全测试Tips

修改好之后直接启动即可,访问IP呈现如此界面,代表安装成功

docker-compose up -d

API接口安全测试Tips

Postman配置 vAPI 编写了专门的测试 Collection

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

API接口安全测试Tips

点击导入URl后配置HOST为靶机IP地址

API接口安全测试Tips

随机测试正常返回包后,靶场搭建结束

API接口安全测试Tips

水平越权

搭建好靶场之后,我们打开API1,就是越权漏洞靶场 测试时,与我们平时测试水平越权时的方法类似 打开Create user 创建用户–>传入用户名、姓名、课程、密码

API接口安全测试Tips

Get User 这里很明显,就是获取当前用户信息,需要在 Headers 中设置 Authorization-Token,格式为base64_encode(username:password)。这里我们输入刚刚返回包中的6,所返回的就是我们刚刚创建的用户信息

API接口安全测试Tips

漏洞利用点 在获取了对象数据时,只要传入任一有效的 Authorization-Token,即可获取所有用户信息。这里我们可以尝试将userid改为其他数字,来测试是否存在越权漏洞问题。

API接口安全测试Tips

验证枚举

API4 缺少对资源和速率的限制。Mobile Login 手机登录,通过手机号登录,输入手机号,提示已将4位数的OTP发送到手机。OTP:One Time Password,又称一次性口令、一次性密码、动态密码、单次有效密码。

API接口安全测试Tips

Verify OTP接口对传入的4位数字的OTP进行验证

API接口安全测试Tips

漏洞利用点:后台没有对访问访问速率与错误次数进行限制,可暴力破解4位OTP 将数据包复制到Burp的Intruder模块中

API接口安全测试Tips

设置payload

API接口安全测试Tips

开始枚举

API接口安全测试Tips

爆破获得验证码,这里直接验证后获得key后在Get Details 认证参数中插入key请求,获得flag

API接口安全测试Tips

垂直越权

功能权限认证缺陷。有些程序员为了方便,会将同样的业务抽离出两个不同的接口,以供不同的用户使用,比如所有用户访问/userinfo可以访问自己的用户信息,管理员访问/userinfolist可以查看所有用户信息,这样的好处是不必在一个接口中同时完成筛选查找和批量查找,但这样的两个接口同样需要进行管理员权限认证,否则便会产生越权漏洞。这里使用Create User创建一个普通用户,使用其账号密码所生成的base64放到Get User的认证参数中,请求Get User接口。

API接口安全测试TipsAPI接口安全测试Tips

漏洞利用点 分离出的管理员用来查看所有用户数据的 /users 接口没有进行管理员权限校验,只需要创建普通用户,然后使用普通用户即可查看所有用户数据。

API接口安全测试Tips

数据库注入

API8,可以看到该接口下没有用户创建接口了,只有一个User Login接口,与Get Secret登录后获取用户信息。

API接口安全测试TipsAPI接口安全测试Tips

漏洞利用点 尝试使用SQL注入万能密码登陆后使用所获得key去访问/user/secret接口,获得flag

API接口安全测试TipsAPI接口安全测试Tips

V1/2多版本

API9 只有一个接口,用于用户登录,可以看出需要传出username与4位数字的pin码。

API接口安全测试Tips

漏洞点 尝试爆破,发现存在防爆破机制,当尝试次数过多则会返回500。

API接口安全测试Tips

将 URL中的v2 改成v1,爆破老版本API,没有爆破机制,成功爆破pin 为1655,获得flag。

API接口安全测试TipsAPI接口安全测试Tips

0x05 参考链接

https://xz.aliyun.com/t/11977?time__1311=Cq0xuDRD0D9GeGNPeeuG4RhGrQ3wGO%2BbD

https://blog.csdn.net/m0_52526329/article/details/132022540

原文始发于微信公众号(Tide安全团队):API接口安全测试Tips

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月4日21:50:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   API接口安全测试Tipshttps://cn-sec.com/archives/2920391.html

发表评论

匿名网友 填写信息