mcpField
S
supabase-extract-url

supabase-extract-url

github.com/yoanbernabeu安全71473 次安装39 周前更新
代码仓库

关于 supabase-extract-url

此安全技能从 Web 应用的客户端代码或本地文件中提取 Supabase 项目 URL。它会识别并验证 URL,并保存发现结果和证据,以供后续 Supabase 审计使用。

主要功能

  1. 01扫描 JavaScript、HTML 和配置
  2. 02识别标准域名与自定义域名
  3. 03验证 URL 格式及 API 响应
  4. 04识别多个 Supabase 项目 URL
  5. 05保存发现结果与提取证据

适用场景

  1. 01确认应用使用的 Supabase 项目
  2. 02查找后续测试所需的 API 基础 URL
  3. 03从下载的应用文件中提取 URL

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/yoanbernabeu/supabase-pentest-skills --skill supabase-extract-url

安装后在 Claude Code 中输入/supabase-extract-url确认已加载。

详细介绍

Supabase URL 提取

🔴 关键:必须渐进式更新文件

必须随发现随写入上下文文件,而不是只在最后写入。

  • 每次发现后立即写入 .sb-pentest-context.json
  • 每项操作前后都记录到 .sb-pentest-audit.log
  • 不要等到技能执行完毕后才更新文件
  • 如果技能崩溃或中断,之前的所有发现都必须已保存

这不是可选项。未能渐进式写入属于严重错误。

此技能从 Web 应用的客户端代码中提取 Supabase 项目 URL。

何时使用此技能

  • 检测到 Supabase 使用情况后,获取确切的项目 URL
  • 需要 API 基础 URL 以进行后续测试时
  • 确认应用使用的是哪个 Supabase 项目

前提条件

  • 目标 URL 可访问
  • 已检测到(或怀疑存在)Supabase 使用情况

工作原理

此技能会扫描以下位置中的 URL 模式:

1. JavaScript 源代码
// Direct URL references
const SUPABASE_URL = 'https://abc123.supabase.co'
createClient('https://abc123.supabase.co', key)

// Environment variable patterns
process.env.SUPABASE_URL
process.env.NEXT_PUBLIC_SUPABASE_URL
import.meta.env.VITE_SUPABASE_URL
2. HTML Meta 标签和脚本
<meta name="supabase-url" content="https://abc123.supabase.co">
<script>
  window.SUPABASE_URL = 'https://abc123.supabase.co'
</script>
3. 配置对象
const config = {
  supabase: {
    url: 'https://abc123.supabase.co'
  }
}

URL 模式匹配

可识别的模式:

模式示例
标准https://abc123.supabase.co
带区域https://abc123.eu-central-1.supabase.co
自定义域名通过 API 端点模式检测

使用方法

基本提取
Extract Supabase URL from https://myapp.example.com
从本地文件提取

如果你已下载源代码:

Extract Supabase URL from ./dist/assets/

输出格式

═══════════════════════════════════════════════════════════
 SUPABASE URL EXTRACTED
═══════════════════════════════════════════════════════════

 Project URL: https://abc123def.supabase.co
 Project Ref: abc123def
 Region: us-east-1 (inferred)

 Found in:
 ├── /static/js/main.abc123.js (line 1247)
 │   └── const SUPABASE_URL = 'https://abc123def.supabase.co'
 │
 └── /static/js/chunk.def456.js (line 89)
     └── createClient('https://abc123def.supabase.co', ...)

 API Endpoints:
 ├── REST API: https://abc123def.supabase.co/rest/v1/
 ├── Auth API: https://abc123def.supabase.co/auth/v1/
 ├── Storage: https://abc123def.supabase.co/storage/v1/
 └── Realtime: wss://abc123def.supabase.co/realtime/v1/

 Context updated: .sb-pentest-context.json
═══════════════════════════════════════════════════════════

上下文输出

保存到 .sb-pentest-context.json:

{
  "supabase": {
    "project_url": "https://abc123def.supabase.co",
    "project_ref": "abc123def",
    "region": "us-east-1",
    "endpoints": {
      "rest": "https://abc123def.supabase.co/rest/v1/",
      "auth": "https://abc123def.supabase.co/auth/v1/",
      "storage": "https://abc123def.supabase.co/storage/v1/",
      "realtime": "wss://abc123def.supabase.co/realtime/v1/",
      "functions": "https://abc123def.supabase.co/functions/v1/"
    },
    "sources": [
      {
        "file": "/static/js/main.abc123.js",
        "line": 1247,
        "context": "const SUPABASE_URL = 'https://abc123def.supabase.co'"
      }
    ]
  }
}

多个 URL

如果找到多个 Supabase URL:

═══════════════════════════════════════════════════════════
 MULTIPLE SUPABASE URLS FOUND
═══════════════════════════════════════════════════════════

 ⚠️  Multiple Supabase projects detected

 1. https://abc123.supabase.co (primary - most references)
    └── Found in: main.js, config.js

 2. https://xyz789.supabase.co (secondary)
    └── Found in: analytics.js

 Using primary URL for further analysis.
 To use a different URL, specify it manually.
═══════════════════════════════════════════════════════════

验证

此技能通过以下方式验证提取的 URL:

  1. 格式检查 — 是否符合预期的 Supabase URL 模式
  2. 可达性检查 — 尝试访问 REST API 端点
  3. 响应验证 — 确认响应类似 Supabase
Validation:
├── Format: ✅ Valid Supabase URL format
├── Reachable: ✅ REST API responds (200 OK)
└── Confirmed: ✅ Response matches Supabase pattern

常见问题

❌ **问题:**检测到 Supabase,但未找到 URL
✅ **解决方案:**URL 可能位于动态加载的代码块中。请尝试:

Extract URL with deep scan from https://myapp.example.com

❌ **问题:**找到 URL,但验证失败
✅ **解决方案:**项目可能已暂停,或区域可能存在连接问题。该 URL 仍会被记录。

❌ **问题:**只找到自定义域名
✅ **解决方案:**自定义域名有效。此技能会将其标记为自定义域名,并尝试识别底层项目。

安全说明

  • 此技能只读取公开可用的代码
  • 不会尝试进行身份验证
  • 仅凭 URL 无法获得访问权限(还需要密钥)

后续步骤

提取 URL 后:

  1. 运行 supabase-extract-anon-key 查找 API 密钥
  2. 运行 supabase-extract-service-key 检查是否泄露了服务密钥
  3. 继续使用 API 审计技能

强制要求:渐进式更新上下文文件

⚠️ 此技能在执行过程中必须渐进式更新跟踪文件,而不能只在最后更新。

关键规则:随做随写

不要在最后批量写入。应按以下步骤操作:

  1. 开始任何操作前 → 将该操作记录到 .sb-pentest-audit.log
  2. 每次发现后 → 立即更新 .sb-pentest-context.json
  3. 每个重要步骤后 → 将完成情况记录到 .sb-pentest-audit.log

这样可以确保即使技能中断、崩溃或超时,迄今为止的所有发现也都能保留。

必须执行的操作(渐进式)
  1. 更新 .sb-pentest-context.json,写入提取的数据:

    {
      "supabase": {
        "project_url": "https://[ref].supabase.co",
        "project_ref": "[ref]",
        "endpoints": { ... }
      }
    }
    
  2. 记录到 .sb-pentest-audit.log:

    [TIMESTAMP] [supabase-extract-url] [START] Beginning URL extraction
    [TIMESTAMP] [supabase-extract-url] [SUCCESS] URL extracted: https://[ref].supabase.co
    [TIMESTAMP] [supabase-extract-url] [CONTEXT_UPDATED] .sb-pentest-context.json updated
    
  3. 如果文件不存在,请在写入前创建文件。

不接受未更新上下文文件的情况。

强制要求:证据收集

📁 证据目录:.sb-pentest-evidence/02-extraction/

需要创建的证据文件
文件内容
extracted-url.json包含来源位置的 URL 提取详情
证据格式
{
  "evidence_id": "EXT-URL-001",
  "timestamp": "2025-01-31T10:05:00Z",
  "category": "extraction",
  "type": "url_extraction",

  "extracted_data": {
    "project_url": "https://abc123def.supabase.co",
    "project_ref": "abc123def",
    "region": "us-east-1"
  },

  "sources": [
    {
      "file": "/static/js/main.js",
      "line": 1247,
      "context": "const SUPABASE_URL = 'https://abc123def.supabase.co'"
    }
  ],

  "endpoints_discovered": {
    "rest": "https://abc123def.supabase.co/rest/v1/",
    "auth": "https://abc123def.supabase.co/auth/v1/",
    "storage": "https://abc123def.supabase.co/storage/v1/",
    "realtime": "wss://abc123def.supabase.co/realtime/v1/"
  }
}

相关技能

  • supabase-detect — 首先检测是否使用 Supabase
  • supabase-extract-anon-key — 提取 anon key
  • supabase-extract-service-key — 检查 service key 是否泄露

评论

支持 Markdown