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