當前位置:
首頁 > 最新 > Python網安基礎:編寫一個埠掃描器

Python網安基礎:編寫一個埠掃描器

Python全棧編程應用實戰,不容錯過

最近有同學問我,說想用Python寫滲透輔助工具,但是卻不知道該如何下手,該怎麼辦。其實,細化滲透測試的過程,把其中的一些使用其他工具完成的步驟,嘗試著使用Python來代替就差不多能夠達到他的目標。

所以今天填一個坑,用Python來實現滲透測試過程中的埠掃描。


1、什麼是埠

接觸過網路技術的同學大概都知道埠是什麼東西,沒有接觸過的同學,經過下面的簡單介紹應該也能明白埠是個什麼東西。

在網路上我們會使用到各種各樣的服務(當然不是各種各樣的網站,網站所提供的多是Web服務),比如瀏覽網站,發送郵件,使用FTP下載某些資源,使用SSH或Telnet連接遠程伺服器等。這些服務有可能都是由同一個伺服器提供的。

同一個伺服器上提供那麼多服務,怎麼對他們進行區分呢?埠就是用來對他們進行區分和唯一標識的,每一個服務都使用不同的埠,就像一棟樓裡面的不同房間一樣。

我們常見的網站Web服務默認使用的是80埠:

GIF

用來上傳和下載文件的FTP使用的是21埠:

我們通過域名或IP地址找到對應的伺服器,然後再通過埠號,找到對應的服務。

有需要更加詳細的介紹的同學,可以查看各種百科:https://baike.baidu.com/item/%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF%E5%8F%A3/718781?fr=aladdin


我們知道伺服器的埠之上運行著對應的服務,而服務都有其版本。我們對伺服器進行埠掃描,有兩個目的:

一是要確定伺服器上開啟了哪些服務;

二是要確定開啟的服務使用的是什麼版本的服務。

這兩個目的都是為了縮小行動的範圍,提高行動的效率和準確性。例如我們知道了某個主機開啟了80埠,那麼其就很有可能提供了Web服務,我們就可以進一步通過其Web服務使用的語言(比如PHP)和框架(比如WordPress)以及框架的版本(比如4.8.2)去尋找相應的漏洞:

又比如我們經常使用SSH來遠程登錄伺服器,其默認運行於22埠之上,如果我們掃描到了伺服器開啟了這個埠,那麼伺服器很有可能開啟了遠程連接的功能,如果我們獲取ssh的banner得到其服務版本正好是一個存在安全漏洞的版本,那麼就有了一個新的測試攻擊點:


那麼我們如何使用Python進行埠的識別和掃描呢?

在Python中,有一個內置模塊——socket提供了網路socket的操作,其中包含了如下函數來支持socket連接的具體功能實現:

我們可以通過這個模塊的socket()函數創建一個socket對象來連接伺服器的指定埠,比如下列代碼所示:

上述代碼我們就通過socket模塊的socket()函數建立了對192.168.223.152這個IP地址22埠的socket連接,然後進行了連接的關閉。

當然,連接成功是不可能的,這樣做一輩子都不可能連接成功。運行這段代碼甚至連輸出的信息都不會有:

如何得到socket連接的輸出信息呢?socket對象中的一個方法——recv()或許可以幫到我們:

仔細看看這個方法的說明:

它的作用是從socket連接中返回指定大小的位元組,我們繼續測試一下這個方法:

在此我們測試的IP地址是一個內網主機的IP地址,我們使用的是著名的滲透測試框架Metasploit提供的靶機虛擬機Metasploitable2來作為目標主機,這是一個容易受到攻擊的Linux虛擬機。這個虛擬機可以用來進行安全培訓,測試安全工具,並練習常用的滲透測試技術。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

pyt:檢測 Python Web 應用安全漏洞的靜態掃描工具;DoxyCannon:ip隱藏
學了Python以後,我幹了很多不是人乾的活

TAG:Python |