深度解析密碼破解程序
網路應用程序和網路服務特別容易受到密碼暴力攻擊,而且密碼暴力攻擊類型的軟體相對容易訪問,默認情況下可以遠程使用,而且大部分都是自定義的,更重要的是該類軟體會隨著網路技術的最新發展而不斷變化。在這篇文章中,我將從不同的角度介紹一些類型的網路應用程序暴力攻擊。另外,我還將使用現成的免費網路安全工具,如AppBandit攻擊代理或在線工具套件的Fuzzer來深入分解每種攻擊,Fuzzer(漏洞檢查工具)可以發送數據到組件,可以完成數以萬計的檢查任務,來幫助我們發現軟體中不期望有的漏洞。
基本身份驗證
從萬維網早期開始,就出現了一些基本身份驗證及類似的驗證(如摘要認證,NTLM驗證等),這些就是最初的認證標準。不過如今看過來,基本身份驗證在實際的應用中已經沒有任何安全保障可言了。但由於目前該驗證方法還在被繼續使用,所以這並不妨礙開發人員利用該方案對路由器管理界面、網路服務、管理界面等進行密碼保護。之所以應用如此廣泛,原因之一是因為基本身份驗證過程相對比較簡單,因為整個身份驗證方案會在特殊構造的標頭上設置一個中繼,該標頭包含以base64格式編碼的用戶名和密碼。
下面就看看我是怎麼對基本身份驗證提示進行暴力攻擊的,在進行演示之前,我需要從在線套件工具中打開AppBandit的Fuzzer或Fuzzer,並配置一些參數。
首先,我需要設置授權標頭,然後添加基本驗證項目,注意,我在設置時會為本文的測試進行一些特定的設置,以方便構建特定的任務。
對於用戶名,我將使用已知帳戶的列表。不過,我也可以使用來自一些知名資料庫的通用字典。
對於密碼,我將使用AppBandit和Fuzzer,這兩個工具不但都有自己的字典,而且都可以下載並包含論壇里提供的字典文件。從下拉菜單中添加一個字典項目,然後輸入「password」進行搜索,不但可以找到各種常見的各種密碼列表集,還可以從眾所周知的過去已經泄露的數據中提取具有真實攻擊效果的密碼列表。
確保將最大並行請求數增加到60或更多,並將超時時間減少到5秒,以提高攻擊性能。如下圖所示,果然,不久之後我就可以通過簡單的監控響應代碼來找到正確的密碼。
基於PIN碼的身份驗證
PIN碼,全稱Personal Identification Number。就是SIM卡的個人識別密碼。許多應用程序尤其是移動應用程序,都是利用所謂的基於PIN的認證,即使用4至6位代碼進行認證。基於通過電子郵件或簡訊發送令牌生成的雙因素身份驗證也屬於這一類,不過目前雙因素身份驗證也出現了不同程度攻擊。雖然,PIN可以提供相對安全的保障,不過在暴力破解面前,無論你是按順序還是隨機破解,都很容易達到攻擊目的。
以下是我針對虛構的JSON服務所進行的攻擊演示,不過前提是先對配置請求做一些設置,讓JSON服務符合本文的演示目的。在正文中,我使用了一系列設置來正確編碼pin的生成器。首先,我需要JSON編碼器來引用正確編碼的pin。接著,我還需要用一個格式項來將該pin填充到正確的pin長度,這對於下一步的演示很有用。
pad項包含一個簡單的計數器,即for循環。用步驟1的方法可以讓計數器從0計到9999。我使用pad項的原因是因為只有4位數字被認為是有效的pin。所以,我需要在該數字前面加上額外的零,以覆蓋從0開始的所有pin,以製作一個四位數的pin。我也可以使用相同的技術來製作相同的6位和8位數的pin。
要根據需要設置攻擊選項,即增加並發請求數和減少超時時間來執行攻擊。與你前面看到的基本身份驗證的暴力攻擊示例不同,現在我提供了一種基於狀態代碼的簡單機制,以區分有效的嘗試和無效的嘗試,由於這種類型的攻擊完全依賴於應用程序,因此你需要找到自己的攻擊方法。例如,你可能想要監控內容長度的更改或狀態代碼的更改,比如302重定向可能意味著成功的身份驗證。不過你也可以根據響應時間的多少來進行排序,比如定時啟發。
不過同樣的攻擊配置還可以配置為基於表單的身份驗證,甚至基本身份驗證。你只需要將生成器移動到所需的位置即可,其餘的配置完全相同。
基於表單的身份驗證
不用說,基於表單的身份驗證是網路上最常見的身份驗證方案。實際上任何PHP應用程序都會執行廣告驗證,如果正確地實現了基於表單的身份驗證,就應該能夠對抗自動的密碼猜測嘗試,儘管這聽起來很簡單,但在現實中,這絕不是一件容易的事情,因為存在許多需要特定類型處理的特殊情況。
如果我要設置基於表單的身份驗證暴力破解,那步驟就和以上基本身份驗證示例中的步驟相同。所以,我決定這次我不會使用授權標頭了,但我還是必須按照應用程序的設置標準來設置參數。我可以首先通過AppBandit代理或HTTPView等工具來獲取這些信息,這些工具可以直接從你自己的瀏覽器上運行,無需額外的設置。
這是一個聰明之舉,特別是如果用戶名是電子郵件,我就可以覆蓋更多的範圍。例如,我可以在多個賬戶中使用一個普通密碼的集合,而不是用許多密碼暴力破解一個帳戶。我也可以動態生成帳戶,具體過程,我會在下面講到。
所以要先為我的用戶列表設置一個生成器。首先,我將定義一些變數,以使攻擊更具攻擊力。
正如你所看到的,我正在使用一些字典(大部分來自seclists)來動態生成電子郵件地址。實際上,我可以在同一次攻擊中覆蓋多個域。
現在,我會從同一個列表中添加排名前100的常用密碼,我還可以使用另一個來自seclists的字典,如下圖所示。
一旦攻擊開始,你需要密切關注正在運行的任務以獲取線索,這些線索將獲取有效的登錄嘗試。根據得到的各種回饋情況,我會得到相同的結果。這些包含有效憑證的請求將按照我前面討論過的許多方式進行區分。不過你需要找出適合你自己的開啟方式。大多數這些情況都由內置過濾器覆蓋。例如,你可以過濾包含有效Cookie的響應。在大多數情況下,這都表明身份驗證是成功的。
如何鑒別身份驗證被攻擊了
網路認證系統很有趣,因為它們永遠都有缺陷,卻永遠都在用。如果太安全,將無法訪問。如果他們太容易訪問,就可能是不安全的。因此,在使用上述任何技術破解密碼時,都需要記住一些關鍵事項。
帳戶鎖定是防範暴力攻擊的常見防禦機制,但可根據情況將其轉換為拒絕服務。例如,假設用戶名是可猜測的或有順序的,就應該設置帳戶鎖定。由於我有能力可以生成有效的用戶名,這意味著我也可以將每個人都排除在系統之外,即拒絕服務。
水平暴力攻擊(horizontal bruteforce )和垂直暴力(vertical bruteforce )攻擊之間的轉換也是一種常見技術。換句話說,由於我可以枚舉這些帳戶或某種方式生成它們,所以我可以針對多個帳戶測試同一個密碼,而不是在單個帳戶測試多個密碼,。
如果某些認證系統來自相同的IP地址,它們會理所當然的鎖定有效的認證嘗試。後來,由於IPv4地址空間相對較小,許多客戶可能擁有相同的IP地址,因此這些系統被重構為有許多例外,例如,許多移動和光纖網路實際上都是這樣工作的。攻擊者可能能夠利用這些網路或誘使應用程序認為它們來自異常列表中的網路以繞過帳戶鎖定限制。
同樣,如果認證系統根據攻擊者的IP地址阻止IP或NETBLOCK,則暴力攻擊可以轉換為拒絕服務,因為同一網路中的用戶將無法登錄。再次,對於移動網路來說,因為移動用戶不太可能擁有專用的公共IP地址,所以此類移動應用程序受到影響特別大。
你不能僅僅因為頁面上有reCAPTCHA,就判定它被使用,很多時候它只是顯示在那裡。通常,reCAPTCHA或任何其他CAPTCHA系統都是嵌入式的,但由於配置錯誤或代碼更改導致無法進行檢查。
解除身份驗證可能實際上不起作用,雖然看起來用戶已註銷,但實際會話不會被破壞。以前使用的會話可以被攻擊者重新使用。
總結
攻擊者可以通過多種方式來成功獲取密碼,比如常見的暴力破解,如上文所述,這種攻擊非常普遍。目前,我還沒有看到有什麼安全系統能夠徹底根除這一類型的攻擊。坦率地說,雙因素認證方案是目前相對安全的選擇,但在某些情況下,它也可以被繞過。
本文翻譯自:https://secapps.com/blog/2018/03/how-to-make-a-password-cracker如若轉載,請註明原文地址: http://www.4hou.com/mobile/10755.html 更多內容請關注「嘶吼專業版」——Pro4hou
推薦閱讀:
※記一次XSS防禦繞過的過程
※HackTheBox Writeup之拿下Mantis主機許可權過程
※看我如何破解人臉識別
※一個簡單破譯所有Staker木馬密鑰的腳本
TAG:信息安全 |