【SRC】前后端分离与API接口渗透

本文仅用于技术研究,禁止用于非法用途。
Author:枷锁

SRC漏洞挖掘笔记:前后端分离与API接口渗透

免责声明:本笔记仅用于网络安全学习与技术研究,严禁利用所学技术进行非法攻击。请遵守法律法规。

一、 核心概念:前后端分离与API接口

1. 架构模式对比

特征 传统模式 (PHP/JSP/ASP) 前后端分离 (主流/Vue+SpringBoot)
页面渲染 服务端渲染 (SSR):后端处理数据后,直接将完整的 HTML 页面返回给浏览器。 客户端渲染 (CSR) :后端只返回 JSON 数据,前端 JS 拿到数据后动态拼接 HTML 进行展示。
URL特征 常见 .php, .jsp, .asp 后缀,如 index.php?id=1 无文件后缀,常见 RESTful 风格,如 /api/user/1,或带有 /dev-api/, /v1/ 前缀。
数据交互 页面跳转或刷新时传输 HTML 代码。 页面不刷新,通过 AJAX/XHR 异步传输 JSON 数据。
耦合度 代码混在一起,前后端通常部署在同一台服务器的文件系统下。 完全独立。前端 (Vue/React) 和后端 (Java/Go) 可以部署在完全不同的服务器上(跨域)。

2. 如何快速判断前后端分离?

在实战中,准确判断架构是后续渗透的基础。以下是核心判定技巧:

  • 断连特征(最本质区别)
    • 如果后端服务器宕机(或人为拦截 API 请求),前端页面依然能打开(因为 HTML/JS/CSS 是静态资源),只是数据加载失败或转圈圈。
    • 传统模式下,后端挂了,整个页面会直接报错或白屏。
  • 路由特征
    • 前端路由 :浏览器地址栏显示的路径(如 /system/user),仅代表页面组件的切换,不产生后端请求
    • 后端接口 :F12 网络面板中实际传输数据的路径(如 /dev-api/system/user/list),这才是我们攻击的目标。
  • 技术栈指纹
    • 查看源代码,寻找 app.js, chunk-libs.js 等 Webpack 打包特征。
    • 使用 Wappalyzer 等插件识别 Vue.js, React, Angular 等框架。

3. 渗透视角的差异

  • 传统模式
    • 攻击思维:页面即功能。URL 对应服务器上的具体文件。
    • 重点关注:SQL注入(参数直接拼接入库)、XSS(输出点在 HTML 中)、文件上传(直接传到脚本目录)。
  • 前后端分离
    • 攻击思维前端只是一个"壳子" 。前端代码包含大量逻辑,但不可信
    • 核心攻击点API 接口
      • 逻辑漏洞:前端限制了按钮不可点,但直接发包调用 API 可能就能执行(如越权删除)。
      • 未授权访问:开发人员误以为"前端隐藏了入口,后端就安全了",导致大量 API 缺乏鉴权。
      • 信息泄露:前端 JS 文件中可能硬编码了管理员接口、Token、加密密钥等敏感信息。

二、 信息收集:JS接口提取实战

1. 为什么要提取JS中的接口?

  • 全量映射 :在现代 SPA(单页应用)中,前端项目通常会把所有功能的 API 定义都打包在 JS 文件里(通常在 app.jsmain.js)。这意味着,即使你没有账号登录后台,或者访问的页面是空白的,你依然可以通过分析 JS 代码拿到整个系统的 API 列表。
  • 绕过前端限制 :前端 UI 通常会根据权限隐藏按钮(例如普通用户看不到"删除"按钮),但 JS 代码中依然保留了调用 /user/delete 接口的逻辑。
  • 敏感信息宝库:为了开发方便,开发者有时会把测试用的 Token、OSS 密钥、甚至硬编码的管理员密码写在 JS 注释或变量里。

2. 重点工具推荐

工具名称 类型 推荐指数 核心优势 缺点
URLFinder 命令行工具 ⭐⭐⭐⭐⭐ 主动深挖。不仅提取链接,还能提取敏感信息(Token/Key),并生成可视化 HTML 报告。 扫描速度稍慢。
FindSomething 浏览器插件 ⭐⭐⭐⭐ 被动嗅探。装在浏览器里,浏览网页时自动收集 JS 中的接口,适合日常捡漏。 只能发现当前页面加载的 JS,覆盖面不如主动爬虫。
JSFinder 命令行工具 ⭐⭐ 简单粗暴。提取路径数量多。 误报极高 。它只是简单的正则匹配拼接,经常提取出无效路径,且不会处理 BaseURL。(不推荐)
手动 F12 手工技能 ⭐⭐⭐⭐⭐ 精准定位。解决工具搞不定的 BaseURL 问题。 费眼,效率低,适合作为工具扫描后的验证补充。

3. 核心易错点:BaseURL (根路径)

这是 90% 新手挖不到洞的原因!

现象

工具(如 JSFinder)提取出了接口 /system/user/list。你直接拼接域名访问 http://site.com/system/user/list,服务器返回 404 Not FoundHTML 页面(前端路由),而不是 JSON 数据。

原因

在前后端分离架构中,前端请求后端通常有一个统一的 API 前缀 (BaseURL)

  • 前端开发为了方便转发(Proxy),会定义一个规则:所有以 /dev-api 开头的请求才转发给后端服务器。
  • 工具扫描到的 /system/user/list 只是相对路径 ,缺少了这个关键的前缀
常见 BaseURL 字典
  • /dev-api/ (若依框架常见)
  • /prod-api/
  • /api/v1/
  • /api/
  • /stage-api/
正确的"拼接与验证"姿势
  1. 观察法(最稳)

    • 打开 F12 -> Network(网络)。
    • 触发一个必然与后端交互的功能(如:点击验证码图片、点击登录按钮)。
    • 查看数据包的 URL。例如验证码请求是 http://site.com/dev-api/captchaImage
    • 结论BaseURL 就是 /dev-api/
  2. 搜索法

    • 在 F12 -> Sources(源代码)或 Console 中。
    • 全局搜索关键字:baseUrl, VUE_APP_BASE_API, API_ROOT, SERVER_URL
    • 通常能在配置文件或 app.js 开头找到定义:var baseUrl = "/prod-api/";
  3. 最终拼接公式

    目标 URL = 域名 + BaseURL + 工具提取的接口路径

    • 错误http://site.com + /system/user/list ❌ (访问的是前端路由)
    • 正确http://site.com + /dev-api + /system/user/list ✅ (成功请求后端)

【此处插入:BurpSuite抓包截图,高亮显示 BaseURL (/dev-api/) 的位置】 (图注:展示一个真实的登录请求包,框选出位于域名和功能路径中间的 BaseURL 部分)


三、 漏洞实战 I:Swagger 接口文档泄露

1. 什么是 Swagger?

  • 定义:Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
  • 存在意义:在前后端分离开发中,前端和后端通过 API 交互。为了避免"口头约定"导致的出错,开发人员使用 Swagger 自动生成接口文档,作为协作的桥梁。
  • 风险点 :在开发阶段它非常有用,但如果上线到生产环境未删除,黑客可以直接看到系统所有的接口定义、参数格式、甚至直接测试接口,相当于直接把"攻击地图"送给了攻击者。

2. 识别特征

常见路径 (字典一把梭)
  • /swagger-ui.html (最经典)
  • /doc.html (Knife4j 增强版 UI,常见)
  • /v2/api-docs (核心数据源,返回 JSON 数据,自动化工具通过解析这个接口来批量测试)
  • /swagger/index.html
  • /api/swagger-ui.html
界面特征
  • 页面顶部通常有绿色或蓝色的条,写着 "Swagger UI" 或项目名称。
  • 主体部分列出了一排排的 Controller (如 UserController, OrderController)。
  • 点开 Controller 会看到具体的请求方法 (GET, POST, DELETE, PUT) 和 URL 路径。
  • 核心标志 :每个接口详情页里都有一个 "Try it out" (或 "调试") 按钮。

3. 渗透测试手法

🟢 低危判定:信息泄露
  • 标准:仅发现 Swagger 页面,能看到接口列表,但无法成功执行敏感操作(接口有鉴权)。
  • 操作 :截图页面(包括 /v2/api-docs 的 JSON 页面)。
  • 话术:发现 Swagger 接口文档泄露,暴露了系统 API 结构,有助于攻击者进行针对性攻击。多数 SRC 接收为低危。
🔴 中/高危进阶:未授权访问 & 逻辑漏洞
  • 核心思路 :Swagger 不仅仅是文档,它是一个控制台。利用 "Try it out" 功能,我们可以直接向后端发送请求,测试后端是否验证了用户的身份。
  • 测试步骤
    1. 点开一个看起来敏感的接口(如 /user/list, /user/delete, /upload)。
    2. 点击 "Try it out"
    3. 填写必要参数(如果不知道填什么,填 1test 试试,或者留空)。
    4. 点击 "Execute"
    5. 观察 Response
      • 若返回 401 Unauthorized / 403 Forbidden -> 安全(有鉴权)。
      • 若返回 200 OK 并且带有敏感数据(如用户列表、身份证号) -> 未授权访问(高危)
      • 若返回 200 OK 并且成功执行了操作(如删除了数据) -> 未授权操作(高危)
  • 高频漏洞点
    • 越权 (IDOR) :修改参数中的 ID (如 user_id=1 改为 2),查看是否能获取其他用户的数据。
    • 文件上传:找到 Upload 接口,直接上传 Webshell。
    • 信息泄露/user/getAll 接口往往会泄露全站用户的手机号、身份证、密码 Hash。
⚡ 自动化工具

手动一个个点太慢?使用工具批量扫!

  • 工具名称Swagger-Hacker (或类似脚本如 swagger-exp)

  • 原理 :工具会自动读取 /v2/api-docs 中的所有接口定义,自动填充测试数据,批量发送请求,根据返回包大小和状态码判断是否存在未授权访问。

  • 使用方法

    复制代码
    python swagger-hack.py -u [http://target.com/v2/api-docs](http://target.com/v2/api-docs)
  • 注意 :对于 DELETE 类型的接口,自动化工具可能会误删数据,慎用!建议仅对查询类接口进行自动化测试。


四、 漏洞实战 II:Druid 数据库监控未授权

1. 什么是 Druid?

  • 定义:Druid 是阿里巴巴开源平台上一个为监控而生的数据库连接池,它自带一个 Web 监控页面,用于实时查看数据库连接状态、SQL 执行情况、Session 详情等。
  • 渗透价值 :它通常作为一个"附属"的小组件存在于系统中。虽然它本身不是业务后台,但它记录了全站的敏感数据(包括管理员的登录 Session、执行的 SQL 语句、所有的 URI 路径)。
  • 攻击核心"以小博大"。通过这个不起眼的监控组件,窃取管理员凭证,从而登录真正的业务管理后台(如若依后台)。

2. 识别特征

常见路径 (BaseURL 拼接)
  • /druid/index.html (最标准)
  • /druid/login.html
  • /prod-api/druid/index.html (前后端分离架构中的映射)
  • /api/druid/index.html
  • /system/druid/index.html
界面特征
  • 页面标题通常为 "Druid Stat Index"。
  • 顶部导航栏包含:数据源、SQL监控、SQL防火墙、Web应用、URI监控Session监控 等标签页。
  • 页面底部通常有 "powered by Alibaba Druid" 字样。

3. 渗透利用路径

Level 1: 未授权访问 & 弱口令 (低/中危)
  • 未授权访问 :直接访问 /druid/index.html,无需登录即可查看所有监控数据。
  • 弱口令 :访问时弹出登录框。
    • 常见弱口令字典
      • admin / 123456
      • druid / druid
      • admin / admin
    • 爆破:Druid 没有验证码,可以使用 BurpSuite 进行简单的账号密码爆破。
Level 2: 信息泄露 - URI & SQL 监控 (中危)
  • URI监控 :点击 "URI监控" 标签,可以看到系统运行以来被访问过的所有 URL 路径 。这相当于一份实时更新的目录扫描报告,可以帮助我们发现隐藏的 API 接口、上传接口或未授权接口。
  • SQL监控:可以看到后台执行的所有 SQL 语句。虽然参数通常被参数化,但可以帮助判断后端数据库结构、表名、字段名,辅助 SQL 注入攻击。
Level 3: Session 劫持 (高危 - 核心大招)

这是 Druid 漏洞中最具杀伤力的利用方式,可以直接接管管理员账号。

  • 原理:Druid 的 "Web应用监控" 或 "Session监控" 模块会记录当前在线用户的 Session 信息(包括 JSESSIONID、创建时间、最后访问时间、客户端 IP 等)。
  • 前提条件
    1. Druid 页面开启了 Session 监控功能。
    2. 管理员或其他高权限用户刚刚登录正在操作业务系统(Session 未过期)。
  • 手工利用步骤
    1. 进入 Druid 监控页面,点击 "Session监控" (或在 "Web应用" -> "Session统计" 中)。
    2. 观察页面数据,寻找 "最后访问时间" 最近的 Session。
    3. 复制该 Session 的 JSESSIONID 值。
    4. 访问业务系统的后台登录页(如 /login/admin)。
    5. 打开 F12 -> Application -> Cookies,将自己的 JSESSIONID 替换为刚才复制的值。
    6. 刷新页面。如果 Session 有效,你将直接跳过登录框,进入后台。
⚡ 自动化工具:Druid-Session-Extract

手动一个个试太累且容易错过?

Druid 漏洞的精髓在于横向扩展。不要止步于"发现了一个监控页面",而要利用它暴露的信息(Session、URL)去攻击真正的主业务系统。

五、 漏洞实战 III:Spring Boot Actuator 配置泄露

1. 识别特征

  • Whitelabel Error Page :这是最经典的识别特征。当你访问网站的一个不存在的路径(例如 /test_error_page_scan)时,如果页面显示一个白色的报错页面,标题写着 Whitelabel Error Page,内容包含 This application has no explicit mapping for /error
  • 小绿叶图标:在浏览器标签页,Spring Boot 应用默认会显示一个绿色的树叶图标。
  • 意义 :只要看到这个报错页面,就说明后端是 Spring Boot 框架。此时,不要犹豫,直接拿工具扫 Actuator 端点!

2. 核心敏感端点 (Endpoints)

Spring Boot Actuator 用于监控和管理应用程序。如果配置不当,会暴露大量敏感信息。通常访问 /actuator 可以查看所有暴露的端点。

端点路径 危害等级 描述与利用价值
/env 查看系统环境变量。核心价值 :可能包含数据库、Redis 的地址和账号,密码通常被 ****** 脱敏。
/heapdump 极高 下载 JVM 堆内存转储文件。核心价值 :虽然 /env 中的密码是脱敏的,但内存文件(Heapdump)里存储的是明文!可以通过分析它还原出密码。
/gateway/routes 查看网关路由信息。核心价值 :如果存在该端点,可能利用 Spring Cloud Gateway 进行 RCE (远程代码执行)。
/httptrace 显示最近的 HTTP 请求记录,可能包含用户的 Cookie/Session。

3. 深度利用 (GetShell)

场景一:Heapdump 提取明文密码 (从信息泄露到 GetShell)

这是实战中最常用的手法,能够将"敏感信息泄露"升级为"数据库接管"或"RCE"。

  • 发现 :访问 /env 发现存在 Redis 或 MySQL 配置,但密码显示为 ******
  • 获取 :访问 /heapdump,下载 .hprof.dump 文件(文件通常较大,几十 MB 到几百 MB)。
  • 分析 :使用工具分析内存文件,搜索被脱敏的密码变量名。
    • JDumpSpider (推荐):自动化工具,直接提取 Redis/DB 密码。
    • HeapDumpTool:图形化工具,操作简单。
    • MAT (Eclipse Memory Analyzer) :手动分析,搜索关键字(如 password, redis)。
  • 利用
    • 拿到 Redis 密码 -> 连接 Redis -> 写入 Webshell / 写入 SSH 公钥 / 计划任务 -> RCE
    • 拿到 数据库 密码 -> 拖库 / 连接数据库利用 SQL 注入点。
场景二:Gateway RCE
  • 条件 :目标使用了 Spring Cloud Gateway,且开放了 /actuator/gateway/routes 端点。
  • 原理:Spring Cloud Gateway 允许动态创建路由。攻击者可以通过 API 创建一个包含恶意 Filter(过滤器)的路由,当请求该路由时,执行任意命令。
  • 利用步骤
    1. 创建恶意路由 :发送 POST 请求到 /actuator/gateway/routes/hack,Body 中包含执行命令的 SPEL 表达式(如 #{T(java.lang.Runtime).getRuntime().exec("whoami")})。
    2. 刷新路由 :发送 POST 请求到 /actuator/gateway/refresh,使配置生效。
    3. 触发执行 :访问刚创建的路由路径(如 /hack),命令即可执行。
    4. 清理痕迹:发送 DELETE 请求删除恶意路由。
  • 工具SpringBoot-Exploit 等综合利用工具通常集成了此模块。

六、 总结与心得

1. 扫描技巧:见招拆招

  • 见到 Whitelabel Error Page -> 条件反射 :这是 Spring Boot,直接上 SpringBoot-Scan 扫 Actuator 漏洞。
  • 见到 空白页面 / 登录后台 -> 条件反射 :F12 找 JS,提取接口,找 BaseURL,拼接后批量扫 Swagger 和未授权。
  • 见到 多级目录 404 -> 回退扫描 :例如访问 /a/b/c 报错,尝试扫 /a/b/actuator/a/actuator,逐级向上寻找漏网之鱼。

2. 组合拳思维:拒绝单一漏洞

不要满足于发现一个低危漏洞,尝试将它们串联起来:

  • Swagger (信息泄露) + 未授权访问 = 获取用户 ID/管理员账号
  • 未授权访问 (获取 ID) + IDOR (越权) = 接管任意账户
  • Druid (弱口令) + Session 监控 = 劫持管理员 Session -> 登录后台 -> 文件上传 GetShell
  • Actuator (/env) + Heapdump 分析 = 数据库/Redis 密码 -> RCE

3. 学习方向:Java 是核心

  • 如果你想在 SRC 挖掘高赏金漏洞,或者进入大厂安全部门,Java 代码审计Java 安全 是必经之路
  • 现代企业级应用(金融、银行、大厂核心业务)70% 以上 都是使用 Java (Spring Boot) 开发的
  • 掌握了 Java 安全,你就掌握了挖掘高危漏洞的钥匙(反序列化、内存马、逻辑漏洞)

复习Checklist

  • 能区分前端路由和后端接口吗?(BaseURL 是关键)
  • 知道怎么找 BaseURL 吗?(抓包、搜源码)
  • Swagger 的 Try it out 怎么用?(测试未授权)
  • Druid 如何利用 Session 进入后台?(Session 劫持)
  • Spring Boot 的 Heapdump 怎么提取密码?(内存分析还原明文)
    宇宙级免责声明​​

🚨 重要声明:本文仅供合法授权下的安全研究与教育目的!🚨

1.合法授权:本文所述技术仅适用于已获得明确书面授权的目标或自己的靶场内系统。未经授权的渗透测试、漏洞扫描或暴力破解行为均属违法,可能导致法律后果(包括但不限于刑事指控、民事诉讼及巨额赔偿)。

2.道德约束:黑客精神的核心是建设而非破坏。请确保你的行为符合道德规范,仅用于提升系统安全性,而非恶意入侵、数据窃取或服务干扰。

3.风险自担:使用本文所述工具和技术时,你需自行承担所有风险。作者及发布平台不对任何滥用、误用或由此引发的法律问题负责。

4.合规性:确保你的测试符合当地及国际法律法规(如《计算机欺诈与滥用法案》(CFAA)、《通用数据保护条例》(GDPR)等)。必要时,咨询法律顾问。

5.最小影响原则:测试过程中应避免对目标系统造成破坏或服务中断。建议在非生产环境或沙箱环境中进行演练。

6.数据保护:不得访问、存储或泄露任何未授权的用户数据。如意外获取敏感信息,应立即报告相关方并删除。

7.免责范围:作者、平台及关联方明确拒绝承担因读者行为导致的任何直接、间接、附带或惩罚性损害责任。
🔐 安全研究的正确姿势:

✅ 先授权,再测试

✅ 只针对自己拥有或有权测试的系统

✅ 发现漏洞后,及时报告并协助修复

✅ 尊重隐私,不越界

⚠️ 警告:技术无善恶,人心有黑白。请明智选择你的道路。

希望这个教程对你有所帮助!记得负责任地进行安全测试。

相关推荐
用户962377954481 天前
VulnHub DC-3 靶机渗透测试笔记
安全
叶落阁主2 天前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
茶杯梦轩2 天前
从零起步学习RabbitMQ || 第二章:RabbitMQ 深入理解概念 Producer、Consumer、Exchange、Queue 与企业实战案例
服务器·后端·消息队列
用户962377954484 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机4 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机4 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954484 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star4 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954484 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
YuMiao4 天前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议