API攻防-接口安全

API攻防-接口安全

介绍

如今,越来越多的用户和应用都会调用其他应用的API来传输数据和完成业务。如果API在进行处理时,并没有对接受的数据、用户的身份等等进行验证和设防,那么就会造成各种各样的安全问题(SQL注入、未授权访问等等)。

常见接口

HTTP类接口(通常是json格式)

HTTP接口是基于HTTP协议提供的API接口,它使用HTTP请求方法(如GET、POST、PUT、DELETE等)来操作资源。客户端通过发送HTTP请求到服务器,并接收服务器的HTTP响应来进行数据交互。

例如:RESTful API就是典型的HTTP接口。

RPC类接口(什么格式都有可能)

远程过程调用(Remote Procedure Call,RPC)是一种计算机通信协议。它允许一个计算机程序在另一台计算机上执行代码,而不需要程序员显式编写网络代码。

例如:微服务场景下常用RPC类接口。

RPC可以分为两部分:用户调用接口 + 具体网络协议。前者为开发者需要关心的,后者由框架来实现。

例如,我们定义一个函数,我们希望函数如果输入为“Hello World”的话,输出给一个“OK”,那么这个函数是个本地调用。如果一个远程服务收到“Hello World”可以给我们返回一个“OK”,那么这是一个远程调用。我们会和服务约定好远程调用的函数名。因此,我们的用户接口就是:输入、输出、远程函数名。

具体网络协议,是框架来实现的,把开发者要发出和接收的内容以某种应用层协议打包进行网络收发。

例如,假设我们有一个RPC接口,其格式可能如下:

{
  "jsonrpc": "2.0",
  "method": "要调用的方法名称",
  "params": "方法所需的参数",
  "id": "请求的唯一标识符"
}

WebService类接口(通常是xml格式)

WebService是一种跨平台的、基于Web的分布式系统设计方法,它允许不同应用程序在不同平台、不同语言之间进行数据交互。WebService通常使用SOAP(Simple Object Access Protocol)协议通过HTTP进行通信。

使用WSDL(Web Services Description Language)描述服务接口。通常比HTTP接口更复杂,但提供了更强的类型安全和事务支持。

例如:WebService经常用于企业内部的系统集成,如ERP、CRM等系统之间的数据交换。

SOAP

SOAP(Simple Object Access Protocol)简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于 XML(标准通用标记语言下的一个子集)的协议,它被设计成在 WEB 上交换结构化的和固化的信息。SOAP 不是 WebService 的专有协议。

SOAP 使用 HTTP 来发送 XML 格式的数据,可以简单理解为:SOAP = HTTP + XML

WSDL

WSDL(Web Services Description Language)即网络服务描述语言,用于描述Web 服务的公共接口。这是一个基于 XML 的关于如何与 Web 服务通讯和使用的服务描述;也就是描述与目录中列出的 Web 服务进行交互时需要绑定的协议和信息格式。

RESTful API

RESTful API(表述性状态转移)是一种体系结构样式,它利用现有的和广泛采用的技术,特别是HTTP,并且不会创建任何新标准。REST可以将数据结构化为XML,YAML或任何其他机器可读格式,但通常,JSON是首选。

可能造成的安全问题

Method:请求方法

  • 攻击方式:OPTIONS,PUT,MOVE,DELETE
  • 效果:上传恶意文件,修改页面等

URL:唯一资源定位符

  • 攻击方式:猜测,遍历,跳转
  • 效果:未授权访问等

Params:请求参数

  • 攻击方式:构造参数,修改参数,遍历,重发
  • 效果:爆破,越权,未授权访问,突破业务逻辑等

Authorization:认证方式

  • 攻击方式:身份伪造,身份篡改
  • 效果:越权,未授权访问等

注:实际上WEB安全测试就是API测试,因此API测试中出现的安全漏洞跟WEB漏洞一致。

测试方法(如何寻找API?)

获得API后的通用测试思路

手工+工具结合的方式

  • 手工:用户自己构造参数访问该接口,查看接口返回的内容。
  • 工具:使用readyAPI、soapUI等进行批量化测试。

WebService

探针:可以在url后面加上?wsdl,这样的话就可以将所有的API以xml格式显示。

利用工具:SoapUI&ReadyAPI

Swagger

Swagger是一款测试API的工具,通常会通过Web页面进行测试。

探针:

  • 通过浏览器抓包,查看加载的js资源,查看是否出现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

如果探针到了服务器上存在Swagger,那么就可以获取到服务器上的所有API。

利用:exp和soapAPI

exp:

WebPack

WebPack是一个项目打包的工具,将整个项目及环境进行打包,使整个项目体积更小,方便进行项目的交付。

WebPack在打包项目时会将整站的API和API参数打包在一起供Web集中调用。

探针:插件判断&浏览器抓包查看是否存在关键字进行判断。

利用:

fofa搜索webpack语法:
js_name="/js/app.js"

dvws靶场

地址

https://github.com/snoopysecurity/dvws-node

鉴权/未授权访问

我们首先注册一个账户,登录之后发现Admin Area区域无法访问。我们可以通过抓包查看详细信息:
img

上述数据包在登录的时候会触发,我们发现:响应数据包中admin参数为false。那么就代表:如果我们随意注册一个用户,那么admin参数均为false,都访问不了Admin Area区域。

因此,我们可以考虑在注册的时候,将admin这个参数改为true,尝试注册一个管理员账号。

img

从返回的数据包可以看出,该用户是可以进行注册的。

注册之后,我们再次尝试访问该页面,此时就可以进行未授权访问。

img

查看该用户的JWT,我们也可以发现,该用户的身份发生了变化。

img

SOAP/XXE

我们进入到管理员页面后,我们可以对用户名称进行搜索,查看该用户是否存在。我们可以看一下数据包:
img
从这个数据包中,我们可以发现:数据都是xml/soap格式。

因此,我们可以得知:这个接口就是WebService类型的接口。

既然数据是XML,那么我们可以尝试XXE攻击,修改如下数据包,读取服务器的/etc/passwd文件。
img

证明存在XXE漏洞。

阿里云accessKey/数据泄露

介绍

阿里云accessKey是用户阿里云上的资源(云主机、OSS等等)的凭证。如果泄露,那么该用户上阿里云的所有资源都将被攻击者所掌控。

如果攻击者获得了某用户的accessKey,那么攻击者可以通过行云管家这样的云管理平台进行连接。

利用

阿里云AccessKey泄漏利用工具:https://github.com/mrknow001/aliyun-accesskey-Tools

致谢

https://www.bilibili.com/video/BV1pQ4y1s7kH/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click

免责声明

    本博客中的内容仅供学习之用,不用于商业用途,也不可以用于任何非法用途,否则后果自负,本人不承担任何责任!
posted @   夏目^_^  阅读(113)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示