背景介紹:

目標是一個私人邀請項目,該項目在許多白帽黑客中非常受歡迎。當收到項目邀請時,白帽小哥注意到該目標在BugCrowd上已經兩年多了,到目前為止已經發現了250+個漏洞,并支付了賞金獎勵。當接受邀請的那一刻,白帽小哥知道即使是P3級漏洞可能也不太容易找到,更別說P1或P2了,但白帽小哥告訴自己,必須讓自己具有創造力,嘗試尋找其他白帽還未發現的東西!

GraphQL查詢中的SQL注入:

目標范圍很大,但子域不在范圍內。目標域類似target.*,因為它涵蓋了廣泛的 ccTLD(如:target.co.uk、target.it、target.ae、target.co.in、target.com 等)。

由于目標存在于全球各個國家,使用證書透明度 ( certificate transparency) 服務很容易找到 TLD,因此從打開主網站 target.com,然后在 SSL 中找到組織名稱,如下圖:

值得注意的是,大多數企業都在組織名稱下注冊了 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 貌似做了錯誤配置:

Burp Suite 登場:


當有以上信息后,白帽小哥通常會通過 Burp Scanner 來確認,將 URL 發送到 Burp 并開始主動掃描,幾分鐘后,Bingoo,當在請求正文中提交單引號 (') 時,Burp 發現查詢可能存在 SQL 注入。服務器響應“500 Internal Server Error”:

然而,對于Burp Suite來說,這個問題可能會是誤報,所以白帽小哥還無法確定是否真的存在SQL注入漏洞。

Sqlmap 與 Ghauri 登場:

將這些疑似漏洞發送至 SQLMAP 和 Ghauri,結果都無法找不到任何注入。

于是白帽小哥決定進行手動測試,因為他相信 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

看到服務器的延遲響應后,白帽小哥感到十分欣慰。當挖洞不是很順利時,大家經常會因為沮喪而想停止繼續挖掘,但事實證明專注、決心和努力最終會讓你得到了回報。

接下來就是提交漏洞報告,白帽小哥最終獲得了$3500的賞金獎勵以及40積分點。

感謝你的閱讀,如果覺得本文還不錯的話,歡迎分享給更多喜愛的朋友們~

====正文結束====