實戰 | 記一次3000歐元賞金的IDOR + Self XSS漏洞挖掘
每個黑客都會遇到這個,第一個賞金。我實際上無法解釋它的感覺,但我知道你們中的大多數人都能理解它的感覺。讓我告訴你我第一次賞金的故事。當我們開始在 Web 應用程序安全中進行漏洞賞金時,我們大多數人都會從 XSS(跨站腳本攻擊)開始,故事從這里開始。
Markdown — Websockets — 反射型 XSS:
在進入攻擊之前,讓我們了解一些markdown、websockets和反射xss的基礎知識。
- MarkDown
在 Intigriti、Bugcrowd 或 HackerOne 中提交報告時,您可能會遇到此Markdown。Markdown 有助于更好地表示數據,從而提高可讀性。例子, # heading - 用于標題 ** input ** - 用于粗體文本 同樣反引號(`)用于表示代碼塊。
- WebSocket
WebSocket是一種通過 HTTP 運行的計算機通信協議,它提供了客戶端和服務器之間的雙向通信通道。 聊天應用程序廣泛使用 Websocket 進行無障礙通信。與 HTTP 請求不同,WebSocket 連接保持打開狀態,服務器可以在連接生命周期內隨時向客戶端發送下游數據。
- 反射型 XSS:
當應用程序在 HTTP 請求中接收數據并以不安全的方式將這些數據包含在即時響應中時,就會出現反射式跨站點腳本(或 XSS)。 參數中的值將在響應中返回,它不存儲在數據庫或任何地方。例子, https://www.ladecruze.com/blogs?query=xss<img src=x onerror=alert(document.domain)> 響應可能如下所示, <html> <body> 抱歉,我們沒有找到 <img src=x onerror=alert(document.domain)> </body> </html> 在這里,有效負載將呈現為 html 而不是文本。
Intigriti 是我最喜歡的漏洞賞金平臺之一,它經常與安全社區互動。我喜歡他們的 ctfs 和時事通訊。我最喜歡的黑客在 Intigriti 工作,我從中學到了很多。
選擇正確的程序總是很重要的。我花了很多時間選擇程序。我不小心在我的 Burp中看到了除www.intigriti.com[1] 之外的其他域,我沒有搜索過。當我查看請求時,我知道它來自 Intigriti 使用的第三方聊天應用程序。黑客使用此應用程序聯系 Intigriti 支持。
我插入有效載荷而不是文本的肌肉記憶是該錯誤背后的主要原因。當我輸入<img src=x onerror=alert()>并得到一些不尋常的有效負載渲染時,我攔截了請求并開始測試 XSS。
測試了幾分鐘后,我發現反引號 (`) 有問題,并在里面給出了有效載荷,如
<svg onload=alert(document.domain)>
成功發現XSS漏洞
隨后,我向 Intigriti 報告,對方告知
我對此進行了調查,恐怕您在這里遇到了誤報。我們的聊天通過 WebSockets 進行通信,Burp 攔截來自和發往 WebSocket 服務器的消息。您正在更改來自 websocket 服務器的消息,攻擊者無法干預。您所描述的“消毒延遲”是因為 websocket 自動刷新信息(這就是 websockets 的工作方式)。如果您找到一種方法來存儲它,換句話說:如果您能夠注入有效負載并且它在刷新后仍然出現,那么我們可以再看一下它。但就目前而言,這似乎是預期的行為。 最終我得到了 500 歐元的self xss
如何讓漏洞變得更加嚴重我開始深入思考,最終找到了一種可以真正利用其他用戶的方法。
XSS 只是從我這邊反映,如果我可以竊取其他黑客的聊天并插入有效載荷,以便我可以對他們進行XSS。
IDOR(不安全的直接對象引用)不安全的直接對象引用(IDOR) 是一種訪問控制漏洞,當應用程序使用用戶提供的輸入直接訪問對象時會出現這種漏洞。IDOR 一詞因出現在 OWASP 2007 Top 10 中而廣為人知。
聊天身份驗證如何工作?
Intigriti 將第三方聊天應用程序的腳本嵌入到域中以加載聊天應用程序。向第三方聊天應用程序發出請求以獲取密鑰,并且該密鑰用于獲取聊天信息。
應用程序如何將密鑰映射到用戶,應該有一些映射吧?當我查看獲取密鑰的請求時,我看到一個帶有hash的 vistorId 參數,用于獲取密鑰。我嘗試將hash更改為我的測試帳戶哈希并且它有效。
我們實際上意識到了這一點。如您所見,visitorID 具有相當大的熵。它不容易被暴力破解:攻擊者不能簡單地猜測它。 如果攻擊者設法竊取了vistorId ID,他也將能夠竊取聊天內容,甚至可能更多。 為了測試,您能解釋一下為什么將其標記為關鍵嗎? 大熵值不能被蠻力強制,注意:它可能因人而異,有些人發現六個字符的長度也更大。這完全取決于猜測正確值所需的迭代次數。
如果我不能暴力破解,如何竊取hash?這就是 IDOR 的來源,我開始尋找響應中包含hash的請求。顯然,這應該是使用電子郵件或用戶名或 userId 等用戶數據生成的。我開始篡改請求中影響響應hash的每個參數。
我發現平臺其他黑客的用戶名是用來檢索hash的。沒有任何其他授權檢查。這些用戶名可以在 Intigriti 平臺的排行榜中找到。
我使用排行榜用戶名中的頂級黑客來利用我的漏洞,并且能夠竊取他的聊天并像他一樣聊天。
所以我在聊天中插入了有效載荷,當黑客打開 Intigriti 時,會發送一個請求來獲取和渲染聊天,BOOM!XSS將在沒有任何用戶交互的情況下被觸發,成功。
最后隨后,我報告了問題,Intigriti 第二天就禁用了聊天功能。
在評估此問題的總體嚴重性時,我們已將聊天身份驗證問題 ([ INTIGRITI-IKIN5J ]) 考慮在內。 我們決定將此報告的嚴重性提高到高,因為這將允許在其他用戶的會話中注入 HTML(在某些情況下,這可能會導致舊瀏覽器上的 XSS 或無法啟用 CSP)。 總共,您將獲得 3,000 歐元的賞金(這是我們目前的關鍵支出):[ INTIGRITI-9115R1 ] 為 1,500 歐元,[ INTIGRITI-IKIN5J ] 為 1,500 歐元。 在您周六發表評論后,我們立即禁用了受影響的聊天插件,并就此聯系了第三方供應商。我們的調查仍在進行中,但我們已經想支付賞金了。鑒于這似乎是第三方插件中的一個漏洞,我們目前無法允許博客或向第三方披露有關它的詳細信息。我們將在未來采取措施防止此類攻擊,并將禁用或替換插件,直到找到合適的解決方案。 感謝您讓 intigriti 更安全!