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
2、掃描埠與埠服務
2.1、目的與原因
我們知道伺服器的埠之上運行著對應的服務,而服務都有其版本。我們對伺服器進行埠掃描,有兩個目的:
一是要確定伺服器上開啟了哪些服務;
二是要確定開啟的服務使用的是什麼版本的服務。
這兩個目的都是為了縮小行動的範圍,提高行動的效率和準確性。例如我們知道了某個主機開啟了80埠,那麼其就很有可能提供了Web服務,我們就可以進一步通過其Web服務使用的語言(比如PHP)和框架(比如WordPress)以及框架的版本(比如4.8.2)去尋找相應的漏洞:
又比如我們經常使用SSH來遠程登錄伺服器,其默認運行於22埠之上,如果我們掃描到了伺服器開啟了這個埠,那麼伺服器很有可能開啟了遠程連接的功能,如果我們獲取ssh的banner得到其服務版本正好是一個存在安全漏洞的版本,那麼就有了一個新的測試攻擊點:
2.2、Python實現
那麼我們如何使用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虛擬機。這個虛擬機可以用來進行安全培訓,測試安全工具,並練習常用的滲透測試技術。
※pyt:檢測 Python Web 應用安全漏洞的靜態掃描工具;DoxyCannon:ip隱藏
※學了Python以後,我幹了很多不是人乾的活
TAG:Python |