如何從XSS漏洞到CSRF利用實(shí)現(xiàn)賬戶劫持,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)豐城免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了近千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
前不久在HackerOne上參加了一個漏洞眾測邀請項(xiàng)目,目標(biāo)測試應(yīng)用(系統(tǒng))的功能是為一些企業(yè)托管相關(guān)服務(wù),普通用戶可以通過該系統(tǒng)進(jìn)行注冊,然后使用這些服務(wù)。所以,該應(yīng)用中會涉及到很多用戶的敏感信息處理操作。后來,作者由一個XSS漏洞入手,發(fā)現(xiàn)了上傳功能中存在的四步CSRF漏洞隱患,最終經(jīng)過構(gòu)造實(shí)現(xiàn)了目標(biāo)應(yīng)用的管理員賬戶劫持。
項(xiàng)目開始前兩天,我就發(fā)現(xiàn)了幾個中危漏洞,并對它們做了一些分析標(biāo)記,經(jīng)深入研究之后,我意識到只要利用一個XSS漏洞,就能非常容易地實(shí)現(xiàn)提權(quán)。另外,由于更改用戶注冊郵箱時,目標(biāo)應(yīng)用沒有諸如向郵箱發(fā)更改鏈接或輸入當(dāng)前密碼的驗(yàn)證手段,所以綜合漏洞利用,可形成賬戶劫持。為此,我花了好多時間去挖XSS漏洞。
但難處在于,由于目標(biāo)應(yīng)用對用戶輸入做了特殊字符過濾處理,所以貌似很難發(fā)現(xiàn)XSS漏洞。之后某天晚上,在繼續(xù)測試過程中,我注意到,目標(biāo)應(yīng)用可以上傳CSV文件來導(dǎo)入用戶信息,這個功能估計值得深挖。于是,我在上傳CSV文件中構(gòu)造了一些特殊字符,但還是被過濾掉了。接著,我又從CSV文件名入手,在其中構(gòu)造了XSS 語句:
.csv
終于實(shí)現(xiàn)了alert的窗口彈出!好了,大功告成。
但在后續(xù)分析中,我意識到即使構(gòu)造的文件名XSS是持久型的,這個XSS漏洞目前只能在CSV文件上傳時實(shí)現(xiàn)觸發(fā)。也就是說,在CSV文件上傳時,應(yīng)用未做相關(guān)編碼過濾處理,但文件上傳到系統(tǒng)服務(wù)端后是受編碼過濾的。因此來看,這個XSS漏洞目前也僅只是一個Self-XSS,是不在漏洞認(rèn)可范圍內(nèi)的。盡管我試了很多XSS Payload,但還是不能繞過上傳后的服務(wù)端過濾機(jī)制,無法轉(zhuǎn)變這種Self-XSS。
此時,我只有把它暫時放一放,希望在后續(xù)測試中能發(fā)現(xiàn)繞過方法或其它利用方式。接下來,在繼續(xù)測試后,我發(fā)現(xiàn)目標(biāo)應(yīng)用竟然沒有CSRF防護(hù)機(jī)制,所以,我就想到,能不能用CSRF請求來觸發(fā)這個Self-XSS呢?于是,我就立馬動手編寫了一個CSRF請求腳本,如下:
這個CSRF腳本內(nèi)容是上傳CSV文件的POST請求,好了,CSRF腳本有了,那么就需要在目標(biāo)應(yīng)用中找到一個路徑或端點(diǎn)(endpoint),構(gòu)造請求,發(fā)送給受害者用戶,以此實(shí)現(xiàn)XSS漏洞觸發(fā)了。但是,一經(jīng)測試,又發(fā)現(xiàn)目標(biāo)應(yīng)用中幾乎所有路徑或端點(diǎn)(endpoint)都有過濾防護(hù)措施,所以我在腳本中構(gòu)造的文件名XSS Payload - filename=\".csv\" 也就無法被解析觸發(fā)了。即使我嘗試了很多重定向跳轉(zhuǎn)和其它技巧,但仍然未找到可行方法。沒有思緒,我決定暫時先放一放。
兩天過后的某晚,在和媳婦看電視的時候,我突發(fā)靈感:XSS的實(shí)現(xiàn)利用現(xiàn)在可能是一葉障目,為什么不先把那個Self-XSS放一邊,直接去利用CSRF呢?因此,我需要再深入了解CSV文件的上傳過程,完整的CSV上傳過程主要包含以下四個過程,這幾個過程中都會涉及一些用戶信息的修改添加解析:
1、發(fā)起POST請求執(zhí)行上傳動作(POST - 1)
2、修復(fù)上傳過程的錯誤(GET-1)
3、解析上傳文件中的相關(guān)修改之處,以便進(jìn)行后續(xù)的預(yù)覽和驗(yàn)證(GET - 2)
4、解析并實(shí)現(xiàn)預(yù)覽,最終提交上傳
經(jīng)分析測試,第1步的POST請求中存在CSRF漏洞可能,之后的三步GET請求也都存在CSRF漏洞隱患。但整體利用可能有點(diǎn)麻煩,因?yàn)椴淮_定這些步驟如何執(zhí)行,而且后來我才發(fā)現(xiàn)其中還遺漏了一步。其次,目標(biāo)應(yīng)用需要在上傳錯誤修復(fù)之前實(shí)現(xiàn)一次查看檢查,所以,還需要在以上第1和第2步之間再插入一個檢查步驟。另外,目標(biāo)應(yīng)用的CORS配置也比較合理,當(dāng)調(diào)用各種端點(diǎn)路徑(Endpoint)時,無法獲得任何響應(yīng)數(shù)據(jù)。因?yàn)檫@種響應(yīng)數(shù)據(jù)對了解以上每個步驟的當(dāng)前狀態(tài)非常有用,就比如可以通過響應(yīng)返回時間推斷上傳數(shù)據(jù)的大小、網(wǎng)速、