一、概述1.1 API的基本概念1.2 API的作用1.3 API的类型二、Web API 渗透测试2.1 测试工具2.2 信息收集2.2.1 目录扫描2.2.2 网络流量分析2.2.3 使用互联网资源2.3 漏洞检测2.4 实战案例2.4.1 接口枚举2.4.2 参数枚举2.4.3 用户名枚举2.4.4 暴力破解2.4.5 错误信息泄露2.4.6 CRLF注入
一、概述
API(Application Programming Interface,应用程序编程接口)是一个允许不同软件应用程序之间进行通信和数据交换的接口。API定义了一组规则和协议,软件开发者可以使用这些规则和协议来访问操作系统、库、服务或其他应用程序的功能。
1.1 API的基本概念
接口(Interface):
API提供了一组公开的方法和端点,供外部系统调用。这些方法和端点通常通过URL、函数名或服务名称来表示。
请求和响应(Request and Response):
客户端向API发送请求,请求中包含所需的操作和相关数据。服务器处理请求并返回响应,响应中包含操作结果和数据。
协议(Protocol):
API使用特定的协议来通信,常见的协议包括HTTP、HTTPS、FTP等。例如,基于HTTP协议的API通过HTTP请求和响应进行通信。
数据格式(Data Format):
API请求和响应的数据通常以标准格式表示,常见的格式包括JSON、XML、CSV等。JSON是最常用的数据格式,因为它轻量级且易于解析。
1.2 API 的作用
数据访问:
提供一种访问应用程序或服务中数据的方式。例如,数据库API允许应用程序访问和操作数据库中的数据。
功能调用:
允许应用程序调用另一程序的功能或服务。例如,支付API允许应用程序集成支付功能。
系统集成:
实现不同系统或服务之间的集成和互操作。例如,社交媒体API允许应用程序发布内容到社交媒体平台。
1.3 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 渗透测试
2.1 测试工具
拦截数据包:Burp Suite等构造API请求:Postman、Apifox、Apipost等扫描工具:Owasp Zap、Awvs、Xray等
2.2 信息收集
信息收集是 Web API 渗透测试的重要步骤,无论是黑盒测试还是白盒测试,都需要系统地收集相关信息。在白盒测试中,测试人员可以直接获取API文档和代码等详细信息。在黑盒测试中,测试人员无法直接获取API文档,代码等资源,只能从外部自行收集。
以下是API信息收集的方法:
2.2.1 目录扫描
大多数Web API位于网站/api/、/v1/api/、/v2/api/等目录中,通过目录扫描可以发现使用Burp Suite主动扫描和被动扫描也不错使用Xray被动扫描也不错
2.2.2 网络流量分析
有些系统的API和Web应用的端口是独立的,但是只要有交互通过分析流量就可以获取API接口,如Burp Proxy组件记录、浏览器开发者工具网络组件有些API会写在经过混淆后的Javascript文件中,无法直接获取,可以使用此方法
2.2.3 使用互联网资源
通过Github查询开源系统是否存在API及API目录和文档等通过Google、Shodan、Censys、Fofa等搜索引擎搜索
收集到API接口信息后,可以分析API的目录结构、接口命名规则、参数命名规则、功能和业务逻辑等,根据这些信息可以进行接口枚举和参数枚举。
2.3 漏洞检测
其实针对Web API的渗透测试和Web应用的渗透测试差不多,不过通常API的功能可能没有Web应用那么多,涉及的测试项较少:
2.4 实战案例
2.4.1 接口枚举:
根据响应状态或响应提示判断存在的接口和不存在的接口:
2.4.2 参数枚举:
根据响应提示判断参数是否存在。
如参数不存在时响应:
参数存在时响应:
2.4.3 用户名枚举:
用户名不存在时响应:
用户名存在时响应:
2.4.4 暴力破解:
2.4.5 错误信息泄露:
错误信息中包含物理路径、后端语言、CMS等信息:
2.4.6 CRLF注入:
参数添加到了响应头:
利用CRLF注入进行XSS攻击:
原创 Hack All Sec