白帽故事 · 2023年10月16日 0

“GraphQL黑客:如何使用简单的探测获得$1000赏金”

背景介绍

本文将分享国外一位白帽子对于多重身份验证功能实施渗透测试时的一些经验,希望能对你有所启发。

什么GraphQL?

GraphQL 是 API 的一种查询语言,允许客户端准确请求他们需要的数据,它由 Facebook 开发,近年来作为 REST API 的替代品变得愈加流行。

GraphQL 的主要优点之一是它的灵活性,因为它允许客户端在单个请求中请求多个资源,并接收与其请求的确切形状相匹配的响应。

这意味着客户不必担心数据获取过多或不足,因为他们可以准确指定他们需要的内容,此外,GraphQL 拥有强大且活跃的开发人员社区,不断致力于改进该语言及其工具。

凭借其众多优势和充满活力的支持者社区,GraphQL 如此受欢迎也就不足为奇了。

GraphQL Introspection(自省)查询

GraphQL 自省查询是一项功能,使用户能够通过查询 API 本身来发现 GraphQL API 功能,这包括有关 API 支持的类型、字段和查询的信息。

通过使用内省查询,开发人员可以了解有关 GraphQL API 的结构和功能的更多信息,而无需参考外部文档。当使用具有许多不同类型和字段的大型复杂 API 时,这非常有用。

为了优化搜索引擎,在段落中包含相关关键字非常重要,例如“GraphQL”、“query”、“API”、“fields”和“queries”,此外,使用清晰简洁的语言有助于提高可读性,从而使内容更易被使用者所理解。

如何在GraphQL 中执行自省查询

尝试在目标上发送带有以下内容的POST请求,执行 GraphQL 自省查询的完整请求:

{"query": "query IntrospectionQuery{__schema{queryType{name}mutationType{name}subscriptionType{name}types{...FullType}directives{name description locations args{...InputValue}}}}fragment FullType on __Type{kind name description fields(includeDeprecated:true){name description args{...InputValue}type{...TypeRef}isDeprecated deprecationReason}inputFields{...InputValue}interfaces{...TypeRef}enumValues(includeDeprecated:true){name description isDeprecated deprecationReason}possibleTypes{...TypeRef}}fragment InputValue on __InputValue{name description type{...TypeRef}defaultValue}fragment TypeRef on __Type{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name}}}}}}}}"}

服务器一般会以完整模式(查询、变异、对象、字段……)进行响应,这样即使以 JSON 格式显示,它也很快变得不可读,那么首先就是要将 JSON 响应提取到文件中,最好的方法是将其导入到“GraphQL Voyager”等工具中查看。

工具

  • Burpsuite Pro
  • Burpsuite 插件 – InQL Scanner

如何发现漏洞

在某次渗透测试中,白帽小哥花费了大量时间对目标应用程序进行URL爬取,但依然未能找到任何漏洞,于是小哥决定通过启用应用程序来测试多重身份验证 (MFA) 功能。

在启用 MFA 后,白帽小哥注意到应用程序显示了一个恢复代码,如果无法提供正确的 MFA 输入,则可以使用恢复代码进行登录。

这成功引起了小哥的注意,于是他尝试再次访问恢复代码,当单击恢复代码选项时,出现一个弹出窗口,提示输入密码,那么是否可以在不提供密码的情况下访问恢复代码呢?

file

果断打开 InQl Scanner并尝试运行内省查询,在响应中,能够获取与该应用程序相关的所有查询。

file

在查看查询时,小哥遇到了一个与恢复代码相关的查询,于是小哥决定测试它,复制该查询,然后将其粘贴到repeater中,在响应包中无需任何密码就获得了恢复代码。

file

故事的最后,厂商很快认定了该漏洞,白帽小哥也顺利地收获了赏金。

file

小哥推特:@piyush-kumawat