密碼找回中的套路
首先這不是一篇總結(jié)性的帖子,畢竟對于密碼找回的測試方法網(wǎng)絡(luò)上有比較全面的總結(jié),比如用戶憑證暴力破解,系統(tǒng)返回了重要的憑證,郵箱手機弱token,token通用,session覆蓋,用戶憑證有效期問題,憑證算法被破解,前端校驗等等一系列漏洞。在這里附上前輩總結(jié)的腦圖,總結(jié)的也是比較詳細了。在日常的授權(quán)測試以及論 壇瞎逛中,發(fā)現(xiàn)了一些對于個人而言比較有意思的找回密碼的操作,獨樂樂不如眾樂樂,分享出來希望能幫到各位師傅。
有些人認為HTTP的聯(lián)機就是靠包里的HOST header來連接的,所以會認為如果修改掉包里的HOST, 那么就連接不到目標服務(wù)器,所以是不可控的。其實HTTP的聯(lián)機與包里的HOST并沒有啥關(guān)系, HTTP的聯(lián)機是TCP/IP建立的, 所以修改掉HOST HEADER并不會把包丟到另外一個服務(wù)器上。
所以當(dāng)應(yīng)用使用$_SERVER['HTTP_HOST']獲取網(wǎng)站URL并拼接到找回密碼的鏈接當(dāng)中就會產(chǎn)生漏洞。當(dāng)你使用網(wǎng)站密碼重置功能時,網(wǎng)站URL可能在將來會改變,所以要動態(tài)地生成一個郵箱找回密碼的鏈接來匹配服務(wù)器的URL。這個時候可能就會使用$_SERVER['HTTP_HOST'],Host header 是客戶端提供的,意味著攻擊者可以將他們自己的網(wǎng)址寫到重置密碼的郵件當(dāng)中,威脅任意用戶的賬戶安全。通過 X-Forwarded-Host 來拼接找回密碼鏈接中的域名,這樣可以通過寫入自己控制的域名,然后通過訪問記錄發(fā)現(xiàn)找回密碼鏈接,在拼接回正確域名重置任意用戶密碼。
利用條件是受害者必須要點擊重置鏈接,你才能從你控制的網(wǎng)站中通過訪問記錄查看到重置鏈接。
舉個kackerone的例子:
Mavenlink允許用戶注冊一個mavenlink.com的子域名去展示他們的內(nèi)容,所以他們需要一個方法去動態(tài)地決定公司的子域名。
host header 可以設(shè)置為mavenlink.com的任意子域名,但是從mavenlink.com更改域名將會返回一個錯誤,而不是發(fā)送一個郵件。
添加一個隨機的mavenlink.com的子域名,但是這會被定向到正確的頁面,沒辦法插入自己的域名。
測試特殊字符。服務(wù)器接受host header中的一個問號,生成下面的鏈接Host: example.com?.mavenlink.com這樣就可以從用戶郵件中盜取密碼重置token當(dāng)然這里還涉及到了域名檢測的繞過問題,一旦用戶點擊該鏈接,我們在example.com即可獲取到重置鏈接信息
在給后端傳遞要發(fā)送驗證鏈接的郵箱或者手機號時,可以傳遞一個郵箱或者手機的集合,然后只要第一個郵箱或者手機號是數(shù)據(jù)庫里存在的郵箱或者手機號,那么 將會向這批手機號或者郵箱發(fā)送一樣的鏈接信息團隊測試中遇到的例子:在hackerone披露的漏洞中同樣存在這樣的例子,通過發(fā)送兩個郵箱,一個為受害者的郵箱,一個為自己控制的郵箱,這樣就可以竊取到受害者郵箱中的重置密碼的鏈接,達到任意用戶密碼重置的目的。由于沒有看到過這種觸發(fā)該漏洞的源碼,猜測驗證環(huán)節(jié)是允許獲取一個類似于集合的東西,遍歷其中的值是否有存在于數(shù)據(jù)庫中的值,如果存在則對該集合放行,然后發(fā)送驗證信息的邏輯同樣允許傳入一個集合再去遍歷集合中的每一個值,對每一個值發(fā)送一樣的驗證鏈接
由于sql語句的拼接問題導(dǎo)致在手機號處存在sql注入問題,其實這也告訴我們在sql語句的執(zhí)行中只要涉及到了拼接問題就有可能存在漏洞,在團隊授權(quán)的測試中也遇到過更改日期處存在sql注入的例子,反正都挺好玩的。這里用了一個sqrt函數(shù),sqrt為一個平方根計算函數(shù),當(dāng)經(jīng)過平方根計算之后和前面的數(shù)字拼接,手機號存在于數(shù)據(jù)庫中則發(fā)送驗證碼如果經(jīng)過計算和前面的數(shù)字拼接手機號不存在于數(shù)據(jù)庫中則顯示驗證碼發(fā)送失敗通過這種方式來進行數(shù)據(jù)庫相關(guān)信息的猜測
這種邏輯漏洞總是在攻與防的斗爭中不斷前進,肯定會有腦洞大開的人發(fā)現(xiàn)更多的騷套路,這是目前在測試中遇到過的幾種比較有意思的任意用戶密碼重置漏洞的操作,在互聯(lián)網(wǎng)上能找到例子的盡量采用了互聯(lián)網(wǎng)例子,如有侵權(quán)地方還望告知。
聲明:免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請發(fā)
送郵件至:operations@xinnet.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時
需注明出處:新網(wǎng)idc知識百科