攻击GraphQL API:从侦察到利用的全面指南
1. GraphQL基础
GraphQL是一种用于API的查询语言,与RESTful API有显著区别。它更类似于SQL,使用它就像是对数据库进行查询,只是步骤更多。
GraphQL请求通常使用POST方法发送到单个端点,请求体包含查询和突变(mutation)以及请求的类型。例如:
POST /v1/graphql
query products (price: "10.00") {
name
price
}
响应示例:
200 OK
{
"data": {
"products": [
{
"product_name": "Seat",
"price": "10.00",
"product_name": "Wheel",
"price": "10.00"
}
]
}
}
GraphQL的类型包括查询(query)、突变(mutation)和订阅(subscription),分别用于读取、创建/更新/删除和接收实时更新。与REST API不同,GraphQL使用这些类型来实现CRUD功能。
常见的GraphQL IDE有GraphiQL、GraphQL Playground和Altair Client,它们提供了一个图形界面来与API交互。
2. 主动侦察
- 扫描目标主机 :使用Nmap扫描目标主机,例如:
$ nmap -sC -sV 192.168.195.132
结果显示端口5000开放,运行着HTTP服务,使用的是Werkzeug 1.0.1版本。
-
Web应用漏洞扫描
:使用Nikto进行更有针对性的扫描:
$ nikto -h 192.168.195.132:5000
Nikto发现应用可能存在一些安全配置问题,如缺少X-Frame-Options和未定义X-XSS-Protection头。同时,允许使用OPTIONS、HEAD和GET方法。
-
在浏览器中查看DVGA
:在浏览器中访问DVGA,点击页面上的链接,如Private Pastes、Public Pastes等,收集有用信息,如用户名、论坛帖子等。
-
使用DevTools
:打开浏览器的DevTools,查看网络请求。在DVGA主页的响应头中发现
Set-Cookie: env=graphiql:disable
,这表明目标使用了GraphQL。导航到Public Pastes页面,选择
graphql
源文件并查看预览,确认这是一个GraphQL响应。
3. 逆向工程GraphQL API
-
目录暴力破解GraphQL端点
:使用Kiterunner进行目录暴力扫描,查找与GraphQL相关的目录。手动搜索时,可以在请求路径中添加以下关键字:
-
/graphql -
/v1/graphql -
/api/graphql -
/v1/api/graphql -
/graph -
/v1/graph -
/graphiql -
/v1/graphiql -
/console -
/query -
/graphql/console -
/altair -
/playground
-
使用Kiterunner扫描命令:
$ kr brute http://192.168.195.132:5000 -w /usr/share/seclists/Discovery/Web-Content/graphql.txt
扫描结果显示
/graphql
和
/graphiql
返回HTTP 400错误。在浏览器中访问
/graphql
,得到
Must provide query string.
的提示;访问
/graphiql
,显示
400 Bad Request: GraphiQL Access Rejected
。
-
篡改Cookie启用GraphiQL IDE
:使用Burp Suite Proxy捕获到
/graphiql
的请求,发现
env
变量是Base64编码的,解码后为
graphiql:disable
。将其改为
graphiql:enable
并重新编码,更新浏览器中的Cookie,刷新GraphiQL页面,即可使用GraphiQL界面和文档浏览器。
4. 逆向工程GraphQL请求
-
使用Postman拦截请求
:将浏览器代理设置为Postman,手动浏览DVGA应用,提交数据。在Postman中删除不包含
/graphiql或/graphql的请求。 - 重命名请求 :仔细查看每个请求的主体,提取关键信息并为请求命名。例如:
POST http://192.168.195.132:5000/graphiql?
{"query":"\n query IntrospectionQuery {\n __schema {\n queryType{ name }\n
mutationType { name }\n subscriptionType { name }\n
可以命名为
Graphiql Query Introspection SubscriptionType
。
-
使用内省(Introspection)逆向工程GraphQL集合
:内省是GraphQL的一个特性,它可以向消费者揭示API的整个架构。如果可以查询架构,就可以像找到REST API的集合或规范文件一样操作。
内省查询示例:
query IntrospectionQuery {
__schema {
queryType { name }
mutationType { name }
subscriptionType { name }
types {
...FullType
}
directives {
name
description
locations
args {
...InputValue
}
}
}
}
5. GraphQL API分析
-
使用GraphiQL文档浏览器构建请求
:以从Postman逆向工程的Public Pastes请求为例,在GraphiQL IDE中进行测试。使用文档浏览器构建查询:
-
在GraphiQL查询面板中输入
query和花括号来发起GraphQL请求。 -
查询公共粘贴字段,添加
pastes并指定参数public: true。 -
为了了解更多关于公共粘贴对象的信息,添加字段到查询中。例如,选择
PasteObject查看字段,然后将title、content、public、ipAddr和pId添加到请求体中。
-
在GraphiQL查询面板中输入
以下是整个攻击流程的mermaid流程图:
graph LR
A[主动侦察] --> B[扫描目标主机]
B --> C[Web应用漏洞扫描]
C --> D[在浏览器中查看DVGA]
D --> E[使用DevTools]
E --> F[逆向工程GraphQL API]
F --> G[目录暴力破解GraphQL端点]
G --> H[篡改Cookie启用GraphiQL IDE]
F --> I[逆向工程GraphQL请求]
I --> J[使用Postman拦截请求]
J --> K[重命名请求]
I --> L[使用内省逆向工程GraphQL集合]
F --> M[GraphQL API分析]
M --> N[使用GraphiQL文档浏览器构建请求]
通过以上步骤,我们可以对GraphQL API进行全面的侦察和分析,为进一步的攻击做好准备。在实际操作中,需要根据具体情况灵活运用这些技术,不断探索和尝试,以发现潜在的漏洞和安全问题。
攻击GraphQL API:从侦察到利用的全面指南
6. 常见攻击场景及应对策略
在对GraphQL API进行了全面的侦察和分析后,我们需要了解一些常见的攻击场景以及相应的应对策略。以下是几种常见的攻击类型及防护方法:
| 攻击类型 | 描述 | 应对策略 |
|---|---|---|
| 查询注入攻击 | 攻击者可能会尝试在GraphQL查询中注入恶意代码,以获取敏感信息或执行未授权操作。 | 对用户输入进行严格的验证和过滤,使用白名单机制,只允许合法的查询参数。 |
| 暴力破解攻击 | 攻击者可能会尝试通过暴力破解的方式猜测GraphQL端点或查询参数。 | 使用强密码和复杂的参数,对频繁的请求进行限流,防止暴力破解。 |
| 信息泄露攻击 | 由于GraphQL的内省功能,可能会导致API架构信息泄露。 | 禁用不必要的内省功能,或者对其进行访问控制,只允许授权用户使用。 |
7. 利用GraphQL API漏洞
在发现GraphQL API的漏洞后,我们可以尝试利用这些漏洞进行攻击。以下是一些具体的利用方法:
- 利用查询注入漏洞 :如果发现查询注入漏洞,可以尝试构造恶意查询来获取敏感信息。例如,如果存在一个查询用户信息的接口,可以尝试注入恶意代码来获取所有用户的信息。
query {
users (username: "' OR '1'='1") {
id
username
email
}
}
- 利用信息泄露漏洞 :如果发现API架构信息泄露,可以根据泄露的信息构造更精准的查询,获取更多的敏感信息。
8. 防御GraphQL API攻击
为了保护GraphQL API免受攻击,我们需要采取一系列的防御措施。以下是一些建议:
- 输入验证 :对所有用户输入进行严格的验证和过滤,防止查询注入攻击。
- 访问控制 :对GraphQL API进行访问控制,只允许授权用户访问。可以使用身份验证和授权机制,如OAuth、JWT等。
- 限流 :对GraphQL API的请求进行限流,防止暴力破解和DDoS攻击。
- 监控和审计 :对GraphQL API的访问进行监控和审计,及时发现异常行为并采取措施。
9. 总结与展望
通过本文的介绍,我们了解了如何对GraphQL API进行攻击和防御。在实际应用中,我们需要不断学习和掌握新的攻击技术和防御方法,以应对日益复杂的安全威胁。
未来,随着GraphQL的广泛应用,其安全问题将变得更加重要。我们需要关注GraphQL的最新发展,研究新的攻击技术和防御策略,为GraphQL API的安全保驾护航。
以下是防御GraphQL API攻击的mermaid流程图:
graph LR
A[输入验证] --> B[访问控制]
B --> C[限流]
C --> D[监控和审计]
D --> E[防御成功]
总之,攻击和防御GraphQL API是一个不断学习和实践的过程。我们需要保持警惕,不断提升自己的安全意识和技术水平,以确保GraphQL API的安全稳定运行。
超级会员免费看
1257

被折叠的 条评论
为什么被折叠?



