mcpField
D
dynamic-application-security-testing

dynamic-application-security-testing

github.com/seb1n安全232119 次安装11 周前更新
代码仓库

关于 dynamic-application-security-testing

此技能帮助 Agent 对运行中的 Web 应用和 API 执行动态安全测试,适用于安全测试人员和开发团队。它涵盖扫描配置、结果核验及修复报告,并强调授权范围与降低测试影响。

主要功能

  1. 01配置扫描范围与策略
  2. 02设置登录和 API 认证
  3. 03运行应用与 API 扫描
  4. 04按严重性分析并核验发现
  5. 05生成含修复建议的报告
  6. 06比较并安排定期扫描

适用场景

  1. 01检查暂存环境中的 Web 应用漏洞
  2. 02验证需认证的 API 端点
  3. 03部署后比较漏洞扫描结果

安装

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

$npx skills add https://github.com/seb1n/awesome-ai-agent-skills --skill dynamic-application-security-testing

安装后在 Claude Code 中输入/dynamic-application-security-testing确认已加载。

详细介绍

动态应用安全测试

此技能可让 Agent 对正在运行的 Web 应用和 API 执行动态应用安全测试(DAST)。与静态分析不同,DAST 会在运行时与应用交互——发送精心构造的 HTTP 请求、对输入参数进行模糊测试,并分析响应,以检测 SQL 注入、跨站脚本、服务器配置错误、身份验证缺陷和不安全的 API 端点等漏洞。Agent 会配置扫描配置文件、处理已通过身份验证的扫描、解读结果,并生成可执行的修复报告。

工作流

  1. 定义目标范围和扫描策略 — 指定目标 URL、应用类型(传统 Web 应用、SPA、REST API、GraphQL)和扫描边界。定义范围内的路径和域名,以避免扫描非预期目标。选择扫描策略:用于低风险侦察的仅被动扫描、用于全面漏洞探测的主动扫描,或用于端点模糊测试的 API 专用扫描。

  2. 配置身份验证 — 对于需要登录的应用,使用有效凭据或会话令牌配置扫描器。通过指定登录 URL、用户名/密码字段和已登录状态指示字符串,设置基于表单的身份验证。对于 API 测试,配置 Bearer 令牌、API 密钥或 OAuth 流程,以便扫描器访问需要身份验证的端点。

  3. 执行 DAST 扫描 — 使用选定的工具(OWASP ZAP、Burp Suite 或 Nuclei)启动扫描。扫描器首先爬取应用以发现端点,然后使用攻击载荷主动探测每个端点。监控扫描进度和资源消耗,避免对目标环境造成过大负载。

  4. 分析并分类发现项 — 查看扫描结果,并按漏洞类型、严重性(使用 CVSS)、置信度级别和受影响的 URL 对每项发现进行分类。通过验证报告中的响应是否确实表明存在漏洞,过滤掉信息性噪声和误报。

  5. 生成修复报告 — 生成结构化报告,其中包含每项发现的存在漏洞的 URL、HTTP 请求/响应证据、严重性评级、CWE 标识符、OWASP 类别映射以及具体的修复指南。导出为 HTML、JSON 或 SARIF 格式,以便与问题跟踪工具集成。

  6. 安排定期扫描 — 将扫描配置为定期运行(例如,每晚扫描暂存环境),或在部署到 QA 环境时触发扫描。比较多次扫描的结果,以跟踪修复进度并检测新引入的漏洞。

支持的技术

  • DAST 工具:OWASP ZAP、Burp Suite Professional/Enterprise、Nuclei、Nikto、Arachni
  • 目标类型:传统 Web 应用、单页应用(React、Angular、Vue)、REST API、GraphQL API、WebSocket 端点
  • 身份验证:基于表单的登录、HTTP Basic/Digest、Bearer 令牌、API 密钥、OAuth 2.0 流程
  • 输出格式:HTML 报告、JSON、XML、SARIF、Markdown
  • CI/CD 集成:GitHub Actions、GitLab CI、Jenkins、Azure Pipelines

用法

向 Agent 提供目标 URL、所需的身份验证凭据以及期望的扫描深度。Agent 将配置扫描器、执行测试并提交按优先级排序的发现报告。

提示词示例:

Run a DAST scan against our staging application at https://staging.example.com. Use OWASP ZAP with the login form at /login (username: testuser, password: Test@1234). Scan all API endpoints under /api/v2 and generate an HTML report.

示例

示例 1:使用 OWASP ZAP 扫描 Web 应用

带身份验证的 ZAP Docker 命令:

docker run --rm -v $(pwd)/report:/zap/wrk owasp/zap2docker-stable zap-full-scan.py \
  -t https://staging.example.com \
  -r zap-report.html \
  -J zap-report.json \
  -c zap-config.conf \
  --hook=zap-auth-hook.py \
  -z "-config formhandler.fields.field(0).fieldId=username \
      -config formhandler.fields.field(0).value=testuser \
      -config formhandler.fields.field(1).fieldId=password \
      -config formhandler.fields.field(1).value=Test@1234"

发现报告(节选):

#风险警报URLCWEOWASP置信度
1高SQL 注入POST /api/v2/searchCWE-89A03:2021高
2高跨站脚本(反射型)GET /search?q=<script>CWE-79A03:2021高
3中缺少 Anti-CSRF 令牌POST /api/v2/profile/updateCWE-352A01:2021中
4中Cookie 缺少 Secure 标志Set-Cookie: session=...CWE-614A05:2021高
5低缺少 X-Content-Type-Options 标头所有响应CWE-693A05:2021高
6低服务器泄露版本信息Server: Apache/2.4.49CWE-200A05:2021高

发现项 #1 的证据——SQL 注入:

Request:
  POST /api/v2/search HTTP/1.1
  Content-Type: application/json
  {"query": "test' OR '1'='1' --"}

Response:
  HTTP/1.1 200 OK
  [returned all 4,892 records instead of matching records]

Remediation: Use parameterized queries or ORM methods. Validate and sanitize
all user input before including it in database queries.
示例 2:用于检测暴露的调试端点的自定义 Nuclei 模板

自定义模板(exposed-debug-endpoints.yaml):

id: exposed-debug-endpoints
info:
  name: Exposed Debug/Admin Endpoints
  author: security-team
  severity: high
  description: Detects debug and admin endpoints that should not be publicly accessible.
  tags: misconfiguration,exposure
  classification:
    cwe-id: CWE-489
    cvss-score: 7.5

http:
  - method: GET
    path:
      - "{{BaseURL}}/debug"
      - "{{BaseURL}}/actuator"
      - "{{BaseURL}}/actuator/env"
      - "{{BaseURL}}/graphql/playground"
      - "{{BaseURL}}/_profiler"
      - "{{BaseURL}}/elmah.axd"
      - "{{BaseURL}}/phpinfo.php"
    stop-at-first-match: false
    matchers-condition: and
    matchers:
      - type: status
        status:
          - 200
      - type: word
        words:
          - "debug"
          - "actuator"
          - "environment"
          - "playground"
        condition: or

运行扫描:

nuclei -u https://staging.example.com -t exposed-debug-endpoints.yaml -t cves/ -severity high,critical -json -o nuclei-results.json

输出示例:

[exposed-debug-endpoints] [http] [high] https://staging.example.com/actuator/env
[exposed-debug-endpoints] [http] [high] https://staging.example.com/graphql/playground
[CVE-2021-44228] [http] [critical] https://staging.example.com/api/v2/log

最佳实践

  • 扫描预发布环境,绝不扫描生产环境 — DAST 会主动发送攻击载荷,可能破坏数据、触发警报或导致服务中断。务必将目标设为与生产环境相似的预发布或 QA 环境。
  • 结合被动扫描和主动扫描 — 先使用被动爬虫映射应用,而不发送攻击载荷;然后对发现的端点运行主动扫描,以实现全面覆盖。
  • 正确配置身份验证 — 未经身份验证的 DAST 扫描只能测试登录页面和公开端点。大多数实际漏洞都存在于需要身份验证的流程中,因此务必配置有效的会话凭据。
  • 设置扫描范围边界 — 明确指定范围内的域名和路径。如果没有边界,扫描器可能会跟随链接访问第三方网站、CDN 或支付服务提供商,从而造成意外后果。
  • 随时间推移对比扫描基线 — 保存扫描结果,并将每次新运行的结果与上一基线进行比较。这有助于发现新引入的漏洞,并确认先前报告的问题已修复。
  • 将 DAST 与 SAST 配合使用 — DAST 可发现 SAST 遗漏的运行时问题(配置错误、部署错误),而 SAST 可发现 DAST 无法触及的代码级缺陷。两者结合使用可实现全面覆盖。

安全边界

  • 仅在用户拥有或明确授权评估的系统上操作,并在测试前记录获批范围。
  • 从被动或只读检查开始。进行主动扫描、漏洞利用、负载生成或有影响的修复前,须获得明确批准。
  • 切勿暴露机密、提取无关数据、削弱生产环境控制措施,或超出获批目标范围。
  • 保留证据,将影响降至最低;出现不稳定情况时立即停止,并为每项重大变更提供回滚或遏制步骤。

边缘情况

  • 采用客户端路由的单页应用 — 传统爬虫无法发现 React、Angular 或 Vue 应用中的路由,因为链接由 JavaScript 渲染。使用 ZAP 的 AJAX Spider 或基于无头浏览器的爬虫,才能正确发现 SPA 端点。
  • 没有 UI 的纯 API 应用 — 如果没有可供爬取的 Web UI,请将 OpenAPI/Swagger 规范或 Postman 集合直接导入扫描器,以定义所有端点、参数和预期请求格式。
  • 受到速率限制或 WAF 保护的目标 — 激进扫描可能触发速率限制或 WAF 拦截,导致漏报。降低扫描速率、在 WAF 中将扫描器 IP 列入允许列表,或直接测试源服务器,以获得准确结果。
  • WebSocket 和实时端点 — 大多数 DAST 工具专注于 HTTP 请求/响应模式。WebSocket 连接需要专用工具或手动测试,才能探查实时消息流中的注入和授权问题。
  • 有状态的多步骤工作流 — 结账、密码重置或 MFA 注册等流程中的漏洞,需要扫描器按特定步骤顺序执行。定义扫描序列或使用录制的宏,端到端地测试这些工作流。

评论

支持 Markdown