kali 滲透測試系列
信息收集
信息收集階段可以說是在整個滲透測試或者攻擊很重要的階段,畢竟知己知彼才能百戰(zhàn)百勝,否則從目標主機使用的平臺到數(shù)據(jù)庫的使用再到 web 應用開發(fā)的語言等等的種類多如繁星我們一個個的嘗試,什么時候才是一個頭。
而對于信息的收集我們主要從這樣的幾個方面來收集:
網(wǎng)站的域名相關(guān)信息
網(wǎng)站的服務器相關(guān)信息
網(wǎng)站的組件常見漏洞(如 Nginx、tomcat 等等,通過社會工程學與 Google Hacking 查找、猜測可能存在的一些問題和信息)通過信息的采集我們對我們的目標網(wǎng)站有個大體的了解,有了這樣的了解便指定了我們攻擊的方向,減少了一些無謂的工作,同樣也能夠大大的提高我們滲透的成功性。
1.網(wǎng)站的域名相關(guān)信息(因為實驗環(huán)境關(guān)閉的關(guān)系,這部分內(nèi)容無法在實驗環(huán)境中完成,同學可以在本地自己嘗試)
對一個網(wǎng)站了解的第一手信息必定是它的域名,畢竟要確定一個目標定然是訪問過目標網(wǎng)站,而訪問網(wǎng)站的最簡便方式就是通過域名了,而查看一個域名的注冊與相關(guān)的信息最常用的工具便是 whois。
whois(讀作“Who is”,非縮寫)是用來查詢域名的 IP 以及所有者等信息的傳輸協(xié)議。簡單說,whois 就是一個用來查詢域名是否已經(jīng)被注冊,以及注冊域名的詳細信息的數(shù)據(jù)庫(如域名所有人、域名注冊商)(此信息來自于百度百科)
通過 whois 工具我們可以看到相關(guān)域名的注冊單位,使用的 DNS 服務器,創(chuàng)建的時間等等的相關(guān)信息,非常的詳細。例如使用這樣的命令:
#安裝 whois
shdo apt-get install whois
whois baidu.com
通過這樣的命令我們可以得到:信息非常的多,我們主要可以從中獲取到 DNS 服務器的信息,以及域名注冊人的聯(lián)系方式等相關(guān)信息,這樣的一些信息會在后續(xù)階段發(fā)揮作用,但是現(xiàn)在的第三方域名注冊機構(gòu)大多都注意到隱私保護這一塊,所以在注冊信息部分看不到相關(guān)人員信息了。
當然若是覺得這樣只是為了查看對方的 dns 信息太過麻煩,我們還可以通過 host 工具來直接查看 DNS 相關(guān)信息
host -t ns baidu.com
當然 host 工具也不僅僅是這么簡單的功能而已,我們知道域名的記錄有這樣及個類別:
可以看出之前的 host 命令中使用的 ns 參數(shù),便是查找域名服務器記錄,舉一反三,我們同樣可以查出其他類型域名的記錄對應關(guān)系。
所以我們基本上可以通過 host 工具查出該域名下的大部分子域名以及這些子域名的對應關(guān)系。
與 host 功能類似的功能的工具還有 dig、dnsenum、dnsdict6、fierce、dmitry 等等。
例如 dig 工具:
dig baidu.com any
這樣的一些工具雖然功能很類似,但是他們的側(cè)重點不同所以各有各的優(yōu)勢,只有能夠達到我們的目的,能利用該工具搜集到我們需要的信息的便是好工具。
2.網(wǎng)站的服務器相關(guān)信息
通過端口掃描來判斷使用的服務。
在上一步我們通過相關(guān)的工具了解到目標設備的相關(guān)域名與其對應的 IP 地址,接下來我們可以利用這些 IP 地址做端口掃描,大部分的服務使用的端口都不會相同,并且人們因為懶惰在大多數(shù)情況下不會修改其默認的端口號,所以可以從端口很容易的判斷出其使用的相關(guān)組件。
例如這樣一些常用的端口號:
若是我們發(fā)現(xiàn)這樣一些端口開放著,我們基本能夠猜到目標主機大致使用的架構(gòu),各種服務的組件。而我們?nèi)绾稳ゲ榭茨繕酥鳈C開放了哪些端口呢?我們會用到一個特別強大的端口掃描工具 nmap。
nmap 是一款用于網(wǎng)絡發(fā)現(xiàn)和安全審計的網(wǎng)絡安全工具,是 Network Mapper 的簡稱。
Nmap 可以檢測目標主機是否在線、端口開放情況、偵測運行的服務類型及版本信息、偵測操作系統(tǒng)與設備類型等信息。它是網(wǎng)絡管理員必用的軟件之一。
例如我們可以通過 nmap 對目標主機進行特征抓?。ǐ@得版本、端口的相關(guān)信息)、服務識別(相關(guān)的廠商)、操作系統(tǒng)的識別(使用的 Windows 還是 Linux):
命令:nmap -sn 192.168.120.141
在攻擊一個主機之前我們當然要看它是否處于活動狀態(tài),否則后面的一切都屬于白忙活,這樣的掃描稱之為探索掃描,通過這個命令我們會得到這樣的顯示:-sn 參數(shù)通常被稱作 ping 掃描,用于發(fā)現(xiàn)目標主機,探測其是否處于開機狀態(tài)。其原理便是該命令會在局域網(wǎng)中廣播 ARP 請求,若是響應了請求的話定是處于開機狀態(tài),而反之則處于關(guān)閉的狀態(tài)。
有一些網(wǎng)絡基礎的同學會知道,在理論上我們將網(wǎng)絡分為七層,而 nmap 在使用該參數(shù)的時候處于的層次是自適應,因為當你掃描的目標地址若是局域網(wǎng)內(nèi)部的 IP 地址、同一子網(wǎng)的地址時此命令首先會在局域網(wǎng)中廣播 ARP 請求,看目標主機是否為內(nèi)網(wǎng)設備(若是學習過由淺入深學網(wǎng)絡的同學就會了解 ARP 協(xié)議是一個二層協(xié)議,用于 IP 地址與 MAC 地址之間的解析),若是內(nèi)網(wǎng)設備便會直接響應,自然便是處于二層的掃描,但若是一外網(wǎng)地址內(nèi)網(wǎng)的廣播自然不會有主機響應其請求,此時便會使用 ICMP 協(xié)議,而 ICMP 協(xié)議便是一個網(wǎng)絡層的協(xié)議,我們通常使用的 ping 命令便是使用的 ICMP 協(xié)議。而正因為使用的是 ping 命令來探知對方是否開機所以在獲得的信息中不會得到 MAC 地址。
我們可以在 kali 的 shell 中使用 ifconfig eth0 知道主機的內(nèi)網(wǎng)地址:然后在 kali 中使用同樣的方法來掃描宿主機,會發(fā)現(xiàn)結(jié)果中并沒有 MAC 地址:
# 注意你的 IP 地址可能和我的不同,請使用上個命令得到的結(jié)果
nmap -sn 192.168.120.89
注意 ip 替換為自己實際看到的 ip。若是我們通過在 kali 的 shell 中掛起或者關(guān)閉我們的靶機系統(tǒng),我們在使用同樣的命令,它會提示說目標主機似乎處于關(guān)閉的狀態(tài),因為主機沒有響應其 ARP 請求:
nmap -sn 192.168.120.141
擁有類似功能的工具還有 netdiscover,arping,scapy。他們大多都是直接針對 ARP(scapy 較為強大,可以針對網(wǎng)絡層,甚至是傳輸層的探測,但是使用起來也相對復雜一點),針對數(shù)據(jù)鏈路層發(fā)現(xiàn)主機的工具,這里便不在一一介紹,有興趣的同學可以去了解一下。
當然也有可能目標主機的防范措施做的比較好,開啟防火墻不響應 ICMP 的數(shù)據(jù)包,那么我們將針對網(wǎng)絡的第四層傳輸層進行探測,大多數(shù)的系統(tǒng)對于 TCP 或者 UDP 的請求都會給予響應。例如一個網(wǎng)站定會開發(fā) 80 端口,所以我們可以使用這個命令:
命令:nmap 192.168.120.141 -PA80 -sn
-PA 參數(shù)便是執(zhí)行針對 TCP 的 ACK 數(shù)據(jù)包進行探測,有一定網(wǎng)絡基礎的同學知道(在由淺入深學網(wǎng)絡課程中也有講到),80 端口默認情況下是用于進行 HTTP 協(xié)議,而該協(xié)議是基于 TCP 協(xié)議來進行數(shù)據(jù)傳輸,TCP 這樣的數(shù)據(jù)傳輸方式需要在服務端與客戶端之間進行三次握手來建立連接,才能傳輸數(shù)據(jù)。在三次握手時就會發(fā)送 SYN 與 ACK 數(shù)據(jù)包來表示請求建立連接與同意進行連接。
三次握手是基于 TCP 協(xié)議的服務所必然經(jīng)過的一個過程,由此建立雙向的連接,從而達到可靠傳輸?shù)哪康?,所為的三次握手便是客戶端與服務端之間的三次交互:
客戶端向服務端發(fā)送建立連接的請求數(shù)據(jù)包(SYN 數(shù)據(jù)包);
服務端收到客戶端的數(shù)據(jù)包,便會同意建立連接,發(fā)送確認數(shù)據(jù)包(ACK 數(shù)據(jù)包),同時發(fā)送服務端向客戶端的連接請求數(shù)據(jù)包(SYN);
客戶端收到服務端的請求,便回復發(fā)送確認數(shù)據(jù)包(ACK 數(shù)據(jù)包)。
這就是所謂的三次握手。
通過該命令我們可以得到這樣的結(jié)果:注意:若是你得到的結(jié)果是 shutdown,與我的不同,那是因為我們剛剛將其掛起了,需要它恢復才行。sudo virsh resume Metasploitable2
當然我們也可以不費這么大的功夫確認其是否開機,因為我們可以直接掃描看是否有開放的端口便知,這樣的掃描通常稱之為端口掃描:
namp -sS 192.168.120.141
當然若是你想查看 UDP 相關(guān)的開放端口,我們也可以使用 -sU 參數(shù),但是對于 UDP 的端口掃描十分的緩慢,大約需要 10 分鐘左右甚至更多的時間,在他定格的畫面敲擊回車可以看見其掃描的進度:
namp 192.168.120.141 -sU
因為 UDP 本身是無連接的協(xié)議,所以一個打開的 UDP 端口并不會給我們返回任何響應包,不過如果端口關(guān)閉,某些系統(tǒng)將返回PORT_UNREACH 信息。由此可以查探 UDP 的端口是否開放,因為是某些系統(tǒng)給予響應,所以這樣的探測方式也有可能出錯。這就是為什么 UDP 的掃描如此的慢,不像 TCP 開放的端口三次握手,很快就有響應數(shù)據(jù)包傳回,就可以知道端口是否開放。
在確認其處于正常的開機狀態(tài)、有開放的端口后,我們可查看其使用的操作系統(tǒng)是哪一種平臺,畢竟 Linux 與 Windows 還有 Mac 的差異化還是蠻大的,當然若是服務器的話也就是 Linux 與 Windows 了。這樣的探查通常稱之為指紋識別,我們可以使用以下這個命令:
namp -O 192.168.120.141
我們會得到這樣的一些信息:
其中 -O 參數(shù)的作用便是開啟操作系統(tǒng)的檢測,從圖中我們可以看到 nmap 掃描除了目標主機當前能夠檢測到的所有開放的端口,并且在最后提供了目標主機操作系統(tǒng)的類型與版本的猜測。
在對于操作系統(tǒng)的確認與版本信息的確認之后我們便需要對目標主機的服務識別,我們通過的 nmap -O 可以看到它只是把相關(guān)的協(xié)議的一些版本信息顯示出來,但是具體用的什么組件是有很多沒有顯示出來的,例如 80 端口上運行的 HTTP 協(xié)議,但是實現(xiàn)該協(xié)議的服務組件有很多,如 Apache、Nginx 等等這樣的組件默認都是運行在 80 端口上,還有 Tomcat、Jetty 等等這樣的 HTTP 實現(xiàn)的組件也是可以運行在 80 端口上,不同的組件出現(xiàn)的漏洞也是不同的,當然攻擊的方式也是不同的。
所以服務的識別能幫助我們進一步的縮小攻擊面,進一步的提高攻擊的成功率,使得后面的工作更加的高效。
通過這樣的一個命令,我們不僅僅能夠識別所有開放的端口,以及相關(guān)端口運行的協(xié)議,我們還可以看到實現(xiàn)相關(guān)協(xié)議所使用的組件:
nmap -sV 192.168.120.141
在圖中我們可以看到,每個端口上運行的組件我們都知道了,80 上運行的 Apache 不是 nginx,我們只需要查找 Apache 相關(guān)的漏洞,由此可以減少很多不必要的工作(例如去搜集其他組件的相關(guān)漏洞)。
若是你對獲得的操作系統(tǒng)的信息并不滿足我們可以使用 -A 參數(shù)來同時啟用操作系統(tǒng)檢測和版本檢測:
nmap -A 192.168.120.141
往上翻看我們可以發(fā)現(xiàn)這次得到信息量非常的大,不僅顯示了開放出來的端口號,同時把對應端口使用的服務以及服務使用的軟件本版信息一同顯示出來,最后給予了更加詳盡的操作系統(tǒng)版本的信息。使用 -A 參數(shù)與使用 -sV 參數(shù)都可以獲得相關(guān)服務識別的信息,但是他們的側(cè)重點不同,根據(jù)自己需要信息的重點來選擇怎樣的參數(shù)。
由此方法我們可以獲得更加詳盡的信息,我們甚至得到了運行軟件的版本信息,這樣可以再次縮小我們需要針對的范圍,甚至可以查看漏洞庫,使用攻擊手段是針對某個版本出現(xiàn)的漏洞。
例如在 Linux kernel >= 2.6.22 ,并且在 2016 年 10 月 18 日打補丁之前的版本都會遭受到 Dirty COW 的漏洞影響,若是檢測目標的操作系統(tǒng)的版本較為老舊,我們便可使用該漏洞來提權(quán)獲得目標主機的掌控權(quán)了。
而 nmap 是如何做到這樣一切的呢?在于 Nmap 最著名的功能之一:用 TCP/IP 協(xié)議棧 fingerprinting 進行遠程操作系統(tǒng)探測。Nmap 發(fā)送一系列 TCP 和 UDP 報文到遠程主機,檢查響應中的每一個比特。 在進行一打測試如 TCP ISN 采樣,TCP 選項支持和排序,IPID 采樣,和初始窗口大小檢查之后, Nmap 把結(jié)果和數(shù)據(jù)庫 nmap-os-fingerprints 中超過 1500 個已知的操作系統(tǒng)的 fingerprints 進行比較,如果有匹配,就打印出操作系統(tǒng)的詳細信息。 每個 fingerprint 包括一個自由格式的關(guān)于 OS 的描述文本, 和一個分類信息,它提供供應商名稱(如 Sun),下面的操作系統(tǒng)(如 Solaris),OS 版本(如 10), 和設備類型(通用設備,路由器,switch,游戲控制臺等)。(此段來自于nmap 官網(wǎng))
有攻擊的方法也有防范的措施,所以我們不僅需要識別服務、操作系統(tǒng),我們還需要對防火墻進行識別,我們可以通過這樣一個命令來查看對方在端口是否使用了防火墻來進行過濾:
nmap -sA 192.168.120.141
而如何做到的防火墻識別?最簡單的方法便是通過 TCP 三次握手的不同數(shù)據(jù)包得到的不同響應來判斷,是否被防火墻所過濾:通過這樣的方法從端口的狀態(tài)中得出防火墻掃描的結(jié)論,端口的狀態(tài)與類型有這樣的一些情況:
在 nmap 中還有一個非常有用的參數(shù):
nmap 非常的強大,還可以針對數(shù)據(jù)包的類型狀態(tài)來掃描目標主機,還可以同時掃描多個 IP,更甚者可以掃描整個子網(wǎng)等等的高級用法,有興趣的同學可以查看nmap 官網(wǎng)提供的手冊來學習,
nmap 的強大我們見識到了,但是 nmap 有特別多的參數(shù),用法也非常的繁多,相對來說較為的復雜,在 Kali 中我們還有一個非常強大的工具–Metasploit。
Metasploit 相對來說比 Nmap 來掃描更加的簡單,他僅僅針對有限的服務,不會每個端口都去嘗試,這樣的方式使得在識別端口上運行的服務特別的高效,并且速度更快。
使用 Metasploit 來掃描的方法很簡單,只需要簡單的幾個步驟,例如我們使用 Metasploit 來掃描 UDP 相關(guān)的端口。
啟動 Metasploit 框架比較簡單,在 Kali 的 bash 中依次執(zhí)行下面的命令即可:接著使用 use 命令來調(diào)用我們需要使用的模塊:
msf > use auxiliary/scanner/discovery/udp_sweep
調(diào)用掃描模塊然后使用 set 命令來設置使用該模塊時需要設置的參數(shù),再此之前還可以使用 show options 命令來有哪些參數(shù)可以設置,哪些參數(shù)必須要設置:
msf auxiliary(udp_sweep) > show options
通過這命令我們可以看到一個表格,其中包含所有可以設置的參數(shù),有參數(shù)的名字,有設置的值,有是否為必須設置的參數(shù),最后還有相關(guān)參數(shù)的描述
其中必須要設置,但卻沒有值的參數(shù)是 RHOSTS,該參數(shù)設置的便是我們的目標主機的 IP 地址,可以是某一個 IP 也可以是某個 IP 地址段,使用 set 命令來設置:
msf auxiliary(udp_sweep) > set RHOSTS 192.168.120.141
#若是想設置成 IP 地址段
msf auxiliary(udp_sweep) > set RHOSTS 192.168.120.1-150
設置 THREADS 參數(shù)為執(zhí)行命令的線程數(shù),設置高一點可以幫助我們提高掃描的時間最后使用 run 命令就可以自動執(zhí)行模塊了,執(zhí)行之后便會直接把結(jié)果顯示在下方,是不是很簡單,只需要四個步驟,并且我們可以看到用不了多久結(jié)果便展示出來了,端口對應的服務,使用的 UDP 版本:
這樣便比 nmap 的掃描來的高效許多。
3.網(wǎng)站的組件常見漏洞
在了解目標主機的開放端口之后我們大致能夠猜出目標主機的服務框架了,當然還有如 HTTP 服務,無論是 Apache 還是 Nginx 都是提供該服務并且都是使用的 80 端口,遇到這樣的情況我們可以通過查看其網(wǎng)站的 404 報錯頁面,亦或者是使用瀏覽器的開發(fā)者工具來查看其相關(guān)的包頭,亦或者是通過抓包的方式來知曉其實用的平臺。
在了解目標主機使用的平臺之后我們只需要通過 google 亦或者是 baidu 等搜索引擎查看相關(guān)的應用、相對應的版本所存在的漏洞,這樣的信息在后期去攻擊、滲透的時候能給予我們很多的幫助與方向。
而帶一定技巧的搜索方式不僅能提高效率,還能找到意想不到的信息,而這樣的技巧通常被稱之為 Google Hacking,這些技巧并沒有多么的困難,只是利用搜索引擎使用的參數(shù)來查找資料而已。
注意:所謂的 Google Hacking 并不是說只能使用 Google,只要是搜索引擎都可以使用,只是這名字是外國人起的,外國人更多的人使用 Google,我們當然也可以使用百度、搜狗、bing 等等其他的搜索引擎。
例如我們在搜索的關(guān)鍵字后面使用 site: 參數(shù),可以限制只在某個站點搜索我輸入的關(guān)鍵字:
如何學習滲透測試 site:www.zhihu.com
我們還可以使用 OR 參數(shù),該參數(shù)表示只要匹配其前后兩個詞的任意一個都給出結(jié)果。
注意:在搜索引擎中對內(nèi)容并不卻分大小寫,但是此處的 OR 參數(shù)需要使用大寫。
而與 site: 參數(shù)同類型的常有參數(shù)還有這樣一些:
例如使用 related 參數(shù)查看與 codecademy 類似的學習編程的網(wǎng)站:文章來源:http://www.zghlxwxcb.cn/news/detail-773440.html
related:www.codecademy.com
這只是一些非常簡單的用法,當然這個東西本身也并不是很難,但只要靈活的運用就會收到你所意想不到的信息,收集的好甚至能夠得到別人后臺數(shù)據(jù)庫的登錄用戶名、密碼(如 phpadmin)。文章來源地址http://www.zghlxwxcb.cn/news/detail-773440.html
到了這里,關(guān)于kali滲透測試系列---信息收集的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!