Web API 渗透测试指南

news2024/9/20 20:38:18

概述

API(Application Programming Interface,应用程序编程接口)是一个允许不同软件应用程序之间进行通信和数据交换的接口。API定义了一组规则和协议,软件开发者可以使用这些规则和协议来访问操作系统、库、服务或其他应用程序的功能。

API的基本概念

接口(Interface):

  • API提供了一组公开的方法和端点,供外部系统调用。
  • 这些方法和端点通常通过URL、函数名或服务名称来表示。

请求和响应(Request and Response):

  • 客户端向API发送请求,请求中包含所需的操作和相关数据。
  • 服务器处理请求并返回响应,响应中包含操作结果和数据。

协议(Protocol):

  • API使用特定的协议来通信,常见的协议包括HTTP、HTTPS、FTP等。
  • 例如,基于HTTP协议的API通过HTTP请求和响应进行通信。

数据格式(Data Format):

  • API请求和响应的数据通常以标准格式表示,常见的格式包括JSON、XML、CSV等。
  • JSON是最常用的数据格式,因为它轻量级且易于解析。

API的作用

数据访问:

  • 提供一种访问应用程序或服务中数据的方式。
  • 例如,数据库API允许应用程序访问和操作数据库中的数据。

功能调用:

  • 允许应用程序调用另一程序的功能或服务。
  • 例如,支付API允许应用程序集成支付功能。

系统集成:

  • 实现不同系统或服务之间的集成和互操作。
  • 例如,社交媒体API允许应用程序发布内容到社交媒体平台。

API的类型

Web API:

  • 通过HTTP协议进行通信的API,常用于Web服务和应用程序。
  • 例如,RESTful API、GraphQL API。

库和框架API:

  • 提供特定编程语言或框架功能的API,供开发者在应用程序中使用。
  • 例如,Java API、Python标准库。

操作系统API:

  • 提供操作系统功能访问的API。
  • 例如,Windows API、POSIX API。

远程API:

  • 允许在网络上远程访问服务的API。
  • 例如,SOAP API、XML-RPC API。

常用的Web API有:

API类型描述优点适用场景
RESTful APIREST是一种软件架构风格,用于设计网络应用程序。RESTful是基于HTTP协议的遵循REST的API风格。使用标准HTTP方法操作资源,数据格式常为JSON或XML。扩展性好、可维护性强大多数Web服务和应用程序
GraphQL APIGraphQL是一种用于API的查询语言,由Facebook在2015年开源。GraphQL API是使用GraphQL查询语言和运行时构建的API。允许客户端指定所需数据的精确结构,通过单个端点(URL)处理复杂查询。高灵活性、高效率复杂查询、减少数据过多或不足的问题
gRPC APIgRPC是由Google开发的一个高性能、开源的远程过程调用(RPC)框架,使用HTTP/2进行通信,并通过Protocol Buffers(protobuf)进行数据序列化。gRPC API是使用gRPC框架构建的API。低延迟、高吞吐量需要高性能和高效通信的系统
JSON-RPC API使用JSON格式进行编码的RPC协议,通过HTTP或WebSocket通信,支持双向通信。轻量级、实时应用简单、轻量级API,实时应用
SOAP APISOAP(Simple Object Access Protocol,简单对象访问协议)是一种基于XML的协议,用于在网络上交换结构化信息。SOAP API是基于SOAP协议实现的API。高级安全性、事务支持企业级应用、需要高级功能的系统
OData APIOData(Open Data Protocol)是用于查询和更新数据的协议,基于REST架构,提供标准化的数据访问接口。OData API是使用此协议实现的API。简化CRUD操作企业数据集成和共享
HATEOAS APIHATEOAS(Hypermedia as the Engine of Application State)是一种RESTful API设计原则,HATEOAS的核心思想是通过超媒体(例如链接)将客户端引导到可以进行的下一步操作,而不是依赖于硬编码的URL或其他客户端。增强自描述性和导航性复杂系统的自发现和自适应
WebSub APIWebSub(以前称为 PubSubHubbub)是一种用于Web上实现实时通知和推送更新的协议。它基于发布/订阅(Pub/Sub)模式,使得发布者可以将更新推送到订阅者,而不需要订阅者不断轮询发布者获取更新。低延迟通知RSS/Atom feed的实时更新
Falcor APIFalcor 是一个用于构建高效数据获取和管理的 JavaScript 库,由 Netflix 开发。它提供了一种简化的数据访问模型,使客户端能够通过统一的 API 请求所需的数据,并处理复杂的数据获取逻辑。高效数据传输、灵活查询需要高效数据传输和灵活查询的应用
XML-RPC APIXML-RPC 是一种简单的远程过程调用(RPC)协议,它使用 XML 作为数据编码格式,通过 HTTP 协议进行通信。简单、易于实现需要与老旧系统或不同平台互操作的应用
WSDL APIWSDL(Web Services Description Language)是一种用于描述 Web 服务的标准格式。它基于 XML,定义了 Web 服务的接口,包括可用的方法、参数、返回值及其数据类型。标准化描述和发现Web服务企业级应用、需要标准化描述的系统

Web API 渗透测试

测试工具

  • 拦截数据包:Burp Suite等
  • 构造API请求:Postman、Apifox、Apipost等
  • 扫描工具:Owasp Zap、Awvs、Xray等

信息收集

信息收集是 Web API 渗透测试的重要步骤,无论是黑盒测试还是白盒测试,都需要系统地收集相关信息。在白盒测试中,测试人员可以直接获取API文档和代码等详细信息。在黑盒测试中,测试人员无法直接获取API文档,代码等资源,只能从外部自行收集。以下是API信息收集的方法:

1. 目录扫描

  • 大多数Web API位于网站/api//v1/api//v2/api/等目录中,通过目录扫描可以发现
  • 使用Burp Suite主动扫描和被动扫描也不错
  • 使用Xray被动扫描也不错

2. 网络流量分析

  • 有些系统的API和Web应用的端口是独立的,但是只要有交互通过分析流量就可以获取API接口,如Burp Proxy组件记录、浏览器开发者工具网络组件
  • 有些API会写在经过混淆后的Javascript文件中,无法直接获取,可以使用此方法

3. 使用互联网资源

  • 通过Github查询开源系统是否存在API及API目录和文档等
  • 通过Google、Shodan、Censys、Fofa等搜索引擎搜索

收集到API接口信息后,可以分析API的目录结构、接口命名规则、参数命名规则、功能和业务逻辑等,根据这些信息可以进行接口枚举和参数枚举。

漏洞检测

其实针对Web API的渗透测试和Web应用的渗透测试差不多,不过通常API的功能可能没有Web应用那么多,涉及的测试项较少:

测试项测试方法
接口枚举根据接口命名规则进行枚举,获取一些隐藏接口,如当前用户无权限或暂时未使用到的接口
参数枚举根据参数命名规则可以枚举接口的隐藏参数或隐藏接口的参数
敏感信息泄露响应中是否返回明文或Base64等可恢复明文的编码技术编码后的密码、密钥等
SQL注入对参数进行SQL注入测试,手工测试或使用sqlmap等工具,通常盲注多一些
XSS构造XSS Payload对参数进行测试,检查响应是否包含未过滤或未转义的XSS数据
命令注入对参数进行命令注入测试,检查是否可以注入成功,通常无回显
SSRF构造SSRF Payload对参数进行测试,检查是否存在SSRF漏洞
任意文件读取/下载对文件内容读取或下载的接口进行测试,检查是否存在漏洞
任意文件上传对文件上传功能进行测试,检查是否可以上传任意文件或绕过限制上传其它文件
路径穿越对文件读取、下载、上传等功能的接口进行路径穿越测试,检查是否未可以造成路径穿越
XXE对传递的数据为XML数据的API接口参数中注入XXE Payload,检查是否存在XXE漏洞
反序列化对于Json类型API接口,构造畸形Json数据,检查响应是否包含fastjson等组件名称和版本信息,进一步检测是否存在反序列化漏洞
CRLF注入查看参数是否被添加到HTTP响应中,构造包含CRLF的数据尝试注入HTTP响应头
错误信息泄露通过在参数中插入特殊字符、访问不存在的API接口或构造畸形数据使服务端返回错误响应,查看报错信息中是否包含服务器代码信息、数据库连接信息、SQL语句、框架和组件信息或者敏感文件的路径等信息。
拒绝服务构造超长字符串对Header或参数进行测试,检测服务器是否拒绝服务
用户名枚举使用用户名密码登录失败是否提示“用户不存在”等信息
暴力破解检查是否有锁定机制,或防重放机制,防止暴力破解
令牌伪造检查令牌随机性,是否容易伪造,是否使用JWT弱密码等
令牌有效期过长检查令牌是否长时间(超过2小时)有效
令牌重用会话注销后,检查令牌是否仍然可以重复使用
MFA绕过删除或修改多因素认证步骤中的部分数据包,检查是否可以绕过多因素认证
任意密码修改/重置检查密码修改/重置机制的安全性,是否可以绕过认证修改/重置任意用户密码
未授权访问删除令牌后,检查是否仍然可以访问需要授权的资源
不安全的直接对象引用 (IDOR)通过直接引用对象 ID 来访问未授权的数据
业务流程跨越绕过正常的业务流程,查看是否存在漏洞
越权修改请求参数的用户ID或角色ID,检查是否可以越权访问其他用户信息或高权限资源

实战案例

用户名枚举

用户名不存在时响应:


用户名存在时响应:

暴力破解

错误信息泄露

错误信息中包含物理路径、后端语言、CMS等信息:

CRLF注入

参数添加到了响应头:


利用CRLF注入进行XSS攻击:

博客原文:https://blog.hackall.cn/pentest/1222.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1984892.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【HarmonyOS NEXT星河版开发学习】小型测试案例02-华为登录

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面(还未发布) 前言 通过此案例,不得不感叹鸿蒙的强大了,仅仅使用了26行代码就构建出来了这个界面,确实特别方便&#…

k8s-service暴露pod

service暴露pod----nginx 1.编写nginx-deployment.yaml文件 [rootk8s-master deployment]# vim nginx-deployment.yaml [rootk8s-master deployment]# cat nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: deployment namespace: default s…

二进制部署Mysql8.0.31

一、软件包下载 企业版:Enterprise , 互联网行业一般不选择.社区版本:选择源码包 编译安装: source code .tar.gz 通用二进制 公司用什么版本数据库? 具体什么小版本号? 5.6.20 5.6.34 5.6.36 5.6.38 5.6.40 5.7.18 5.7.20 5…

【初阶数据结构】详解顺序表(上)

文章目录 1. 数据结构2. 顺序表2.1 顺序表的概念及结构2.1.1 线性表2.1.2 顺序表与数组的差别 2.2 顺序表的分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 静态顺序表和动态顺序表的区别 在学完C语言的知识后,我们也该跨入到学习数据结构的领域中来。毕竟学习语法是为解…

带风扇工业电脑行业分析:预计2030年全球市场规模将达到45.8亿美元

工业电脑是用于工业用途(生产产品和服务)的计算机,其外形尺寸介于上网本和服务器机架之间。工业电脑的可靠性和精度标准更高,价格通常比消费电子产品更昂贵。它们通常使用复杂的指令集,例如 x86,而其他指令…

用的到linux-tomcat端口占用排查-Day5

前言: 最近使用tomcat搭建了一套测试环境的应用,整个搭建过程也很简单,就是将部署包上传至服务器☞解压☞启动tomcat服务器,当然服务器也是成功启动了,但是发现前端应用报404,具体如下图所示。 一、现象及思…

新手买智能猫砂盆怎样不踩雷?三大热门款测评推荐!

上班族养猫最害怕的就是,辛苦一天回到家,发现家里弥漫着猫便便的味道和满盆的猫屎,满地的猫砂,就感觉整个人都绝望了,你们现在是不是这样?以前的我真是为了解决这个问题想破了脑袋,后面才了解到…

电话营销机器人革新电销行业

第一,减少企业各方面的支出 企业需要各方面的支出。例如,招聘成本和管理成本、员工薪资和社保都是非常大的支出。但AI智能电销机器人,只要购买费用和电话费的一小部分,就没有更多的费用。经计算,该机器人的成本仅相当于…

java之静态内部类

1.什么是静态内部类 答:静态内部类是一种特殊的成员内部类 2.直接创建静态内部类对象的方式? Outer.Inner oinew Outer.Inner(); public class Outer {int a10;static int b20;static class Inner{public void show1(){System.out.println("非静态里的方法被调用了&qu…

【Qt】探索Qt网络编程:构建高效通信应用

文章目录 前言:1. Qt 网络编程介绍1.1 什么是网络编程?1.2 Qt的模块 2. UDP Socket2.1 核心 API 概述2.2 写一个带有界面的 Udp 回显服务器2.3 写一个带有界面的 Udp 客户端 3. TCP Socket3.1 核心 API 概述3.2 代码: 4. HTTP Client4.1 核心…

基于InP的通用光子集成技术(五)

Meint Smit et al 2014 Semicond. Sci. Technol. 29 083001 9.通用测试 9.1. 晶圆验证 在通用工艺中,必须对每批次晶片的工艺性能进行验证;客户将期待这样的验证。在MPW中,验证用户ASPIC工艺性能是不实际的;每个ASPIC都需要不同的…

Shopee巴西站点凭直播带货超越亚马逊,shopee巴西站热销类目有哪些?

巴西电商市场加速增长,被誉为跨境最后一个蓝海市场,吸引了众多卖家和电商平台的关注。在这一片潜力无限的热土上,有人隔岸观火等待时机;有人却果断迈步积极探索。东南亚及台湾地区的领航电商平台Shopee平台,在巴西强势…

【Python机器学习】利用AdaBoost元算法提高分类性能——在数据集上应用AdaBoost

在之前用过的马疝病数据集上应用AdaBoost。 在一个难数据集上的AdaBoost应用步骤: 1、收集数据:提供的文本文件 2、准备数据:确保类别标签是1河-1而不是1和0 3、分析数据:手工检查数据 4、训练算法:在数据上&#xff…

java-面向对象综合练习

1、文字格斗回合制游戏 需求: 格斗游戏,每个游戏角色的姓名,血量,都不相同,在选定人物的时候(new对象的时候),这些信息就应该被确定下来。 举例: 程序运行之后结果为&#xff1a…

加密软件中的RSA和ECC的主要区别是什么

在加密软件中,RSA(Rivest-Shamir-Adleman)和ECC(Elliptic Curve Cryptography,椭圆曲线密码学)是两种广泛使用的非对称加密算法,它们之间存在多个关键区别。 1. 算法基础 RSA:基于大…

RPA+AI有什么应用?6大技术融合方向分析 | 实在RPA研究

随着数字化转型的加速,企业正寻求更高效、智能的方法来优化业务流程。机器人流程自动化(RPA)作为一种快速兴起的技术,已经证明了其在自动化重复性任务方面的能力。然而,当RPA与各种人工智能(AI)…

外部时钟传送带测量装置

外部时钟&传送带测量装置 1.外部时钟介绍2.循迹模块3.实操过程1.设置2.代码3.效果 链接: keysking-17 1.外部时钟介绍 将GPIO的外部电平接入即可对外部信号进行计数(PS:上面的内部时钟不是所谓的“高速内部时钟”,而是APB1的定时器分支)。当然,GPIO…

zabbix“专家坐诊”第250期问答

问题一 Q:乐维监控社区版监控交换机,能统计出端口的IP流量排名吗? A:社区版没有这个功能 ,正式版,流量报表可以实现端口IP流量排行。 问题二 Q:我看了一下乐维有事件平台汇总的功能&#xff0…

浅谈逻辑控制器插件之jp@gc - Parameterized Controller

浅谈逻辑控制器插件之jpgc - Parameterized Controller jpgc - Parameterized Controller是JMeter的一个强大插件,由JMeter Plugins项目提供。此插件允许用户以更加灵活和动态的方式控制测试计划中的采样器执行逻辑。它通过引入参数化概念,使得单个控制…

【学术会议征稿】第四届电气工程与计算机技术国际学术会议(ICEECT2024)

第四届电气工程与计算机技术国际学术会议(ICEECT2024) 2024 4th International Conference on Electrical Engineering and Computer Technology 第四届电气工程与计算机技术国际学术会议(ICEECT2024)将于9月27日-29日在哈尔滨举…