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

admin 2023年10月16日18:26:16评论7 views字数 2139阅读7分7秒阅读模式

声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。


文章首发于个人博客:https://mybeibei.net,点击最下方“阅读原文”可直接跳转查看。


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}}}}}}}}"}

generic

746 Bytes

© Guge's Blog

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

工具

  • Burpsuite Pro

  • Burpsuite 插件 – InQL Scanner

如何发现漏洞

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

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

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

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

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

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

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

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

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

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

小哥推特:@piyush-kumawat

感谢阅读,如果觉得还不错的话,欢迎分享给更多喜爱的朋友~

====正文结束====

原文始发于微信公众号(骨哥说事):GraphQL黑客:如何使用简单的探测获得$1000赏金

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年10月16日18:26:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   GraphQL黑客:如何使用简单的探测获得$1000赏金https://cn-sec.com/archives/2117211.html

发表评论

匿名网友 填写信息