当前位置: 首页 > news >正文

3-7〔OSCP ◈ 研记〕❘ WEB应用攻击▸REST API概述

       郑重声明: 本文所有安全知识与技术,仅用于探讨、研究及学习,严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任,本人不承担任何责任。 如需转载,请注明出处且不得用于商业盈利。 

    💥👉点赞❤️ 关注🔔 收藏⭐️ 评论💬💥
    更多文章戳👉
Whoami!-CSDN博客🚀

​​​


𖤐 嘿,经过前面的预热,我们正式打开这扇门,来吧 ! 

𖤐 𝓗𝓮𝔂, 𝓪𝓯𝓽𝓮𝓻 𝔀𝓪𝓻𝓶-𝓾𝓹,𝔀𝓮'𝓻𝓮 𝓷𝓸𝔀 𝓸𝓯𝓯𝓲𝓬𝓲𝓪𝓵𝓵𝔂 𝓸𝓹𝓮𝓷𝓲𝓷𝓰 𝓽𝓱𝓲𝓼 𝓭𝓸𝓸𝓻,𝓒𝓸𝓶𝓮 𝓸𝓷 ! 


→ 信息收集▸WEB应用攻击▸REST API概述-----我们在这儿~ 🔥🔥🔥

→ 漏洞检测

→ 初始立足点

→ 权限提升 

→ 横向移动

→ 报告/分析

→ 教训/修复  

目录

1. REST API概述

1.1 REST API架构深入解析

1.1.1 什么是REST架构?

1.REST核心设计理念

2.API枚举的重要性

3.为什么必须枚举API?

4.REST API工作原理​​

5.常用HTTP方法及功能

6.API枚举技术挑战

7.常见API发现方法

8.安全测试重点

1.1.2 REST API枚举示例(图书管理系统)

1. 获取所有图书信息(GET请求)

2. 获取单本图书信息(GET请求)

3. 添加新图书(POST请求)

4. 更新/修改图书信息(PUT请求)

5. 删除图书(DELETE请求)

6.总结

1.1.3 REST API枚举思路

1.信息收集 - 发现 API 入口点

2.分析测绘 - 理解 API 结构

3.深度枚举与交互 - 探索攻击面

4.自动化与工具 

💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬


1. REST API概述

1.1 REST API架构深入解析

        在Web应用渗透测试中,API枚举是发现和测试攻击面的关键环节,特别是面对内部构建的闭源应用程序时,这些API充当前端与后端逻辑的核心桥梁,负责处理关键业务功能和数据传输

1.1.1 什么是REST架构?

        REST(Representational State Transfer,表述性状态转移)是一种广泛应用的Web服务架构风格,其核心是通过HTTP协议操作和传输资源。

1.REST核心设计理念
  • 🌐 资源中心化:每个资源都有唯一标识符(URI)

  • 🔄 标准方法:使用HTTP方法进行资源操作

  • 📡 无状态通信:每个请求包含完整上下文信息

REST API关键原则详解

原则说明安全意义
无状态性服务器不存储客户端状态,每个请求独立会话管理依赖令牌,令牌泄露导致全面入侵
统一接口标准化HTTP方法操作资源攻击面标准化,便于系统化测试
客户端-服务器分离前后端职责分离可单独测试API端点,无需UI交互
表述性资源资源通过URL唯一标识URL结构可预测,便于枚举和发现
2.API枚举的重要性
测试类型API文档状态挑战程度枚举需求
白盒测试提供完整文档可直接映射完整攻击面
黑盒测试无文档或不全需要自主发现和枚举API
3.为什么必须枚举API?
  • 🔍 攻击面发现:未文档化的API端点可能包含漏洞

  • 🎯 功能理解:通过API调用理解应用业务逻辑

  • ⚠️ 敏感数据暴露:API可能返回过多信息或敏感数据

  • 🛡️ 身份验证绕过:测试未受保护的API端点

4.REST API工作原理
5.常用HTTP方法及功能
  • GET - 检索资源

  • POST - 创建新资源

  • PUT - 更新现有资源

  • DELETE - 删除资源

  • PATCH - 部分更新资源

6.API枚举技术挑战

黑盒测试中的困难:

  • 🕵️ 端点隐藏:API不对外公开文档

  • 🔮 参数猜测:需要猜测请求参数和结构

  • 🧩 身份验证:需要绕过或破解认证机制

  • 📊 响应解析:理解不同响应格式和状态码

7.常见API发现方法
  • 主动扫描:使用工具扫描常见API端点

  • 流量分析:拦截和分析应用流量

  • 文档挖掘:查找开发文档或注释

  • 错误分析:从错误信息中提取API结构

8.安全测试重点

高风险API区域:

  • 🔑 身份验证端点:/api/login, /api/auth

  • 👥 用户管理端点:/api/users, /api/profile

  • 🗄️ 数据操作端点:/api/data, /api/records

  • ⚙️ 配置管理端点:/api/config, /api/settings

💡 专业提示:API枚举是现代Web应用测试的核心环节,特别是随着单页面应用(SPA)和移动应用的普及,API已成为主要攻击面。


1.1.2 REST API枚举示例(图书管理系统)

通过一个典型的图书管理系统示例,详细讲解REST API的设计原则、核心操作和实际应用。

概述

假设有一个图书管理系统,运行用户查看、添加、更新和删除图书。
每本图书都有一个唯一的标识符(ID),客户端通过REST API来操作这些图书资源。
REST API"表述性"特点体现在每个资源都有唯一的URI标识,通过标准HTTP方法进行状态转移。

API端点动作总览

HTTP方法端点功能描述状态码
GET/books获取所有图书列表200 OK
GET/books/{id}获取特定图书详情200 OK, 404 Not Found
POST/books创建新图书201 Created, 400 Bad Request
PUT/books/{id}更新指定图书200 OK, 404 Not Found
DELETE/books/{id}删除指定图书204 No Content, 404 Not Found
1. 获取所有图书信息(GET请求)

请求

GET /books HTTP/1.1
Host: api.example.com     # 获取api资源
Accept: application/json
Authorization: Bearer <token>   # api进行身份认证

响应

HTTP/1.1 200 OK
Content-Type: application/json{"books": [{"id": 1,"title": "深入理解计算机系统","author": "Randal E. Bryant","price": 128.00,"category": "计算机科学"},{"id": 2,"title": "Clean Code","author": "Robert C. Martin","price": 89.00,"category": "软件开发"}]
}
2. 获取单本图书信息(GET请求)

请求

GET /books/1 HTTP/1.1     # 注意,这里的url路径是/book/1
Host: api.example.com
Accept: application/json

响应

HTTP/1.1 200 OK
Content-Type: application/json{"id": 1,"title": "深入理解计算机系统","author": "Randal E. Bryant","price": 128.00,"category": "计算机科学","isbn": "9787111544937","publish_date": "2016-11-01","stock": 15
}
3. 添加新图书(POST请求)

请求

POST /books HTTP/1.1      # 用POST动作
Host: api.example.com
Content-Type: application/json
Authorization: Bearer <token>{"title": "设计模式:可复用面向对象软件的基础","author": "Erich Gamma","price": 79.00,"category": "软件开发","isbn": "9787111075752","publish_date": "2020-06-01"
}

响应

HTTP/1.1 201 Created
Content-Type: application/json
Location: /books/3{"id": 3,"title": "设计模式:可复用面向对象软件的基础","author": "Erich Gamma","price": 79.00,"category": "软件开发","isbn": "9787111075752","publish_date": "2020-06-01","stock": 0
}
4. 更新/修改图书信息(PUT请求)

请求

PUT /books/1 HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer <token>{"title": "深入理解计算机系统(原书第3版)","author": "Randal E. Bryant","price": 138.00,"category": "计算机科学","isbn": "9787111544937","publish_date": "2016-11-01"
}

响应

HTTP/1.1 200 OK
Content-Type: application/json{"id": 1,"title": "深入理解计算机系统(原书第3版)","author": "Randal E. Bryant","price": 138.00,"category": "计算机科学","isbn": "9787111544937","publish_date": "2016-11-01","stock": 15
}
5. 删除图书(DELETE请求)

请求

DELETE /books/2 HTTP/1.1
Host: api.example.com
Authorization: Bearer <token>

响应

HTTP/1.1 204 No Content
6.总结

通过这个图书管理系统的REST API示例,可以看到:

  • ✅ 资源导向设计:以图书为核心资源设计API结构

  • ✅ HTTP方法语义化:正确使用HTTP方法表达操作意图

  • ✅ 标准响应格式:使用JSON作为数据交换格式

  • ✅ 适当的状态码:准确反映操作结果状态

  • ✅ 安全考虑:包含身份验证和授权机制


1.1.3 REST API枚举思路

1.信息收集 - 发现 API 入口点

目标是尽可能多地发现目标的 API 端点(Endpoint)。

  •  被动发现 (Passive Discovery) - 不与目标直接交互

    • 搜索引擎技巧 (Google Dorking):

      • site:target.com inurl:api

      • site:target.com intitle:"API Documentation"

      • site:target.com ext:json | ext:xml

    • 源代码/JS 文件分析:从网页源代码和加载的 JavaScript 文件中搜索端点(如 /api/v1//graphql, 包含 apiKeytoken 的 URL)。

    • 第三方资料:查看 GitHub、GitLab 等平台是否意外泄露了 API 文档、代码或配置文件(如 swagger.json)。

    • 子域名枚举:使用工具(如 amasssubfinder)发现 api.target.comdev.target.comstaging.target.com 等子域名。

    • 证书透明度日志:使用 crt.sh 等网站通过 SSL 证书发现子域名。

  • 主动发现 (Active Discovery) - 与目标直接交互

    • 目录/路径暴力破解:使用工具和字典去猜测 API 路径。

      • 工具gobusterffufdirsearchBurp Intruder

      • 字典common.txtapi.txtraft-large-directories.txt (Seclists) 以及自定义字典(包含 api, v1, v2, users, admin, dev 等关键词)。

      • 模式匹配:如 {GOBUSTER}/v1{GOBUSTER}/v2,其中 {GOBUSTER} 是字典中的词条。

    • 分析现有功能:手动使用 Web 应用,通过浏览器开发者工具的 Network 标签页监听所有 HTTP 请求,捕获API调用。

    • 常见文件:尝试访问已知的 API 文档文件。

      • /swagger.json/openapi.json

      • /api-docs/api-docs/swagger.json

      • /robots.txt/sitemap.xml 

2.分析测绘 - 理解 API 结构

发现端点后,需要理解其功能、参数和依赖关系。

  • 分析API响应

    • HTTP 状态码
      200 OK(成功)、201 Created(创建成功)
      400 Bad Request(错误请求)、401 Unauthorized(未认证)、403 Forbidden(无权限)、404 Not Found(不存在)、405 Method Not Allowed(方法不允许,但路径存在!)。

    • 分析响应体:成功的响应可能包含数据列表(如用户信息)、错误信息可能泄露堆栈跟踪或数据库结构。

  • 识别技术栈

    • HTTP 响应头:查看 ServerX-Powered-ByX-Runtime 等头,识别后端框架(如 Express, Django, Flask, Rails)。

    • 错误信息:错误信息可能直接暴露使用的框架、数据库类型或服务器版本。

  • 绘制 API 地图:将发现的端点、参数、方法、响应等信息整理成文档或脑图,理解其业务逻辑和数据流。

3.深度枚举与交互 - 探索攻击面

对每个发现的端点进行深度测试。

  • HTTP 方法测试

    • 对每个端点尝试不同的 HTTP 方法:GETPOSTPUTPATCHDELETEHEADOPTIONS

    • 重点注意 405 Method Not Allowed:这明确告诉你该路径存在,只是不支持你用的方法。换一种方法再试(例如,对 /api/users 用 PUT 或 DELETE)。

    • 测试 HTTP 方法覆盖(如发送 POST 请求并设置头 X-HTTP-Method-Override: DELETE)。

  • 身份验证/授权绕过测试

    • 未授权访问:直接访问需要认证的端点,看是否返回 401

    • 修改 ID 值:测试水平越权(如将 GET /api/users/123 改为 GET /api/users/456)。

    • 修改角色参数:测试垂直越权(如注册用户时在请求体中添加 "role": "admin")。

  • 参数污染与模糊测试

    • 对每个参数进行模糊测试(Fuzzing),尝试注入 SQL、NoSQL、命令、路径遍历等 payload。

    • 工具Burp IntruderffufArjun(用于发现隐藏参数)。

4.自动化与工具 
  • API 专用扫描器:使用如 AstraAPIsecNuclei(有专门的 API 模板)等工具进行自动化扫描。

  • Burp Suite 插件:如 Autorize(测试越权)、JSON Web Tokens(测试 JWT)、Turbo Intruder(用于高速模糊测试)。

下一篇文章将以Gobuster工具为例,详细说明以上各阶段过程。


💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬

您的支持是我创作最大的动力!

http://www.dtcms.com/a/365737.html

相关文章:

  • 漫谈《数字图像处理》之图像清晰化处理
  • 更新远程分支 git fetch
  • 计算机三级网络应用题大题技巧及练习题
  • 【微实验】使用MATLAB制作一张赛博古琴?
  • 最左匹配原则:复合索引 (a,b,c) 在 a=? AND b>? AND c=? 查询下的使用分析
  • 波浪模型SWAN学习(2)——波浪浅化模拟(Shoaling on sloping beach)
  • 14.错误和异常(二)
  • PastePal for Mac 剪贴板历史记录管理器
  • 学习嵌入式第四十五天
  • 设计原则与设计模式
  • flume拓扑结构详解:从简单串联到复杂聚合的完整指南
  • 蓝牙modem端frequency offset compensation算法描述
  • 技术重构人力管理 —— 打造人力资源流程自动化、智能化专业服务方案
  • 小企业环境-火山方舟和扣子
  • 字节跳动后端 一面凉经
  • 数据库与大数据技术栈
  • ElasticSearch倒排索引原理
  • redis中五大数据类型的操作命令
  • 编程基础-eclipse创建第一个程序
  • 【开题答辩全过程】以 基于java的隔离酒店管理系统设计与开发为例,包含答辩的问题和答案
  • 线程通信机制
  • 记录一下node后端写下载https的文件报错,而浏览器却可以下载。
  • 开源与闭源的再对决:从Grok到中国力量,AI生态走向何方?
  • 并发编程指南 同步操作与强制排序
  • Claude Code初体验:让AI成为你的结对程序员
  • Linux学习——管理基本存储(十八)
  • A股大盘数据-2025093分析
  • Provider中的watch、read、Consumer、ChangeNotifierProvider、ValueNotifierProvider
  • 信息融智学=信息哲学+信息科学+信息技术+信息系统工程+信息处理之智
  • 数据库选择有讲究?SQLite、PostgreSQL还是MySQL?