這篇文章我將帶大家利用Ruby,來構建我們自己的FTP密碼破解器。并希望通過這個例子,讓大家明白暴力攻擊的概念及其重要性。好了話不多說,下面讓我們開始吧!
何為暴力攻擊?
暴力攻擊這個詞,其實對于許多安全圈的小伙伴來說都并不陌生,可謂是簡單粗暴。但對于許多攻擊者而言,暴力攻擊卻是不可或缺的一種攻擊手段。在實際應用中,由于暴力攻擊需要消耗大量的時間和資源,因此往往都不會成為攻擊者首選的方案,但它卻會是攻擊者最后的選項。
例如我們設置一個如下場景:
你現(xiàn)在想要訪問你所在公司的FTP(文件傳輸協(xié)議)服務器。你幾乎嘗試了所有可能獲取賬號密碼的方法,但由于目標FTP服務器安全性做的非常的好也不存在任何安全漏洞,同時該公司的員工安全意識也非常的強,你也無法進行社會工程學的攻擊。面對這種幾近極端的情況,最終你不得不采取暴力攻擊的方式。
首先,你會需要提前準備一個用于暴力破解的攻擊字典。然后將字典拖放到密碼破解工具的指定位置,密碼破解工具會對字典中的單詞列表進行逐一嘗試并嘗試登陸FTP服務器,直至匹配出正確的FTP服務密碼。
簡單吧?雖然暴力攻擊非常簡單粗暴,但它的威力卻不容小覷。有時它將決定我們滲透測試的成敗與否!下面,讓我們來構建一個屬于我們自己的FTP密碼破解器吧!
構建屬于自己的FTP密碼破解器
這里我們將會使用到Ruby腳本,來構建我們的FTP密碼破解器。如果你不是很了解Ruby腳本,不用擔心,我已經為大家準備了 Ruby的基礎教程 ,該教程涵蓋了本文中所用到的一些Ruby基礎知識,因此我建議大家在閱讀本文之前,先去掌握一些Ruby的基礎知識,以便更好地閱讀本文。下面我們直接進入代碼部分。
就像Python腳本一樣,在代碼起始位置我們需要聲明為Ruby腳本,并引入我們所需的函數(shù)庫以及獲取用戶的輸入信息:
這里我們只需要兩個庫文件。我們需要利用 socket 庫與FTP服務器進行通信,以進行暴力破解的嘗試登錄連接操作。而 timeout 庫則用于設置與目標服務器之間的第一次超時時間,如果服務器無法訪問,則會向我們返回超時提示。
接下來我們需要檢查ARGV列表的長度。該列表會在腳本啟動時生成,列表中包含了用戶從命令行順序輸入的所有參數(shù)。這里我們使用的unless語句相當于if not,如果這里ARGV接收的參數(shù)長度不等于3那么,該腳本將會打印使用規(guī)則并退出。
以下這段代碼將會開始嘗試連接目標服務器,并檢查目標服務器是否可正常通信:
以上代碼我們簡單的使用了socket庫并丟了個IP地址,來建立與目標服務器的通信連接。同時,我們使用了timeout庫做了一個十秒鐘的超時循環(huán),如果連接在十秒內未完成,腳本將會在客戶端界面提示用戶并關閉腳本。有了這些基本的功能后,下面我們使用以下函數(shù)來讀取用戶的字典列表文件:
這個功能函數(shù)的實現(xiàn)其實非常簡單。我們將文件路徑作為函數(shù)的一個參數(shù),并打印讀取的單詞列表。然后我們利用file.open()函數(shù)來打開文件,并讀取文件內容。在讀取文件時,我們以每行文本末尾的 ‘\n' 換行符來分割列表中的內容,這樣我們就能獲取到我們需要的密碼列表了。隨后我們會將該列表存儲在全局變量中,并將文件關閉進行下一步的操作。如果文件讀取失敗,腳本將會在客戶端界面提示用戶,并退出腳本?,F(xiàn)在我們已經具備了以上兩個FTP密碼破解器的基本功能函數(shù),接下來我們就可以來實際構建嘗試登錄到服務器的功能函數(shù)了:
這個函數(shù)非常重要,因為它將為我們進行實際的破解操作。這里我們首先創(chuàng)建了一個新的TCP套接字并將其連接到FTP服務器,然后我們等待FTP服務器的banner響應。當我們成功接收banner響應后,我們開始輸入我們的用戶名,并等待密碼輸入提示,接著我們將密碼嘗試發(fā)送到服務器。這時,我們將從服務器接收數(shù)據(jù),并將其存儲在一個變量中。該數(shù)據(jù)將會包含我們嘗試登錄的結果。
我們通過字符串“230”來判斷,我們是否成功登陸目標FTP服務器(“230”為FTP成功登錄的響應碼)。否則返回false。到此為止,我們的FTP密碼破解器已基本成型,最后我們要做的就是調用并整合以上的功能函數(shù),開始執(zhí)行我們的暴力攻擊:
以上代碼將調用我們之前創(chuàng)建的函數(shù),并對目標FTP服務器進行檢查以及讀取我們提供的字典列表文件。接著我們將開始對目標FTP服務器進行攻擊,這里使用了一個循環(huán),將對用戶提供的單詞列表進行逐一嘗試。如果最終密碼成功匹配,腳本將會將破解結果返回給用戶,并關閉腳本。下面讓我們來測試下我們的成果!
暴力攻擊測試
首先,我將創(chuàng)建一個字典文件。由于這只是一個例子,因此我的字典文件非常的簡短。但在實際環(huán)境中,一般情況下我們都需要使用非常大的字典文件。以下是我創(chuàng)建的單詞列表:
我們來運行我們的腳本,可以看到這里有一個簡單的使用提示:
現(xiàn)在,我們根據(jù)該腳本的使用規(guī)則提供相應的參數(shù)值,并執(zhí)行腳本。經過一段時間的等待,我們可以看到FTP服務器密碼被成功爆破:
總結
正如我開頭所說的,暴力攻擊雖然簡單粗暴,但對于攻擊者而言它有時將會決定我們滲透的成敗與否。因此作為我們安全測試人員,對于深入了解暴力攻擊的過程及原理有著非同尋常的意義。