您好,登錄后才能下訂單哦!
怎么綜合利用Self-XSS和OAuth錯(cuò)誤配置實(shí)現(xiàn)Stored-XSS,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
下面是對(duì)Self-XSS和OAuth錯(cuò)誤配置兩個(gè)低危漏洞的組合利用,形成Stored XSS的一個(gè)梳理過(guò)程,僅當(dāng)思路拓展。由于測(cè)試保密原因,目標(biāo)測(cè)試網(wǎng)站用redacted.com來(lái)代替描述。
在HackerOne平臺(tái)參與的一個(gè)邀請(qǐng)測(cè)試項(xiàng)目中,我發(fā)現(xiàn)了一個(gè)AngularJS 客戶端模板的Self XSS漏洞和一個(gè)OAuth實(shí)現(xiàn)的錯(cuò)誤配置漏洞,單獨(dú)來(lái)看,這兩個(gè)漏洞都屬于低風(fēng)險(xiǎn)漏洞,形成不了嚴(yán)重的隱患影響。但經(jīng)過(guò)我對(duì)它們的組合利用,就可以形成一個(gè)完美的Stored XSS !
目標(biāo)測(cè)試網(wǎng)站redacted.com,它主要提供文件存儲(chǔ)服務(wù),有點(diǎn)像Google Drive 和 DropBox的樣子,用戶通過(guò)注冊(cè)使用這個(gè)平臺(tái),可以實(shí)現(xiàn)文件的上傳、下載和分享。
存在XSS的地方位于待上傳文件的文件名處,如果把待上傳文件的文件名改為{{constructor.constructor(‘a(chǎn)lert(1)’)()}}.jpg這種樣式,就會(huì)在上傳文件管理面板中導(dǎo)致XSS,啊,可它卻是一個(gè)Self XSS。
后經(jīng)測(cè)試,有一種簡(jiǎn)單的方法可以讓這個(gè)Self XSS轉(zhuǎn)變?yōu)镾tored XSS,那就是向其它用戶共享文件的上傳鏈接,當(dāng)文件被以相同的文件名從上傳面板中導(dǎo)入時(shí),就會(huì)導(dǎo)致Stored XSS。但在這里,我還要展示另外一種轉(zhuǎn)變?yōu)镾tored XSS的有趣方式。
在設(shè)置菜單中,我發(fā)現(xiàn)了一個(gè)可以從DropBox導(dǎo)入文件的功能,使用這個(gè)功能,用戶需要在OAuth機(jī)制下,把redacted.com的應(yīng)用和Dropbox賬戶相關(guān)聯(lián)。這里,來(lái)簡(jiǎn)單地介紹一下redacted.com應(yīng)用的大致OAuth機(jī)制:
1、首先,用戶點(diǎn)擊Dropbox關(guān)聯(lián)按鈕,然后會(huì)產(chǎn)生一個(gè)GET發(fā)起請(qǐng)求:
https://dropbox.com/oauth3/authorize?client_id=***********&response_type=code&state=****************&redirect_uri=https%3A%2F%2Fwww.redacted.com%2Faccount%2Fsettings%2Fdropbox-callback
2、接下來(lái),當(dāng)前redacted.com應(yīng)用的用戶會(huì)跳轉(zhuǎn)到Dropbox,進(jìn)行一個(gè)相應(yīng)的Dropbox登錄和允許按鈕點(diǎn)擊:
3、點(diǎn)擊允許Allow后,會(huì)產(chǎn)生一個(gè)發(fā)往redacted.com且包含 state 參數(shù)和驗(yàn)證碼auth_code的GET請(qǐng)求,如下紅框所示:
4、redacted.com后端接收并處理這個(gè)GET請(qǐng)求后,用戶的Dropbox賬戶就能與當(dāng)前redacted.com應(yīng)用同步了,所有Dropbox相關(guān)的文檔都可導(dǎo)入到redacted.com應(yīng)用中來(lái);
我在測(cè)試這個(gè)OAuth機(jī)制的過(guò)程中,目的在于發(fā)現(xiàn)能否把我的Dropbox賬戶關(guān)聯(lián)到其它redacted.com應(yīng)用上,但卻沒(méi)什么發(fā)現(xiàn)。
其中涉及的redirect_uri是白名單化的,state參數(shù)方式也都合理,auth_code不能兩次復(fù)用,等等,而且我還測(cè)試了state參數(shù),也即redacted.com應(yīng)用是否用當(dāng)前用戶會(huì)話對(duì)其進(jìn)行驗(yàn)證,結(jié)果都沒(méi)什么問(wèn)題。
所以,基于以上這些測(cè)試來(lái)看,我肯定不能用來(lái)自Dropbox的鏈接 https://www.redacted.com/account/settings/dropbox-callback?state=********code=**********,去關(guān)聯(lián)其他的redacted.com用戶賬戶。
出于好奇,我刪除了https://www.redacted.com/account/settings/dropbox-callback?state=********code=**********鏈接中的state參數(shù),變成了https://www.redacted.com/account/settings/dropbox-callback?code=**********,并把它放到了redacted.com的其他用戶賬戶中,驚喜的是,之后我的Dropbox賬戶就和其他用戶賬戶關(guān)聯(lián)起來(lái)了。
也就是說(shuō),只需要用一個(gè)GET請(qǐng)求,我就可以把我的Dropbox賬戶和其他任何人的redacted.com賬戶相關(guān)聯(lián)。在這里,你可能會(huì)有疑問(wèn),我不用Dropbox賬戶來(lái)登錄redacted.com應(yīng)用,這就不能發(fā)生賬號(hào)劫持了。但如前所述,在待上傳文件的文件名處存在XSS,那么我們就可以考慮來(lái)充分利用利用它。
1、在Dropbox中,上傳一個(gè)名為{{constructor.constructor(‘a(chǎn)lert(1)’)()}}.jpg的惡意文件,這是Dropbox允許的;
2、把Dropbox驗(yàn)證redacted.com應(yīng)用且不包含state參數(shù)的最終OAuth鏈接https://www.redacted.com/account/settings/dropbox-callback?code=**********,發(fā)送給目標(biāo)受害者;
3、當(dāng)受害者的redacted.com應(yīng)用和我們的Dropbox賬戶關(guān)聯(lián)后,一旦他向redacted.com應(yīng)用中導(dǎo)入那個(gè)惡意文件時(shí),我們文件名方式的XSS payload就會(huì)執(zhí)行。
這里的問(wèn)題在于,盡管redacted.com后端用當(dāng)前的session會(huì)話對(duì)用戶的state參數(shù)進(jìn)行了驗(yàn)證,但卻沒(méi)驗(yàn)證它的存在性。redacted.com后端的驗(yàn)證邏輯大概是這樣的:
if(isset($_GET['state'])){ if($_GET['state'] != current_user_state) ACCESS DENIED exit() } ACCESS GRANTED
所以,利用低危的OAuth錯(cuò)誤配置和Self XSS,最終實(shí)現(xiàn)了具有危害性的Stored XSS。
看完上述內(nèi)容,你們掌握怎么綜合利用Self-XSS和OAuth錯(cuò)誤配置實(shí)現(xiàn)Stored-XSS的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。