SQL 盲注大赚一笔:如何利用 GraphQL 漏洞赢得 3500 美元赏金奖励

admin 2023年4月12日01:38:14评论27 views字数 2208阅读7分21秒阅读模式

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


背景介绍:


目标是一个私人邀请项目,该项目在许多白帽黑客中非常受欢迎。当收到项目邀请时,白帽小哥注意到该目标在BugCrowd上已经两年多了,到目前为止已经发现了250+个漏洞,并支付了赏金奖励。当接受邀请的那一刻,白帽小哥知道即使是P3级漏洞可能也不太容易找到,更别说P1P2了,但白帽小哥告诉自己,必须让自己具有创造力,尝试寻找其他白帽还未发现的东西!

GraphQL查询中的SQL注入:

目标范围很大,但子域不在范围内。目标域类似target.*,因为它涵盖了广泛的 ccTLD(如:target.co.uk、target.it、target.ae、target.co.in、target.com 等)。

由于目标存在于全球各个国家,使用证书透明度 ( certificate transparency) 服务很容易找到 TLD,因此从打开主网站 target.com,然后在 SSL 中找到组织名称,如下图:

SQL 盲注大赚一笔:如何利用 GraphQL 漏洞赢得 3500 美元赏金奖励

值得注意的是,大多数企业都在组织名称下注册了 SSL 证书,例如“Twitter, Inc”。因此,在搜索子域或 ccTLD 域时,应确保使用组织名称进行搜索。

接下来,使用 netlas.io crt.sh 查找该组织下所有可能的 ccTLD 域,结合这两个结果,得到了超过 7k+ 的结果(包含子域),经过过滤后,大约只有 64 个目标。

HTTP 探测和参数发现:

接下来将这些目标列表复制到 Kali VM 并通过 httpx 探测,在探测之后,还有 57 个可用目标。

然后使用以下命令通过 ParamSpider -subs False 参数以排除子域:

cat targets | xargs -n 1 -I {} python3 ~/ParamSpider/paramspider.py --subs False --domain {} --level high | urldedupe >> all-param.txt

ParamSpider返回了大约20k行的URL,删除垃圾数据,大概得到了12k个'好的‘URL的最终列表。

白帽小哥开始检查参数和 URL,但遗憾的是它们中的大多数都是指向其产品页面的类似链接:

https://www.target.co.xx/en/xxxx/category2/men/t-shirts.xxx?n=xx&s=xx&ww=xxx 

那些对我没有用,因为相同的参数存在于超过 10k 的 url 中,过滤了这些产品网址后,大概还有 1.6k 个网址。

Nuclei 登场:


通过 Nuclei 的默认扫描,几秒钟后在众多结果中,以下结果引起了白帽小哥的注意,其中一个国家的 TLD 使用了 GraphQL,但 GraphQL 貌似做了错误配置:

SQL 盲注大赚一笔:如何利用 GraphQL 漏洞赢得 3500 美元赏金奖励

Burp Suite 登场:


当有以上信息后,白帽小哥通常会通过 Burp Scanner 来确认,将 URL 发送到 Burp 并开始主动扫描,几分钟后,Bingoo,当在请求正文中提交单引号 (') 时,Burp 发现查询可能存在 SQL 注入。服务器响应“500 Internal Server Error”:

SQL 盲注大赚一笔:如何利用 GraphQL 漏洞赢得 3500 美元赏金奖励

然而,对于Burp Suite来说,这个问题可能会是误报,所以白帽小哥还无法确定是否真的存在SQL注入漏洞。

Sqlmap 与 Ghauri 登场:

将这些疑似漏洞发送至 SQLMAP 和 Ghauri,结果都无法找不到任何注入。

SQL 盲注大赚一笔:如何利用 GraphQL 漏洞赢得 3500 美元赏金奖励

于是白帽小哥决定进行手动测试,因为他相信 Burp Suites 有能力找到这样的漏洞,它不太可能会是误报。

寻找正确的 GraphQL 查询:

白帽小哥在另一个屏幕上打开了 Burp ,并向易受攻击的 URL 发送请求然后开始捕获请求进行分析。

花了一个小时后,白帽小哥终于捕获了用于获取 POST 用户“性别”数据的完整查询,该查询接受 3 个关键字“M、F、NA”,关键字是 Male、Female 和 Not Applicable 的缩写。

查询示例如下:

{  "query":  "query ($_key***_0:String!, $_***_0:Int!) {*****  (keyword:$_key***_0, ****:$_***_0){ key***_text, number_of_result,   number_of_uses, ***_id, gender_cd, url }}",  "variables":{    "_key***_0":"M",    "_***_0":"1"  }}


寻找盲注:

一旦有了正确的查询,白帽小哥开始使用它并尝试发送不同的Payloads。

从 Nuclei 扫描中可以知道该应用程序使用 PHP 并且在 Apache 上运行,于是白帽小哥开始发送 MySQL Sleep的Payload。YES!服务器延迟响应 10.121 秒!

XOR(if(now()=sysdate(),sleep(9),0))XOR"Z

SQL 盲注大赚一笔:如何利用 GraphQL 漏洞赢得 3500 美元赏金奖励

看到服务器的延迟响应后,白帽小哥感到十分欣慰。当挖洞不是很顺利时,大家经常会因为沮丧而想停止继续挖掘,但事实证明专注、决心和努力最终会让你得到了回报。

接下来就是提交漏洞报告,白帽小哥最终获得了$3500的赏金奖励以及40积分点。

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

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

原文始发于微信公众号(骨哥说事):SQL 盲注大赚一笔:如何利用 GraphQL 漏洞赢得 3500 美元赏金奖励

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年4月12日01:38:14
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SQL 盲注大赚一笔:如何利用 GraphQL 漏洞赢得 3500 美元赏金奖励http://cn-sec.com/archives/1666831.html

发表评论

匿名网友 填写信息