您好,登錄后才能下訂單哦!
怎樣用HTTP請求重寫實現JSON CSRF,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
下面介紹了作者在某漏洞測試項目中發現JSON類型跨站請求偽造漏洞(Cross-Site Request Forgery,CSRF)的過程。
通常來說,JSON CSRF漏洞主要在于Web應用本身的身份驗證機制上,簡單來看存在該漏洞,其HTTP請求須滿足以下三個條件:
1、Web應用身份驗證機制是基于Cookie形式的(Cookie形式的驗證機制本身存在CSRF攻擊風險);
2、Web應用的HTTP請求中無針對用戶的特定token保護;
3、Web應用的HTTP請求無同源策略保護。
如果具備上述三個條件,那么就可以從其它源中以創建AJAX請求的方式實現JSON請求偽造。注意,這只是實現JSON CSRF的主要條件,但有時候,即使是第2或第3個條件不滿足,也有可能實現JSON CSRF。
當我測試Web應用時,我會特意去分析身份驗證機制,如果其是基于Cookie形式的驗證方式,那么我就會直接測試CSRF漏洞。這里的情況和上述三個主要條件有點不同,這里只滿足第1,而第2第3個條件都不滿足。因為這里的Web應用HTTP請求中,針對不同用戶都在‘X-Auth-Token’頭中指定了不同的Token值,而且還對Origin頭進行了驗證。以下是Web應用的PUT請求:
平時,我從Twitter中學習到了一些請求測試方法,所以這里我就來嘗試嘗試:
1、把請求方法更改為GET,增加一些內容作為請求參數;
2、刪除請求中原本的用戶特定Token和一些驗證頭信息;
3、以相同的長度不同的Token驗證測試請求。
很幸運,其中的第2種方法是有效的,刪除請求中包含Token的‘X-Auth-Token’頭后,Web應用后端竟然還能正常響應:
到此,盡管Web應用存在Token頭驗證漏洞,但由于請求是PUT方式且Web后端還對 Origin 有驗證,所以我們還是無法深入利用。如果Web后端接受其它Origin頭就好了,那樣的話,至少可以用PUT方法偽造JSON形式的AJAX請求。怎么辦呢?
接著,我把PUT請求方法更改為POST,并把其中的Origin頭刪掉,然后出現了以下錯誤提示:
Web后端不允許POST方法?但沒關系,還可以用另外一種重寫方法來測試一下,我們在POST方法后加上_method=PUT試試看:
竟然是可以的!所以到此,CSRF的實現條件基本成立,可創建以下POC代碼進行深入測試:
<body onload='document.forms[0].submit()'><form action="https://<vulnerable-url>?_method=PUT" method="POST" enctype="text/plain"><input type="text" name='{"username":"blob","dummy":"' value='"}'><input type="submit" value="send"></form><!---This results in a request body of:{"username":"blob", "dummy": "="} -->
關于怎樣用HTTP請求重寫實現JSON CSRF問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。