一個滲透測試的流程,可以簡略的分成兩大階段,資訊蒐集與漏洞利用。而資訊蒐集階段則又可以分為偵查與掃描;而漏洞利用則又可以分為普通的漏洞利用與提權,這邊來與各位介紹一下這幾個階段分別具體需要實作的事情有哪些。
偵查
當我們獲取了一個目標,剛開始,我們會需要嘗試著蒐集各種與目標相關的公開情報。以公司來說,我們可以透過各種的搜尋引擎獲取機構的部分資料,例如人士、Email、電話等。很多時候這些資料對於後續的攻擊流程會有很大的幫助。
接下來我們可以試圖了解我們攻擊目標相關的資料,例如使用的作業系統版本,伺服器版本等,假設是一個指定網段的資料蒐集,除了自行的動手掃描之外,我們也可以藉由許多開放資料的平台,例如 Shodan 、 ZoomEye 等。
通常在做偵查的階段,我們也會同時的進行掃描的動作,偵查與掃描主要是為了可以讓我們更進一步的了解我們的目標,確立可以攻擊的弱點等。
掃描
在進行了一系列的偵查之後,我們就可以開始嘗試著對攻擊的目標進行資訊的掃描。通常面對一台伺服器,我們的起手式會是對端口(Port) 進行掃描,目的是觀察伺服器有開了哪一些的服務,在這邊,通常我會使用的工具是 nmap
與 rustscan
等。
如果是網頁伺服器,通常可以對網頁的目錄進行掃描,這邊常見的工具有 dirsearch
、 dirb
、 gobuster
等;部分掃描路徑的工具,也具有掃描 Sub-domain 的功能,例如 gobuster
與 ffuf
等,我們也可以觀察瀏覽器中的 header 等資訊,或是透過 Wappalyzer
工具進行分析。
偵查與掃描通常不會一次就全部的完成,例如我們掃描到了某個 Port 號,開啟了一個網頁伺服器,則可能會再透過人工方式對於這個網頁伺服器進行一些偵查的工作;而偵查完畢後,則可能更換下一個 Port 號開啟的服務進行進一步的偵查與掃描。
尋找漏洞
待我們在偵查與掃描獲得了各種的資訊,就可以試著尋找網路上對於該版本的作業系統、伺服器軟體是否有公開的弱點 (CVE),如果有相關弱點的話,是否有可以進行漏洞利用(Exploti)的腳本,在這邊,通常我會直接在 Google 上搜尋 {服務版本} Exploit
,除此之外,也可以透過 exploit-db
、 searchsploit
以及 Github 等方式查找相關的利用方式。
很多時候,我們查找到了某些的漏洞,卻不一定可以馬上地進行使用。舉例來說,我們發現了某個 CMS 在相應版本中的漏洞,而它的使用條件是需要先進行登入,在這種條件下,我們可以先暫存著相關的資訊,以備不時之需,並試圖尋找與開發其他漏洞。
漏洞利用
尋找完相關的 Exploit 腳本後,我們就可以試著執行這些腳本,達到漏洞利用的效果。很多時候,我們也可能需要串接多個不同的漏洞,才能達到遠端命令執行 (RCE)。
當然在大多數情況下,我們不一定有辦法尋找到相對應版本的漏洞進行利用,這種時候就需要透過人工對各個目標進行測試。這種情境下就會比較類似 CTF 的思路,以網頁為例,通常就會以 OWASP Top 10 上常出現的漏洞開始下手進行測試。而 Binary 的 Protocol 則有可能會需要使用到 CTF 中, pwn 的相關技術,進行 Binary Exploitation 利用 Buffer Overflow 等。
滲透測試還有一種與 CTF 不太一樣的攻擊方式:暴力破解,暴力破解是一種非常廢的攻擊方式,常常被厲害的駭客們看不起。現實生活中,使用弱密碼的機率真的是非常高,無論是台灣人愛用的注音密碼、使用英文名字、生日等資訊構成的密碼、或是依照鍵盤順序輸入的一段文字。此時我們就可以藉由先前偵查階段獲得的 Email / 帳號名稱等資訊建構目標專屬的密碼字典檔,進行暴力破解。在此要注意,許多的系統都會對於密碼輸入錯誤有次數的限制。因此在暴力破解階段,最好先設法取得密碼的 hash 值,再於本地端進行暴力破解。
將近所有的資訊安全問題,都是來自於人的操作疏失。除了已知漏洞、自行挖掘漏洞與暴力破解之外,我們也可以試圖觀察一些常見的服務設定是否有疏失。例如 FTP 或 SMB 等服務是否有開啟匿名 (Anonymous) 登入。如果有開啟的話,我們也可以試圖對其進行連線,觀察是否有有用的資料,可以進一步的利用。
提升權限
提升權限我覺得是滲透測試當中,最特別也最有趣的一個階段,通常我們可以把它視為後滲透階段 (post-penetration)。在這個階段中,我們假設已經對於一個伺服器取得了 RCE,可以任意執行指令。以 Linux 作業系統的 Web Server 為例,我們很可能只具有 www-data
使用者的權限,而提升權限則是試著可以將自己提升為高階的使用者或 root
, Windows 作業系統上稱為 system
權限。
在這個時候,我們不一定可以直接地從 www-data
成為 root
, 但可能有機會先橫向的在機器中移動到其他的高階使用者,再更進一步地進行利用。通常,提升權限的方式有兩種,第一種是基於伺服器管理者的設定缺失,例如可以透過 sudo
執行特定的指令、將特定的程式設有 suid
、透過高階使用者權限執行低階使用者可以修改的 crontab job 等;第二種則為系統上,程式的漏洞,例如今年超有名的 CVE-2021-3156
等。
提權階段我們又會需要重新地進行一輪的偵查、掃描與漏洞利用,在這邊也有許多的工具可以進行使用,例如 PEAS 、 LinEnum 、 LSE 等,詳細的使用方法將於之後的文章再與各位進行介紹。
後面的文章
因為後面的文章其實就是 THM 跟 HTB 的 Writeup,在 Blog 上會放在其他分類,就不重複ㄌ