




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第三章Python信息收集3.1簡介3.2外圍信息收集3.3交互式信息收集習(xí)題
3.1簡介
信息收集可以根據(jù)與滲透對象是否交互分為外圍信息收集和交互式信息收集。前者一般是以滲透對象及運行在其上的各種服務(wù)為目標,使用搜索引擎、Whois信息庫、漏洞庫等來獲取信息;后者則是使用nmap、漏洞掃描器等工具對滲透對象進行探測。本章的內(nèi)容將圍繞這兩方面展開。
3.2外圍信息收集
外圍信息收集是指通過搜索引擎、漏洞庫、代碼倉庫等各種外圍公開的渠道來收集有關(guān)目標的信息。因為在外圍信息收集過程中不會與目標進行交互,所以也不會留下痕跡。通過外圍信息收集往往可以獲得大量關(guān)于目標的信息,有時甚至可以使用目標的歷史漏洞對其進行攻擊,如果幸運的話,還可以在github等代碼托管平臺上獲得關(guān)于目標的源代碼以及各種秘鑰或密碼的敏感信息。
3.2.1Whois
Whois是用來查詢域名注冊信息的傳輸協(xié)議。通過域名注冊信息可以判斷所查詢域名是否已經(jīng)被注冊,假如被注冊,還可以查看到其域名注冊時間、過期時間、注冊商、注冊商地址以及管理員的電話、郵箱、傳真等信息。這些信息為社會工程學(xué)提供了可能。
使用Whois命令或者通過Whois查詢網(wǎng)站對單個域名進行Whois查詢是有效的,但在對多個站點進行批量查詢時,其效率就比較低。在Python中可以使用ipwhois第三方庫來完成上述工作。
ipwhois模塊是一個提供了獲取和解析IPv4及IPv6地址的Whois信息的Python第三方庫。通過它可以獲得指定IP的Whois信息并將其解析為字典結(jié)構(gòu),可以通過官方文檔對其進行詳細了解(網(wǎng)址為http://ipwhois.readthedocs.io/en/latest/)。
通過下面例子,了解ipwhois對單個IP的Whois查詢過程。具體步驟如下:
(1)在終端執(zhí)行如下命令:
pipinstallipwhois
(2)新建名為whois_auto.py的文件并輸入以下代碼:
(3)運行代碼結(jié)果如下:
(4)上述代碼實現(xiàn)了對單個域名進行Whois查詢的功能。倘若需要查詢多個域名,可以先將域名寫入文件中,然后從文件中讀取并逐個查詢。修改上述代碼,添加讀取文件功能:
(5)運行結(jié)果如下:
3.2.2GoogleHacking
GHDB(Google
HackingDatabase)是一個收集了各種具有滲透用途的高級搜索語句數(shù)據(jù)庫。其大致分為十四個模塊,包括敏感文件搜索語句模塊、包含用戶名的文件搜索語句模塊、包含密碼的文件搜索語句模塊等。我們可以批量地將這些高級搜索語句作用在一個網(wǎng)站上,用于收集關(guān)于此網(wǎng)站的信息,這就是本小節(jié)腳本所要實現(xiàn)的功能。GHDB類別如圖3-1所示。
圖3-1
GHDB類別
腳本功能組成如圖3-2所示,其主要分為GHDB更新模塊和Google搜索模塊。前部分比較容易完成,但是對于Google來說,正常情況下國內(nèi)用戶是訪問不到的,這里需要使用代理,并且Google有很完善的反爬蟲機制,這就需要腳本想盡一切方法來繞過。盡管腳本總體上看起來復(fù)雜,但實質(zhì)上其只是兩個爬蟲的結(jié)合體,并且前面章節(jié)中也已經(jīng)學(xué)習(xí)過爬蟲的相關(guān)知識,本小節(jié)中結(jié)合實際用途對已介紹的知識進行鞏固和擴展。
圖3-2腳本功能組成
在編寫GHDB更新模塊時,腳本需要對其主頁進行爬取從而獲得數(shù)據(jù)。在之前介紹過的爬蟲編寫的實例中,我們往往使用requests模塊來獲得網(wǎng)頁內(nèi)容,然后對其進行解析從而獲得頁面內(nèi)容。但是這種方法并不適用于GHDB這類通過Ajax動態(tài)加載頁面內(nèi)容的網(wǎng)頁。這是因為requests模塊僅僅能夠獲得服務(wù)器原始的響應(yīng)數(shù)據(jù),但并不會像瀏覽器那樣對其中的腳本進行解析運行,為此本小節(jié)中將要介紹新的爬蟲編寫技術(shù),這種爬蟲技術(shù)需要能夠解析JS代碼并執(zhí)行。
Selenium-python是一個Web自動化測試框架,可以通過其官方主頁https://selenium-
python.readthedocs.io/對其安裝流程及使用進行了解。Selenium模塊提供了運行JS代碼的能力,為此可以應(yīng)用其對使用Ajax動態(tài)加載內(nèi)容的網(wǎng)頁進行爬取。
首先完成腳本的第一部分功能:更新GHDB數(shù)據(jù)庫。創(chuàng)建名為Gh.py的腳本文件,輸入以下代碼:
打開存儲在本地的高級搜索語句庫,會發(fā)現(xiàn)每個庫中存在很多條高級搜索語句,我們的目的是將每條語句與特定域名結(jié)合后并通過Google搜索,然后提取相應(yīng)的搜索結(jié)果。此時可以計算對Google的訪問量大概為
其中,i為所使用庫的序號,ni為序號為i的庫中的語句的數(shù)量。通過該公式計算可知訪問量巨大,這就很容易使腳本被Google識別為爬蟲。但是通過該公式我們還可以得到另外一條信息,就是如果將每頁結(jié)果數(shù)調(diào)大,則我們的訪問量會減少,每頁訪問量可以通過url中的num參數(shù)指定,本例中將其指定為100。除了盡量減小訪問量外,還需要在每次訪問時選擇隨機的代理,兩次訪問間隔不能太短并且要將其設(shè)置為隨機數(shù),每次訪問選擇隨機的Google服務(wù)端。當然,如果有條件的話可以設(shè)置隨機的代理服務(wù)器,本例中未對其進行實現(xiàn)。因為有上述條件的約束,所以代碼在執(zhí)行時非常慢,讀者可以在完成所有腳本后體驗一下。
上面的GHDB數(shù)據(jù)庫的更新很簡單,接下來完成Google內(nèi)容的爬取。按照以下步驟完成本腳本中最難的部分:
(1)在終端執(zhí)行如下命令:
(2)在importrandom后面添加:
importtime
(3)在update_ghdb()函數(shù)定義的后面添加如下代碼:
腳本中最艱難的代碼書寫完畢,讓我們一鼓作氣寫完下面代碼:
至此我們完成了整個GoogleHacking腳本的書寫。但是該腳本運行較慢,這主要是為了防止被Google阻塞。建議讀者可結(jié)合selenium庫改進該腳本。運行結(jié)果如圖3-3~圖3-6所示。
圖3-3更新GHDB圖3-4測試Google域名可否訪問圖3-5打印搜索結(jié)果圖3-6訪問受阻
3.2.3網(wǎng)絡(luò)空間搜索引擎
網(wǎng)絡(luò)空間搜索引擎類似于Google等常用的搜索引擎,不同之處在于網(wǎng)絡(luò)空間搜索引擎搜索的對象不是網(wǎng)頁等內(nèi)容,而是公網(wǎng)中各種網(wǎng)絡(luò)設(shè)備的相關(guān)信息比如各個端口信息等。
接下來以Zoomeye提供的API為例構(gòu)建一個腳本,其功能旨在獲得指定網(wǎng)絡(luò)服務(wù)端的架構(gòu)信息,比如所使用的操作系統(tǒng)版本、服務(wù)類型及版本、使用的腳本語言及版本等。具體實現(xiàn)如下:
(1)首先登錄Zoomeye并注冊帳號。
(2)打開WingIDE,輸入以下代碼并保存為zoomeye.py。所輸入代碼的第一部分如下:
(3)通過閱讀Zoomeye的開發(fā)者指南可以發(fā)現(xiàn),API以JSON格式返回數(shù)據(jù)。返回結(jié)果主要包括matches(結(jié)果集)、facets(統(tǒng)計結(jié)果集)、total(結(jié)果數(shù)量)三部分。接著鍵入以下代碼,實現(xiàn)對查詢結(jié)果信息的格式化打?。?/p>
(4)下列代碼實現(xiàn)了向Zoomeye提交數(shù)據(jù)進行查詢的關(guān)鍵功能:
(5)最后這部分代碼實現(xiàn)了對命令行參數(shù)的解析及協(xié)調(diào)各函數(shù)功能:
通過上述例子可以看出,使用Zoomeye查詢網(wǎng)絡(luò)空間中的設(shè)備是非常容易的,讀者可以試著使用Zoomeye寫出功能強大的腳本。上述腳本執(zhí)行結(jié)果如下:
3.2.4
E-mail郵箱信息收集
眾多企業(yè)及組織網(wǎng)站均建有自己的E-mail服務(wù)器,目標網(wǎng)站的E-mail信息為社會工程學(xué)提供了入口點。攻擊者可以通過向目標網(wǎng)站郵箱批量發(fā)送釣魚郵件來提高攻擊成功的概率,從而獲得有效信息。
網(wǎng)絡(luò)搜索引擎會定時地爬取網(wǎng)絡(luò)中各網(wǎng)站頁面信息,這些頁面信息中極有可能存在網(wǎng)站郵箱信息。本例將通過抓取百度搜索引擎頁面信息來獲取指定網(wǎng)站的郵箱地址。具體實現(xiàn)如下:
(1)新建名為emails.py的文件并輸入以下代碼:
(2)運行結(jié)果如→:
3.3交互式信息收集
交互式信息收集可進一步細分為主機和Web兩個方面。主機交互式信息收集往往會遵循如下過程:主機存活判斷、端口掃描、端口服務(wù)識別、操作系統(tǒng)識別。主機存活是進行后續(xù)信息獲取操作的前提,滲透者可以在端口掃描及服務(wù)識別提供的信息基礎(chǔ)上進行服務(wù)查點,進而大致規(guī)劃攻擊路線。操作系統(tǒng)識別為后期漏洞利用時payload的選擇提供了很大的幫助。
Web交互式信息收集包括路徑暴力破解、漏洞掃描等。路徑暴力破解可以使?jié)B透者了解目標網(wǎng)站結(jié)構(gòu);漏洞掃描則是通過自動化掃描工具發(fā)現(xiàn)目標網(wǎng)站存在的漏洞,當然自動化掃描工具也會存在漏報錯報的情況,這就需要滲透者進一步識別。
3.3.1主機掃描
1.主機存活
主機存活判斷是進行后續(xù)掃描的前提,其最常用的也是最簡單的方法就是通過先發(fā)送ICMPECHO包,然后判斷是否有應(yīng)答包來確定。除此之外,我們知道當訪問一臺主機中處于關(guān)閉狀態(tài)的UDP端口時,大部分存活主機會返回“Type:3,Code:3”的ICMP報文,這表示目標不可達,因此只需要向目標主機中不常用的UDP端口發(fā)送一個UDP報文即可(誤差是存在的,但是可接受的)。
通過ICMP報文進行主機存活判斷的實現(xiàn)僅需要如下幾條語句:
2.端口掃描
TCP通過三次握手建立連接,據(jù)此可以設(shè)計出TCP端口掃描器。TCP狀態(tài)轉(zhuǎn)移圖如圖3-7所示。具體的TCP掃描器技術(shù)包括TCP連接掃描、SYN掃描、FIN掃描和窗口掃描等。下面詳細介紹前三種掃描器技術(shù)的實現(xiàn)。
圖3-7
TCP協(xié)議狀態(tài)轉(zhuǎn)移圖
1)
TCP連接掃描
TCP連接掃描是與目標機器的指定端口建立完整的TCP連接,首先向指定端口發(fā)一個標志位為'S'的TCP數(shù)據(jù)包,此時如果端口開放則會返回標志位為?'SA',再向端口發(fā)送一個標志位為?'A'?的數(shù)據(jù)包則連接建立,其過程如圖3-8所示。倘若端口沒有開放則在發(fā)送完標志位為?'S'?的數(shù)據(jù)包后,目標端口會返回標志位為'R'的數(shù)據(jù)包,其過程如圖3-9所示。TCP連接掃描技術(shù)的優(yōu)點是精度高;缺點是會留下連接痕跡,并且運行速度慢。
圖3-8端口開放時的連接過程圖3-9端口關(guān)閉時的連接過程
2)
SYN掃描
SYN掃描也稱為半開放掃描或stealth掃描,其原理和TCP連接掃描相似。SYN掃描,首先向端口發(fā)一個標志位為'S'的TCP數(shù)據(jù)包,此時如果端口開放則會返回標志位為'SA'的數(shù)據(jù)包,再向端口發(fā)送一個標志位為?'R'?的數(shù)據(jù)包中斷連接,其過程如圖3-10所示。倘若端口沒有開放則在發(fā)送完標志位為?'S'?的數(shù)據(jù)包后,目標端口會返回標志位為'R'的數(shù)據(jù)包。相對于其他掃描方法,SYN掃描技術(shù)的優(yōu)點是,掃描精度高,運行速度適中,并且安全性高。
圖3-10端口開啟時的連接過程
3)
FIN掃描
FIN掃描是通過向目標主機的指定端口發(fā)送標志位為'F'的數(shù)據(jù)包,倘若主機指定端口開啟則不會收到回應(yīng)包,據(jù)此可以判斷端口開啟。倘若主機指定端口返回了標志位為'R'的數(shù)據(jù)包則表示端口沒有開啟,其過程如圖3-11所示。
圖3-11端口關(guān)閉時連接過程
3.操作系統(tǒng)識別
操作系統(tǒng)的簡單識別可以通過判斷數(shù)據(jù)包中IP層的TTL值來實現(xiàn),各操作系統(tǒng)默認TTL如表3-1所示,但是數(shù)據(jù)包每經(jīng)過一個路由或者主機TTL就減小1,且目前正常網(wǎng)絡(luò)環(huán)境下網(wǎng)絡(luò)中一臺主機到另一臺主機不會超過20跳,所以僅需要判斷接收到的數(shù)據(jù)包IP層的TTL字段與表3-1中哪個系統(tǒng)默認的TTL更接近,即可判斷系統(tǒng)類型。
我們?yōu)檫@個腳本設(shè)置主機(-h--host)及端口(-p--port)兩個參數(shù),前者傳入待掃描目標主機的域名或者IP段(格式為-255);后者傳入可以為單個端口值或者一個端口范圍(格式為80-443)。
(1)新建命名為scan.py的腳本文件,因為設(shè)置的參數(shù)比較簡單,所以不使用argparse模塊來解析參數(shù),而是使用相對輕量級的getopt來解析參數(shù)。
(2)到此為止,腳本已經(jīng)獲得了傳入的參數(shù),接下來完成腳本其他的部分。因為系統(tǒng)識別及端口掃描只有在主機存活的情況下才有意義,所以將這兩項功能在主機存活判斷的回調(diào)函數(shù)中實現(xiàn)。
(3)至此腳本編寫完成,將其保存為scan.py并在終端運行,結(jié)果如下:
3.3.2
Python與nmap
上小節(jié)中我們實現(xiàn)了一個非常簡單的掃描器,通過掃描器的實現(xiàn)原理來看,這個掃描器的掃描精度是很低的。高精度的主機端口掃描和主機操作系統(tǒng)識別需要構(gòu)造多種特征的數(shù)據(jù)包,并對返回包的特征進行匹配,這需要強大的特征數(shù)據(jù)庫支撐,實現(xiàn)起來比較困難。值得慶幸得是,Kali提供了一款高精度掃描的神器nmap,通過它可以對目標機器進行準確掃描,不過存在的問題是沒有辦法對其大量的掃描結(jié)果進行隨心所欲的分析。
幸運的是存在libnmap這個第三方模塊,通過這個模塊可以在Python中調(diào)用nmap進行掃描,并可以對掃描結(jié)果按照需求進行分析。本小節(jié)中將要使用libnmap模塊實現(xiàn)一個簡易nmap掃描結(jié)果分析器,該分析器接收XML格式的nmap掃描結(jié)果文件,然后對掃描結(jié)果進行分析,以實現(xiàn)獲得網(wǎng)絡(luò)環(huán)境概況(包括掃描的主機總數(shù)、存活主機數(shù)量、未存活主機數(shù)量、主機系統(tǒng)使用情況、端口開放情況)、獲得指定操作系統(tǒng)主機信息、獲得開放指定端口主機信息三方面的功能。
接下來構(gòu)造腳本的第一部分即參數(shù)解析,具體參數(shù)及功能如表3-2所示。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 三農(nóng)村電商農(nóng)業(yè)信息化解決方案
- 深路塹施工方案
- 隧道洞口開挖施工方案
- 股份制重組解決方案公告
- 藝術(shù)涂料防腐施工方案
- 云計算資源規(guī)劃與分配手冊
- 幼兒園股份合同轉(zhuǎn)讓協(xié)議
- 武昌醫(yī)院東區(qū)施工方案
- 廠房獨立基礎(chǔ)施工方案
- 基坑監(jiān)測施工方案
- 留守兒童風(fēng)險評估表
- LNG生產(chǎn)操作規(guī)程要點
- 教學(xué)能力大賽決賽獲獎-教學(xué)實施報告-(完整圖文版)
- 景德鎮(zhèn)物業(yè)管理服務(wù)收費管理實施細則
- 完整戶口本英文翻譯模板(共4頁)
- 高二通用技術(shù)-經(jīng)典結(jié)構(gòu)的欣賞課件說課講解
- 數(shù)獨入門技巧宮摒除法使用
- 使用深埋錨改善橋梁墩柱預(yù)應(yīng)力施工效果
- 客房培訓(xùn)ppt課件
- UCP600中英文對照版
- 9月份WC50Y支架搬運車的維護與保養(yǎng)
評論
0/150
提交評論