n3rada/sfmap

GitHub: n3rada/sfmap

Salesforce Experience Cloud 安全评估工具包,自动化执行攻击面测绘、IDOR 探测、对象枚举并生成 HTML 报告。

Stars: 0 | Forks: 0

# sfmap **Salesforce Experience Cloud 安全评估工具包。** 枚举访客和已认证身份的攻击面,探测 IDOR,测试 CRUD 和注入向量,映射 REST 和 Aura endpoint,并生成独立的 HTML 报告。 可针对任何 Experience Cloud 门户进行工作,支持从访客会话、已认证的社区用户或两者同时进行。 对 Salesforce 内部机制不熟悉?在开始评估之前,请先阅读 [SALESFORCE_101.md](SALESFORCE_101.md)。 ## 安装 ``` uv tool install git+https://github.com/n3rada/sfmap.git ``` 升级: ``` uv tool upgrade sfmap ``` 免安装运行: ``` uvx --from git+https://github.com/n3rada/sfmap.git sfmap --help ``` ## 凭证 Salesforce 暴露了两个具有不同凭证要求的攻击面。 ### Aura 攻击面(社区门户) 已认证的请求需要 session token 和 cookie。如果缺失,`ctx.json`(Aura 框架上下文)将被自动提取。 | 文件 | CLI 标志 | 值 | 是否必需 | |---|---|---|---| | `ctx.json` | `-C` | `aura.context` JSON | 缺失时自动提取 | | `token.txt` | `-T` | 来自 POST body 的 `aura.token` JWT | 可选 | | `cookies.txt` | `--cookie` | 原始 `Cookie:` header | 是(已认证) | **session cookie** 是用于认证 Salesforce 会话的关键。`aura.token` 仅作为 CSRF token;Salesforce 甚至会为未认证的访客发放一个。不带 cookie(无论是否带有 token)的运行将被视为访客,输出将保存至 `guest/`。 从 DevTools 中捕获:Network 标签页,使用 `aura` 过滤,点击任何发往 `/s/sfsites/aura` 的 POST 请求,复制 `Cookie:` header(用于 `cookies.txt`)和 `aura.token` 字段(用于 `token.txt`)。 当工作目录中存在凭证文件时,无需任何标志: ``` sfmap target.my.site.com surface exposure ``` ### REST API 攻击面 `rest soql`、`rest tooling` 和 Bulk API 需要来自**完整 Salesforce 许可证用户**(内部 org 用户,而非社区成员)的 OAuth Bearer token。无论凭证如何,社区会话都会在平台级别被拦截。 在登录了 `yourdomain.my.salesforce.com`(而非社区门户)的会话中,从 DevTools 捕获: ``` echo "00DAP..." > bearer.txt sfmap target.my.site.com --bearer @bearer.txt rest soql ``` ## 攻击面与命令 ``` sfmap URL aura objects | dump | record | info | crud | inject | related | follow | idor | apex | controllers | flow | network | bootstrap | views sfmap URL rest graphql introspect | query | dump content enum | download | distribution static | apexrest | soql | sosl | tooling | chatter sfmap URL surface exposure sfmap URL files download ID sfmap URL assess sfmap report -o DIR ``` ## 评估操作手册 在整个过程中,请将 `TARGET` 替换为您的目标域名。 **每个阶段运行两次:** 1. **已认证**:存在 `token.txt`/`cookies.txt`(或 `burp.txt`)。输出将保存至 `salesforce_//`。 2. **访客**:不存在任何凭证文件。输出将保存至 `salesforce_/guest/`。随后报告将并排显示两个标签页。 `ctx.json` 是可选的:如果缺失,sfmap 会自动从目标提取 Aura 上下文并将其保存以供后续运行使用。 通过在任何命令后追加 `--proxy`,即可将所有流量通过 Burp 进行路由。 ### 全面自动化评估(推荐) ``` sfmap TARGET assess ``` 按顺序运行所有阶段,跳过已完成的阶段(会检查哨兵文件),并在最后自动生成 HTML 报告。相当于手动运行下方的每一个阶段。 ### 手动逐阶段执行 #### 阶段 1:攻击面侦察 ``` sfmap TARGET surface exposure sfmap TARGET rest graphql introspect sfmap TARGET rest static sfmap TARGET rest apexrest sfmap TARGET rest chatter sfmap TARGET aura network sfmap TARGET aura bootstrap ``` #### 阶段 2:Object 枚举 ``` sfmap TARGET aura objects ``` #### 阶段 3:Object 级别枚举 ``` sfmap TARGET aura dump sfmap TARGET aura crud sfmap TARGET aura inject sfmap TARGET aura views sfmap TARGET rest graphql query sfmap TARGET rest soql sfmap TARGET rest sosl sfmap TARGET aura flow sfmap TARGET aura controllers ``` #### 阶段 4:Dump 后枚举 ``` sfmap TARGET rest graphql dump sfmap TARGET aura follow sfmap TARGET rest content enum ``` #### 阶段 5:IDOR 探测 ``` sfmap TARGET aura idor ``` 需要在同一输出目录中先执行 `aura dump` 以收集记录 ID。 #### 阶段 6:内容下载(可选) ``` sfmap TARGET rest content download sfmap TARGET rest content distribution ``` ### 报告 ``` sfmap report -o salesforce_TARGET ``` 生成一个独立的 `report.html`,其中每个身份(访客和已认证)对应一个标签页,包含带有所有者归属的 IDOR 发现表,以及适用于所有已导出 Object 的可浏览 Record Browser。可直接在浏览器中打开——无需服务器。 ## 输出 所有输出都会保存至一个派生自目标 URL 的目录中(使用 `-o` 覆盖): ``` salesforce_{host}/ {identity}/ exposure_summary.json crud_probe.json injection_findings.json idor_findings.json apexrest_hits.json staticresource_summary.json, staticresource_*.bin network_config.json flow_hits.json {Object}__page{N}.json graphql/ chatter/ soql/ tooling/ downloads/ report.html ``` ## aura.context 每次 Aura 请求都需要此项。Salesforce 每年推送三次框架构建;当每个请求都返回 `exceptionEvent: true` 时,请重新捕获。 ``` { "mode": "PROD", "fwuid": "a1dKZ0Zr...", "app": "siteforce:communityApp", "loaded": { "APPLICATION@markup://siteforce:communityApp": "1652_-1TRj7Ek7" }, "dn": [], "globals": {}, "uad": true } ``` ## 先前工作 sfmap 是在使用了现有工具并在实际测试中遇到它们的限制之后编写的。 [aura-inspector](https://github.com/google/aura-inspector) (Mandiant/Google) 和 [aura-dump](https://github.com/prjblk/aura-dump) (Project Black) 都通过单个脚本涵盖了 Aura Object 枚举和记录导出。它们要求调用者手动提供完整的 `aura.context` 和 token,一次只能处理一个 Object,在固定的页数处停止,并生成原始的 JSON 且没有跨运行的相关性分析。两者都没有涵盖 REST 攻击面(GraphQL、ApexREST、Chatter、SOQL)、跨会话的 IDOR 探测、CRUD/注入测试或报告生成。 编写 sfmap 的目的是自主运行完整的评估:自动提取 Aura 上下文,将所有 Object 分页至穷尽,覆盖每一个 REST 攻击面,关联访客和已认证会话的发现结果,并生成适合作为渗透测试交付物的结构化 HTML 报告。 [Salesforce CLI (sf)](https://github.com/salesforcecli/cli) 是当 admin 凭证在范围内时用于 org 检查的官方工具。 ## 免责声明 仅用于授权的安全评估、漏洞赏金计划和渗透测试任务。
标签:Python, Salesforce, Web安全, 主机安全, 密码管理, 无后门, 蓝队分析, 逆向工具