使用Ruby實現FTP密碼破解

本文給大家詳細講解了如何使用ruby來實現FTP的暴力破解,記錄了破解器從思路到最終實現的全部過程,原理其實很簡單,就是利用多線程調用相應的字典進行窮舉測試,有需要的小夥伴可以參考下

這篇文章我將帶大家利用Ruby,來構建我們自己的FTP密碼破解器。並希望通過這個例子,讓大家明白暴力攻擊的概念及其重要性。好了話不多說,下面讓我們開始吧!

何爲暴力攻擊?

暴力攻擊這個詞,其實對於許多安全圈的小夥伴來說都並不陌生,可謂是簡單粗暴。但對於許多攻擊者而言,暴力攻擊卻是不可或缺的一種攻擊手段。在實際應用中,由於暴力攻擊需要消耗大量的時間和資源,因此往往都不會成爲攻擊者首選的方案,但它卻會是攻擊者最後的選項。

例如我們設置一個如下場景:

你現在想要訪問你所在公司的FTP(文件傳輸協議)服務器。你幾乎嘗試了所有可能獲取賬號密碼的方法,但由於目標FTP服務器安全性做的非常的好也不存在任何安全漏洞,同時該公司的員工安全意識也非常的強,你也無法進行社會工程學的攻擊。面對這種幾近極端的情況,最終你不得不採取暴力攻擊的方式。

首先,你會需要提前準備一個用於暴力破解的攻擊字典。然後將字典拖放到密碼破解工具的指定位置,密碼破解工具會對字典中的單詞列表進行逐一嘗試並嘗試登陸FTP服務器,直至匹配出正確的FTP服務密碼。

簡單吧?雖然暴力攻擊非常簡單粗暴,但它的威力卻不容小覷。有時它將決定我們滲透測試的成敗與否!下面,讓我們來構建一個屬於我們自己的FTP密碼破解器吧!

構建屬於自己的FTP密碼破解器

這裏我們將會使用到Ruby腳本,來構建我們的FTP密碼破解器。如果你不是很瞭解Ruby腳本,不用擔心,我已經爲大家準備了 Ruby的基礎教程 ,該教程涵蓋了本文中所用到的一些Ruby基礎知識,因此我建議大家在閱讀本文之前,先去掌握一些Ruby的基礎知識,以便更好地閱讀本文。下面我們直接進入代碼部分。

就像Python腳本一樣,在代碼起始位置我們需要聲明爲Ruby腳本,並引入我們所需的函數庫以及獲取用戶的輸入信息:

這裏我們只需要兩個庫文件。我們需要利用 socket 庫與FTP服務器進行通信,以進行暴力破解的嘗試登錄連接操作。而 timeout 庫則用於設置與目標服務器之間的第一次超時時間,如果服務器無法訪問,則會向我們返回超時提示。

接下來我們需要檢查ARGV列表的長度。該列表會在腳本啓動時生成,列表中包含了用戶從命令行順序輸入的所有參數。這裏我們使用的unless語句相當於if not,如果這裏ARGV接收的參數長度不等於3那麼,該腳本將會打印使用規則並退出。

以下這段代碼將會開始嘗試連接目標服務器,並檢查目標服務器是否可正常通信:

以上代碼我們簡單的使用了socket庫並丟了個IP地址,來建立與目標服務器的通信連接。同時,我們使用了timeout庫做了一個十秒鐘的超時循環,如果連接在十秒內未完成,腳本將會在客戶端界面提示用戶並關閉腳本。有了這些基本的功能後,下面我們使用以下函數來讀取用戶的字典列表文件:

這個功能函數的實現其實非常簡單。我們將文件路徑作爲函數的一個參數,並打印讀取的單詞列表。然後我們利用file.open()函數來打開文件,並讀取文件內容。在讀取文件時,我們以每行文本末尾的 ‘\n' 換行符來分割列表中的內容,這樣我們就能獲取到我們需要的密碼列表了。隨後我們會將該列表存儲在全局變量中,並將文件關閉進行下一步的操作。如果文件讀取失敗,腳本將會在客戶端界面提示用戶,並退出腳本。現在我們已經具備了以上兩個FTP密碼破解器的基本功能函數,接下來我們就可以來實際構建嘗試登錄到服務器的功能函數了:

這個函數非常重要,因爲它將爲我們進行實際的破解操作。這裏我們首先創建了一個新的TCP套接字並將其連接到FTP服務器,然後我們等待FTP服務器的banner響應。當我們成功接收banner響應後,我們開始輸入我們的用戶名,並等待密碼輸入提示,接着我們將密碼嘗試發送到服務器。這時,我們將從服務器接收數據,並將其存儲在一個變量中。該數據將會包含我們嘗試登錄的結果。

我們通過字符串“230”來判斷,我們是否成功登陸目標FTP服務器(“230”爲FTP成功登錄的響應碼)。否則返回false。到此爲止,我們的FTP密碼破解器已基本成型,最後我們要做的就是調用並整合以上的功能函數,開始執行我們的暴力攻擊:

以上代碼將調用我們之前創建的函數,並對目標FTP服務器進行檢查以及讀取我們提供的字典列表文件。接着我們將開始對目標FTP服務器進行攻擊,這裏使用了一個循環,將對用戶提供的單詞列表進行逐一嘗試。如果最終密碼成功匹配,腳本將會將破解結果返回給用戶,並關閉腳本。下面讓我們來測試下我們的成果!

暴力攻擊測試

首先,我將創建一個字典文件。由於這只是一個例子,因此我的字典文件非常的簡短。但在實際環境中,一般情況下我們都需要使用非常大的字典文件。以下是我創建的單詞列表:

我們來運行我們的腳本,可以看到這裏有一個簡單的使用提示:

現在,我們根據該腳本的使用規則提供相應的參數值,並執行腳本。經過一段時間的等待,我們可以看到FTP服務器密碼被成功爆破:

總結

正如我開頭所說的,暴力攻擊雖然簡單粗暴,但對於攻擊者而言它有時將會決定我們滲透的成敗與否。因此作爲我們安全測試人員,對於深入瞭解暴力攻擊的過程及原理有着非同尋常的意義。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章