APL
APL核心定义
核心定义:
API 的全称是 应用程序编程接口。它是一组预定义的规则、协议和工具,允许不同的软件应用程序之间相互通信和交换数据。
经典比喻:餐厅服务员
想象一下你去一家餐厅吃饭:
你(客户):就像一个应用程序(比如你的手机天气App)。
厨房(服务端):就像一个拥有所有资源和功能的系统(比如气象局的数据库)。
菜单(API文档):列出了你可以点的所有菜(可以请求的所有功能),以及每道菜需要什么信息(比如"牛排要几分熟")。
服务员(API):就是你和服务之间的桥梁。你不需要知道厨房如何做菜,你只需要根据菜单点菜(发出请求),服务员会把你的要求传递给厨房,然后把做好的菜(数据/结果)端给你。
在这个比喻中:
你不需要知道 厨房的布局、厨师的秘方或如何操作烤箱。
你只需要遵循 菜单上定义的规则(比如不能点一个菜单上没有的菜)。
服务员负责 将你的"请求"(点单)翻译成厨房能理解的指令,并确保你得到正确的"响应"(你点的菜)。
结论:API 就是一种让软件A以标准、安全的方式使用软件B的功能或数据,而无需了解软件B内部复杂实现细节的约定
核心组成部分
一个完整的 API 通常包含以下几个关键部分:
端点
这是 API 的 URL 地址,用于定位特定的资源或服务。
例如:https://api.example.com/v1/users
https://-协议
api.example.com-API服务的主机地址
v1/users-路径,指向特定的资源(用户)
HTTP 方法
用于指定要对资源执行的操作类型。最常用的有:
GET:获取资源(查询数据)。
POST:创建新资源(提交数据)。
PUT/PATCH:更新已有资源(修改数据)。
DELETE:删除资源。
参数
提供给 API 的附加信息,用于细化请求。
查询参数:通常用于 GET 请求,附加在 URL 问号后面,如 ?page=2&limit=10。
路径参数:作为 URL 的一部分,如 /users/{user_id}。
请求体:通常用于 POST、PUT 请求,包含要发送的数据(通常是 JSON 或 XML 格式)。
请求/响应头
包含关于请求或响应的元信息。
常见请求头:Authorization(身份验证令牌)、Content-Type(发送数据的类型,如 application/json)。
常见响应头:Content-Type(返回数据的类型)、Status Code(状态码)。
身份验证
大多数 API 不是完全开放的,需要验证调用者的身份。常见方式有:
API Key:一个简单的令牌,在请求头或参数中传递。
OAuth:更复杂、更安全的授权框架,常用于第三方登录(如"用微信登录")。
JWT:一种基于令牌的认证标准。
状态码
由服务器返回的三位数字代码,表示请求的结果。
2xx - 成功:200 OK(成功),201 Created(创建成功)。
4xx - 客户端错误:400 Bad Request(请求错误),401 Unauthorized(未认证),403 Forbidden(无权限),404 Not Found(资源不存在)。
5xx - 服务器错误:500 Internal Server Error(服务器内部错误)。
响应体
服务器返回的主要数据,通常是 JSON 或 XML 格式。
例如,一个成功的 GET 请求可能返回:
json
{
"id": 123,
"name": "张三",
"email": "zhangsan@example.com"
}
工作流程
javascript
[你的应用程序] --(HTTP请求)--> [API端点] --(处理请求)--> [服务器/数据库]
|
[你的应用程序] <--(HTTP响应: 数据+状态码)-- [API端点] <--(返回结果)--
API 的主要类型和架构风格
Web API / HTTP API
这是目前最常见的 API 类型,基于 HTTP/HTTPS 协议,通过互联网进行通信。我们日常讨论的 API 大多指这一类。
REST API
REST 是一种设计风格,而不是一个标准。遵循 REST 原则的 API 称为 RESTful API。它是目前最流行的 Web API 风格。
核心原则:
无状态:每次请求都必须包含处理该请求所需的所有信息。
统一接口:使用标准的 HTTP 方法和资源标识(URI)。
资源导向:将数据和行为抽象为"资源"(如用户、订单)。
可缓存:响应应明确标示是否可被缓存。
优点:简单、灵活、易于理解和扩展。
GraphQL API
由 Facebook 创建的一种查询语言。它允许客户端精确地指定需要哪些数据,避免了 REST API 中常见的"过度获取"或"获取不足"的问题。
核心特点:客户端发送一个查询请求,服务器返回恰好匹配该查询的 JSON 数据。
SOAP API
一种较老的、基于 XML 的协议。它非常严格、标准化,内置了安全性和事务处理,但也比 REST 更复杂、更重。
核心特点:使用 WSDL 文件来严格定义接口。
gRPC
由 Google 开发的高性能、开源的 RPC 框架。它使用 Protocol Buffers 作为接口定义语言和序列化工具,比 JSON 更小更快,非常适合微服务之间的内部通信
API 的实际应用场景
第三方集成
支付:电商网站集成支付宝、微信支付的 API 来完成收款。
地图:外卖App集成高德地图或百度地图的 API 来展示配送路线。
社交媒体分享:新闻App集成微博、微信的 API 实现一键分享。
天气数据:你的手机天气App通过调用气象数据提供商的 API 来获取天气信息。
微服务架构
在一个大型复杂应用中,系统被拆分成多个小型、独立的服务(微服务)。这些服务之间通过轻量级的 API(通常是 REST 或 gRPC)进行通信。例如,用户服务、订单服务、商品服务各自独立,通过 API 协作。
前后端分离
在现代 Web 开发中,前端(浏览器、手机App)和后端(服务器)是分离的。它们之间通过 API 进行数据交互。前端负责展示和交互,后端负责数据处理和业务逻辑。
自动化脚本
开发者可以编写脚本,通过调用 API 来自动化完成一些任务,比如自动备份云盘文件、批量管理社交媒体帖子等
如何开始使用一个 API?
阅读官方文档:这是最重要的一步!好的文档会告诉你:
如何认证(获取 API Key)。
所有可用的端点(Endpoints)和它们的用途。
请求和响应的格式示例。
使用限制(频率限制、配额)。
获取身份凭证:通常是注册开发者账号,获取一个 API Key 或 Token。
使用工具进行测试:
Postman:最流行的 API 测试工具,提供图形化界面,可以轻松构建和发送请求、查看响应。
cURL:一个命令行工具,可以直接在终端中发送 HTTP 请求。
编写代码调用:
在你的应用程序中,使用任何编程语言的 HTTP 客户端库(如 Python 的 requests, JavaScript 的 fetch 或 axios)来构造请求并处理响应。
一个简单的 cURL 示例:
bash
curl -X GET \
'https://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q=Beijing' \
-H 'Content-Type: application/json'
总结
APL是什么
软件组件之间的通信合约。
核心价值
解耦、复用、标准化。让开发更高效,系统更灵活。
关键组件
端点、HTTP 方法、参数、认证、状态码、响应体。
流行风格
REST(最通用)、GraphQL(灵活查询)、gRPC(高性能内部通信)。
如何使用
读文档 -> 拿密钥 -> 用工具测试 -> 写代码集成
攻防
API核心:需要知道参数,地址
类别:
SOAP
PEST
webservice:
- wsdi 爬虫url地址
- swagger:目录扫描、js资源
- webpack插件识别、js资源
RPC
安全:
sql注入
身份验证
信息泄露
xss跨站
工具:
SoapUI
ReadyAPI
swagger-hack
类型特征:SOAP,RESTful,OpenAPI,GraphQL,gRPC 等
漏洞检测:接口发现,遵循分类,依赖语言,V1/V2 多版本等
项目使用:APIKit Postman Swagger-hack SoapUI ReadyAPI 等

API 分类特征
SOAP - WSDL:
一般的SOAP,后面加上-WSDL就会展现它所以的接口信息


OpenApi - Swagger:
打开窗口就可以看见所有的接口和参数信息

RESTful - /v1/api/:
地址中带了/v1/api/这样的关键字,基本就是restful了
PEST-WAPI:
软件框架风格
API 常见漏洞
OWASP API Security TOP 10 2023
API 检测流程
接口发现,遵循分类,依赖语言,V1/V2 多版本等
Method:请求方法
攻击方式:OPTIONS,PUT,MOVE,DELETE
效果:上传恶意文件,修改页面等
URL:唯一资源定位符
攻击方式:猜测,遍历,跳转
效果:未授权访问等
Params:请求参数
攻击方式:构造参数,修改参数,遍历,重发
效果:爆破,越权,未授权访问,突破业务逻辑等
Authorization:认证方式
攻击方式:身份伪造,身份篡改
效果:越权,未授权访问等
Headers:请求消息头
攻击方式:拦截数据包,改 Hosts,改 Referer,改 Content-Type 等
效果:绕过身份认证,绕过 Referer 验证,绕过类型验证,DDOS 等
Body:消息体
攻击方式:SQL 注入,XML 注入,反序列化等
效果:提权,突破业务逻辑,未授权访问等
API 检测项目
工具自动化:
SOAP - WSDL 测试 InfoSystem
Postman 联动
SoapUI
ReadyAPI
openAPI-swagger 测试
postman联动
https://github.com/lijie/swagger-exp
https://github.com/jayus0821/swagger-hack
RESTful- /v1/api/ 测试
Postman 联动
APIKit 联动(burp插件,安装到brup上面)
https://github.com/API-Security/APIKit
但是postman只是一个测试工具,postman发包,测试这个接口是否开放,不是安全工具,需要和别的工具联动使用,postman开个代理

把它转发到代理上面去,有几款工具是支持被动扫描的,就是等待数据包过来,它才开始扫描,比如xray

这里监听端口,即可扫描到postman通过代理端口发过来的包
也可以联动到burp上面,进行多重联动
手工发包测:vapi靶场
API1-身份越权
ID值更改遍历用户目录
API4-验证枚举
验证逻辑可持续提交
API5-接口枚举
更改URL地址尝试获取
API8-数据库注入
API9-v1/2多版本
v2无法爆破/v1爆破1655
系统攻防
操作系统上面的漏洞是很少的,一般操作系统漏洞存在内网,外网基本不存在,这里一般用工具扫描,推荐使用前两个工具
漏洞探针
操作系统:Windows、liunx
远程漏洞扫描(任意执行类):
Nessus
Nessus 号称是世界上最流行的漏洞扫描程序,全世界有超过 75000 个组织在使用它。该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库。Nessus 不同于传统的漏洞扫描软件,Nessus 可同时在本机或远端上遥控,进行系统的漏洞分析扫描
Nexpose
Nexpose 是 Rapid7 出品,一款著名的、极佳的商业漏洞扫描工具。跟一般的扫描工具不同,Nexpose 自身的功能非常强大,可以更新其漏洞数据库,以保证最新的漏洞被扫描到。
漏洞扫描效率非常高,对于大型复杂网络,可优先考虑使用;对于大型复杂网络,可以优先考虑使用。可以给出哪些漏洞可以被 Metasploit Exploit,哪些漏洞在 Exploit-db 里面有exploit 的方案。可以生成非常详细的,非常强大的 Report,涵盖了很多统计功能和漏洞的详细信息。虽然没有 Web 应用程序扫描,但 Nexpose 涵盖自动漏洞更新以及微软补丁星期二漏洞更新(就是扫出漏洞,会教你如何利用)
Openvas
Goby
Goby 是一款新的网络安全测试工具,由赵武 Zwell(Pangolin、JSky、FOFA 作者)打造,它能够针对一个目标企业梳理最全的攻击面信息,同时能进行高效、实战化漏洞扫描,并快速的从一个验证入口点,切换到横向。能通过智能自动化方式,帮助安全入门者熟悉靶场攻防,帮助攻防服务者、渗透人员更快的拿下目标
本地漏洞扫描(权限提升):
wesng
tiquan
Linux-exploit-suggester
本地执行漏洞自检(溢出提权等)
Windows:(在线工具)
https://github.com/bitsadmin/wesng
Linux:
https://github.com/mzet-/linux-exploit-suggester
POC&CVE:
https://github.com/1nnocent1/PoC-in-GitHub
Win10-漏洞提权-CVE-2021-1732
https://github.com/KaLendsi/CVE-2021-1732-Exploit
Win08-漏洞提权-CVE-2019-1458
https://github.com/rip1s/CVE-2019-1458
Linux-漏洞提权-CVE-XXXX-XXXX