如何利用暴力破解攻擊打進「敵人」內部

如何利用暴力破解攻擊打進“敵人”內部

寫在前面的話

在很多現實的攻擊案例中,大多數攻擊者都是通過暴力破解的方式來入侵目標系統的,此時攻擊者主要利用的是弱密碼以及密碼管理方面的安全問題。Web應用和Web服務特別容易受到密碼暴力破解攻擊,因為它們相對來說比較容易實現遠程訪問,而且數量和種類都非常豐富。在這篇文章中,我們將站在攻擊者的角度跟大家介紹幾種不同類型的針對Web應用的暴力破解攻擊。

注:我們將使用到網上現成的開源Web安全工具,例如AppBandit Attack Proxy和Fuzzer from the OnlineSuite來演示攻擊路徑。

基礎認證

在互聯網發展的早期,基礎認證(例如摘要認證和NTLM等)是普遍採用的認證標準。毫無疑問,這種方法的安全性是不足以滿足我們需求的,但是很多開發人員仍在使用這種認證方案來對路由器管理接口和Web服務等關鍵節點進行保護。之所以這種認證方法能夠得到廣泛使用,主要是因為它實現起來非常簡單(基於特殊構造的Header,其中包含的用戶名和密碼均以base64格式編碼)。

接下來,我們要開發一個針對基礎認證的暴力破解攻擊。打開AppBandit的Fuzzer或Fuzzer from the online suite,並配置一些相關參數。首先,我們需要設置授權Header,然後添加基礎認證選項:

如何利用暴力破解攻擊打進“敵人”內部

我們將從已知賬號中選取用戶名,然後從某些著名數據庫中選擇常用字典:

如何利用暴力破解攻擊打進“敵人”內部

AppBandit和Fuzzer沒有自帶字典文件,但是它們都可以使用外部字典。我們可以直接把字典文件拖進工具窗口,然後你就可以使用各種類型的常用字典列表了:

如何利用暴力破解攻擊打進“敵人”內部

確保你將並行請求的最大數量設置為60以上,並降低timeout到5秒左右,這樣可以提升攻擊的效率。接下來,我們只需要觀察控制檯中的響應碼就可以瞭解密碼的破解情況了。

如何利用暴力破解攻擊打進“敵人”內部

基於PIN碼的認證

很多應用程序,尤其是移動端App都會使用基於PIN碼的認證,即使用4-6位數字碼進行認證。基於電子郵件或SMS短信發送認證令牌來實現2FA的方法也屬於這類攻擊範疇。毫無疑問,PIN碼安全性的熵其實非常低,無論你準備按數字順序破解還是隨機破解,暴力破解的實施難度都不大。

接下來,我們將對一個虛擬的JSON服務發起攻擊。首先,我們要配置有效的服務請求。然後再請求body中,我們還需要對PIN碼生成器進行正確編碼。因此,我們需要JSON編碼器來引用這些值。除此之外,我們還需要將PIN碼長度填充到正確長度。

如何利用暴力破解攻擊打進“敵人”內部

用於實現數據填充的pad對象包含一個簡單的循環計數器(0-9999),因為這裡有效的PIN碼是4位數字,所以我們需要在數字前填充額外的‘0’來製作4位數字PIN碼,我們還可以利用同樣的技術來製作6位或8位數字PIN碼。

如何利用暴力破解攻擊打進“敵人”內部

大家可以根據自己的需要來配置請求數量並降低timeout。跟針對基礎認證的暴力破解攻擊不同,這種類型的攻擊需要根據目標應用程序的特性來設計。

基於表單的認證

基於表單的認證機制是目前Web最常見的身份驗證方案。實際上,幾乎任何一個PHP應用都實現了這種認證,但大多數的安全性都不高。為了發動針對表單認證的暴力破解攻擊,我們這裡需要設置目標應用程序所需要的參數。我們可以使用AppBandit Proxy或類似HTTPView這樣的工具來捕捉信息。

這裡我們可以稍微轉變一下思路,比如說,我們不需要用很多密碼去測試一個賬號,我們可以用一小部分的常用密碼來測試大量的賬號。接下來,我們需要設置一個用戶列表生成器。首先,我們要定義一些變量,並提升攻擊的可配置性。

如何利用暴力破解攻擊打進“敵人”內部

我們現在使用了一些字典(大多數來自seclists),我們可以動態生成電子郵件地址。實際上,我們還可以同時對多個域名實施攻擊。

現在,我們要添加一百個常用密碼(使用另一個seclists字典),結果如下:

如何利用暴力破解攻擊打進“敵人”內部

在真實的攻擊場景中,你可能還需要觀察控制檯中的響應請求,因為在很多情況下我們可以通過分析有效cookie來了解攻擊是否成功。

總結

目前還沒有任何一個安全系統可以完全抵禦這種類型的攻擊,因為攻擊者可以通過多種方式來實現密碼爆破攻擊。坦白的說,只要我們還在使用密碼,我們就是不安全的。雖然雙因素身份認證機制是目前比較安全的一種方案,但是它同上是作為一種可選項出現的,而且在某些情況下2FA同樣能夠被繞過。


分享到:


相關文章: