针对API漏洞挖掘技巧学习

admin 2024年7月9日10:43:46评论45 views字数 2181阅读7分16秒阅读模式

前言

首先我们需要了解API基本的一些知识,我们首先来看几个GET方式的API

GET /api/books HTTP/1.1
Host: example.com

首先上面这种,是api的端点,也就是请求点,通过交互获得图书馆的图书列表,例如另一个端点可能是/api/books/mystery,那么这个可能可以检索书籍列表。

一旦确认了端点,就需要确定怎么样可以和他们产生交互,也就是触发检索。

API文档

api一半都会有相对应的文档,以便开发人员去使用,通常是公开可用的,但是也有不公开的,我们也可以使用api的程序来访问。例如:

  • /api

  • /swagger/index.html

  • /openapi.json

如果标识了资源终结点,需要调查一下基本路劲,比如:表示了终结点/api/swagger/v1/users/123,就需要调查以下路径

  • /api/swagger/v1

  • /api/swagger

  • /api

靶场一、使用文档利用API端点

我们想要完成这个靶场,需要知道几点:

什么是API文档,API文档对攻击者如何使用,如何发现API文档

这里我是用插件findsomething找到页面中的api

针对API漏洞挖掘技巧学习

访问之后提示我们缺少参数,我们往上一级目录,也就是api目录访问看看

针对API漏洞挖掘技巧学习

发现了说明文档

我们直接点delete就可以直接对指定用户进行删除,但是这里回显是401权限不足,根据靶场提供的信息我们wiener用户,再次访问即可删除。当然,我们也可以通过抓包,去查看这个api的使用参数,仿照发送请求,达到任意控制效果

针对API漏洞挖掘技巧学习

常见支持HTTP的方法

  • GET - Retrieves data from a resource.GET -从资源中检索数据。

  • PATCH - Applies partial changes to a resource.PATCH -删除对资源的部分更改。

  • OPTIONS - Retrieves information on the types of request methods that can be used on a resource.
    OPTIONS -检索有关可在资源上使用的请求方法类型的信息。

研究api端点时,测试方法很重要,比如我们知道端点/api/tasks,我们可以尝试以下方法

  • GET /api/tasks - Retrieves a list of tasks.GET /api/tasks -检索任务列表。

  • POST /api/tasks - Creates a new task.POST /api/tasks -创建一个新任务。

  • DELETE /api/tasks/1 - Deletes a task.
    DELETE /api/tasks/1 -完成任务。

靶场二、查找利用未使用的API端点

该靶场,首先我们需要找到未被使用的api端点,上面一个靶场我们是找不到的,这里根据靶场提示,我们挨个点击靶场中购买,走一遍购买流程,我们可以在数据记录中,找到一个隐藏的api

针对API漏洞挖掘技巧学习

这个是我们在提交购买的时候产生的,我们将这个发送到重放器中

尝试使用不同的方式进行排查,比如我们可以尝试使用/api/products/1,或者/api/products、/api来排查所有的内容,但是这里均无法响应

那么下一步我们可以尝试不同的方式

比如我这里使用post

针对API漏洞挖掘技巧学习

这里提示不支持该方法,并且告诉了我可用的方法,这里我们试试

针对API漏洞挖掘技巧学习

提示内部服务错误,我们在下面加上括号

针对API漏洞挖掘技巧学习

提示我们缺少price参数

加上参数

针对API漏洞挖掘技巧学习

提示必须是非负整数,我们去掉引号试试

针对API漏洞挖掘技巧学习

提示我们需要Content-Type: application/json

我们复制放到下面

针对API漏洞挖掘技巧学习

这里成功修改了价格,我们将价格修改为0元,购买即可通关。

针对API漏洞挖掘技巧学习

本关卡以api传递参数的方式,让我们成功修改了参数。

识别隐藏参数

我们通常可以看到,一个api请求,他会允许我们修改某些东西

PATCH /api/users/请求它允许用户更新他们的用户名和电子邮件,并包含以下JSON:

{"username": "wiener", "email": "[email protected]", }

返回的信息是以下JSON

{"id": 123, "name": "John Doe", "email": "[email protected]", "isAdmin": "false" }

这表示隐藏的id和参数,可能可以进行改变使用

我们想要测试上面的isadmin参数,可以将上面的参数修改后发送到PATCH请求

{"username": "wiener", "email": "[email protected]", "isAdmin": false, }

如果我们将false修改为true,那么在没有充分验证的情况下,有可能会错误绑定对象,获取权限。

靶场三、利用批量分配漏洞

该靶场,我们需要分析一下,流量包中的api,根据提示,我们在购买的过程中,找到两个api的包

针对API漏洞挖掘技巧学习

一个get一个post两个数据包,这里我们可以在post数据包中看到一个数据结构

针对API漏洞挖掘技巧学习

在GET数据包中,可以在返回包中发现一些隐藏的数据传递方式

针对API漏洞挖掘技巧学习

我们可以尝试拼接到post数据包中进行尝试

针对API漏洞挖掘技巧学习

这里报错提示我们资金不足, 我们尝试改变内容

针对API漏洞挖掘技巧学习

尝试数据

改成100,直接通关了

针对API漏洞挖掘技巧学习

返回true,完成了关卡。

针对API漏洞挖掘技巧学习

该靶场的问题,在于,我们可以从GET中获取到一些隐藏的参数,在得到隐藏参数之后,我们可以通过post或者其他的方法进行发送,尝试执行。

原文始发于微信公众号(SecNL安全团队):针对API漏洞挖掘技巧学习

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月9日10:43:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   针对API漏洞挖掘技巧学习https://cn-sec.com/archives/2934507.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息