Bash Shell 指令碼編寫是提升滲透測試效率的關鍵技能。它能自動化繁瑣任務,讓測試人員專注於更核心的安全分析。本文從建置實驗室環境開始,逐步介紹 Bash 的基礎語法、常用命令以及在滲透測試中的實務應用。涵蓋了網路掃描、密碼破解、資料格式化、日誌分析等常見場景,並提供程式碼範例與詳細解說。此外,文章也探討瞭如何透過 Bash 指令碼提升測試效率,例如使用迴圈迭代處理大量資料、利用正規表示式精確比對目標資訊等。同時,也比較了虛擬機器(如 VirtualBox、VMware)和 Docker 容器等不同實驗室環境的優缺點,讓讀者能根據自身需求選擇合適的環境。最後,文章也強調了合法合規的重要性,提醒讀者在進行滲透測試時應遵守相關法律規範。

進階Bash Shell指令碼編寫:滲透測試的利器

在這個部分,我們將專注於針對滲透測試(Penetration Testing, Pentesting)的Bash指令碼編寫,從建立穩固的指令碼環境開始,並逐步深入到檔案與目錄管理技術。接著,我們將掌握基本的程式設計概念,如變數、條件判斷、迴圈和陣列,並進一步探討正規表示式的模式比對技術。這些技巧對於解析安全工具輸出至關重要。接下來,我們會學習如何建立函式並組織指令碼,確保能夠開發出易於維護的專業級安全工具。在網路基礎方面,我們將學習Bash如何與網路服務和協定互動。最後,我們會研究平行處理技術,使得可以同時處理多項任務。這對於大規模的安全評估非常重要。到本部分結束時,你將掌握所有必要的基本技能,開始編寫複雜且專業的安全相關Bash指令碼。

第一章:Bash命令列與滲透測試環境

在這個基礎章節中,玄貓將引導你進入Bash Shell指令碼編寫的世界。你將瞭解Bash是什麼、為什麼它對滲透測試(Pentesting)至關重要,以及如何設定你的指令碼編寫環境。透過實際操作範例和解釋,你將為成為熟練的Bash指令碼編寫者奠定基礎。

BASH:更勝於命令直譯器

Bash不僅僅是一個命令直譯器——它是自動化複雜且繁瑣任務的強大工具。對於未經訓練的人來說,Bash可能看起來笨重、過於複雜且不舒服。然而,對於那些能夠看到其益處並投入時間學習其細節的人來說,它是一把手術刀,可以像外科醫生般精確地切割資料並自動化滲透測試方法論。

在這一章中,我們將涵蓋以下主要主題:

  • Bash介紹
  • 實驗室設定
  • 組態你的駭客Shell
  • 安裝必要的滲透測試工具
技術需求

要跟隨本章節中的練習操作,你需要一個Linux環境。這本文假設你有足夠的技能來安裝作業系統並熟悉虛擬機器環境的安裝和組態。如果你需要幫助設定實驗室環境,VirtualBox線上手冊(Oracle VM VirtualBox使用手冊)和幾個YouTube影片(VirtualBox – YouTube)會很有幫助。

這圖示展示了從下載到執行Kali Linux虛擬機器所需的步驟。

  graph TD;
    A[下載Kali Linux] --> B[安裝VirtualBox];
    B --> C[建立新虛擬機器];
    C --> D[組態虛擬機器];
    D --> E[啟動Kali Linux];
    E --> F[完成初始設定];
此圖示說明瞭從下載到啟動Kali Linux虛擬機器所需的步驟:
  1. 下載Kali Linux:從官方網站下載最新版本。
  2. 安裝VirtualBox:確保已經安裝了VirtualBox軟體。
  3. 建立新虛擬機器:在VirtualBox中建立新虛擬機器並選擇Kali Linux作為作業系統。
  4. 組態虛擬機器:分配必要的資源(如CPU、記憶體和硬碟空間)。
  5. 啟動Kali Linux:啟動虛擬機器並完成初始設定。

Bash介紹

Bash(Bourne Again Shell),又稱為「Bourne再生Shell」,是一個命令列Shell直譯器和指令碼語言。由Brian Fox在1989年建立,作為免費軟體替代原先專有軟體的Bourne Shell。Bash是最常見的Linux Shell之一。它引入了將多個命令組合成Shell指令碼的功能。

當你在Linux系統上開啟終端機並輸入命令時,Bash Shell負責管理與作業系統及執行可執行檔和指令碼之間的互動。Bash 和 Linux可執行檔形成共生關係,彼此增強功能和效率。

組態環境與工具

組態Bash學習環境有多種免費方式。所有範例都使用Kali Linux進行說明。然而,任何Linux或macOS環境都適用。

「Kali Linux是一個開源、根據Debian的Linux發行版,針對各種資訊安全任務設計,如滲透測試、安全研究、電腦取證和反向工程。」

強烈建議使用新鮮的Kali Linux虛擬機器來跟隨練習或進行滲透測試。在書中和滲透測試過程中,你會安裝大量工具及其依賴專案。常見的是工具依賴專案衝突造成所謂「依賴地獄」。如果沒有正確隔離安裝工具,可能會損害主系統或風險感染惡意軟體。

此圖示展示了不同取得Kali Linux方式的流程圖:

  graph TD;
    A[取得Kali Linux] --> B[下載安裝映像];
    A --> C[使用虛擬機器];
    A --> D[雲端映像];
    A --> E[Windows Subsystem for Linux WSL];
此圖示說明瞭不同方式取得Kali Linux:
  1. 下載安裝映像:從官方網站下載安裝映像。
  2. 使用虛擬機器:使用VirtualBox或VMware等工具建立Kali Linux虛擬機器。
  3. 雲端映像:從雲端服務提供商(如AWS、Azure)取得Kali Linux映像。
  4. Windows Subsystem for Linux (WSL):在Windows系統上啟用WSL並安裝Kali Linux。

在完整了解了主題後, 玄貓希望大家能夠掌握基本功, 接著更深入地探索其他功能與應用場景。

Bash 入門

Bash(Bourne Again SHell)是一種強大的命令列解譯器,廣泛應用於 Linux 和 Unix 系統中。它不僅能夠執行命令,還提供了許多強大的功能來提高使用者的生產力。以下是 Bash 的一些主要特性:

  • 命令執行與引數:可以執行二進位制檔案、內建 shell 命令和指令碼。
  • 命令自動補全:按下 Tab 鍵後,Bash 會自動補全部分輸入的命令或檔案名稱。
  • 命令歷史紀錄:允許快速重用之前輸入過的命令。
  • 工作控制:可以將命令送到背景執行或將其帶到前景。
  • Shell 函式與別名:函式可以將相關的程式碼群組在一個名稱下,需要時呼叫。別名則允許使用者將複雜的命令縮短為單一名稱。
  • 陣列:可以儲存元素並在需要時取出和處理。
  • 命令與括號展開:命令展開使用一個命令的結果作為另一個命令的輸入。括號展開則允許生成字串。
  • 管線與重導向:一個命令的輸出可以作為另一個命令的輸入。
  • 環境變數:動態值被分配給名稱標籤,常用於表示系統組態或儲存環境資訊。
  • 檔案系統導航:Bash 提供了變更目錄、顯示當前目錄以及查詢檔案和目錄的命令。
  • 說明檔案man 命令(手冊)提供使用者有關如何執行命令的資訊和範例。

Bash 指令碼在測試中的應用

Bash 指令碼在測試過程中扮演著至關重要的角色。無論是開發應用程式還是進行測試,Bash 都能夠協助自動化各種任務。以下是一些常見的應用場景:

  1. 自動化網路掃描:處理 Masscan 的掃描結果並將其輸入到 Nmap 中進行深入服務檢測和指令碼掃描。
  2. 密碼破解:使用 Bash 指令碼進行複雜的密碼破解功能,如破解 Microsoft LM 和 NTLM hash 並格式化 Hashcat 的輸出以供報告工具使用。
  3. 文字搜尋:在文字中搜尋 IP 地址或其他詳細資訊。
  4. 範圍自動化:使用 Bash 指令碼確保子網域名稱列舉工具發現的子網域名稱符合測試規範。
  5. 資料格式化:解析並重新格式化 Nuclei 檢查結果以列舉子網域名稱和網頁應用程式從 TLS 憑證並格式化資料以繞過內容傳遞網路(CDNs)來繞過網頁應用程式防火牆(WAF)直接掃描目標。
  6. Nmap 報告搜尋與排序:在掃描數百或數千個 IP 地址後,使用 Bash 解析 gnmap 檔案以建立包含按 TCP 或 UDP 排序目標的文字檔案,以便進行更精確的掃描。例如,所有 SMB 和 HTTP 伺服器的 IP 地址被分離出來並放置在 smb.txt 和 http.txt 檔案中。
  7. 資料排序與去重:將唯一 IP 地址排序並去重至一個檔案中。
  8. 資料轉換:將姓名轉換為各種格式以進行密碼噴洩。如果能透過開放原始碼情報技術(OSINT)獲得員工名單,就會檢視任何可能提示如何格式化他們的 Active Directory 名稱,如 f.last 或 first.last,並使用 Bash 進行適當的格式化。

語法說明:抓取網頁

#!/bin/bash
# 處理 JSON 資料
url="http://example.com/data.json"
data=$(curl -s "$url")
echo "$data" | jq '.items[].name'
內容解密:

上述指令碼展示瞭如何從 URL 下載 JSON 資料並提取其中指定欄位的值。以下是各行程式碼的詳細解說:

  1. #!/bin/bash:這行稱為 Shebang,告訴系統這個指令碼應該使用 Bash 來執行。
  2. url="http://example.com/data.json":定義一個變數 url,儲存要抓取的 JSON 資料URL地址。
  3. data=$(curl -s "$url"):使用 curl 命令抓取 URL 指定的資料,-s 引數表示安靜模式(不顯示進度條),並將結果儲存在變數 data 中。
  4. echo "$data" | jq '.items[].name':使用 jq 工具處理 JSON 資料,.items[].name 指定要提取的是 items 欄位中的所有 name 值。

其他應用

除了上述應用之外,Bash 還可以用於其他許多工,如資料篩選、迭代處理等。例如:

  • 資料篩選:從工具輸出日誌中移除終端機顏色程式碼以便於報告。因為忘記包含不顯示顏色的命令列旗標或工具可能不支援這個選項,這樣做可以避免在顧客報告中包含混淆讀者理解的顏色程式碼。

  • 迭代處理:使用 Bash 的 forwhile 迴圈來遍歷檔案中的每一行並執行相應的命令。例如,當需要使用一次只能處理單一目標的工具時。

效能提升

Bash 的強大功能使得它成為測試人員必備的一部分工具。無論是在自動化網路掃描、密碼破解還是資料處理方面,Bash 都能夠提供高效且靈活的解決方案。

語法說明:迭代處理

#!/bin/bash
# 迭代處理每一行
file="targets.txt"
while IFS= read -r line; do
    # 對每一行進行操作
    echo "Processing $line"
    # 假設有一個 ping 命令要對每一個 IP 進行操作
    ping -c 1 "$line"
done < "$file"
內容解密:

這段指令碼展示瞭如何迭代處理每一行內容。以下是各行程式碼的詳細解說:

  1. #!/bin/bash:這行稱為 Shebang,告訴系統這個指令碼應該使用 Bash 來執行。
  2. file="targets.txt":定義一個變數 file 儲存要處理檔名稱(假設為 targets.txt)。
  3. while IFS= read -r line; do ... done < "$file":這是一個 while 陳述式結構,從 $file 中讀取每一行並儲存在變數 line 中。
  4. IFS=:內部域分隔符(Internal Field Separator),用於分隔欄位時避免修改空白字元(空白、Tab)。
  5. -r:避免反斜槓跳脫字元(例如 \n)。
  6. echo "Processing $line":輸出正在處理當前行內容。

這樣 BASH 指令碼就可以用來快速地對每一個 IP 地址進行網路操作。

Mermaid 流程圖

此圖示展示了從 JSON 資料抓取並提取指定欄位值的一個簡單流程:

  graph TD
    C[C]
    D[D]
    E[E]
    A[開始] --> B[設定 URL]
    B --> C{抓取 JSON 資料}
    C --> D{成功}
    C --> E{失敗}
    D --> F[解析 JSON 資料]
    F --> G[提取 .items.name 值]
    G --> H[結束]

在此圖示中,首先設定要抓取 JSON 資料的 URL ,然後嘗試抓取該 JSON 資料。如果成功抓取到資料則繼續解析該 JSON 資料並在最後提取 .items[].name 值;若抓取失敗則直接結束流程。

請注意:

請遵守法律規範及隱私政策來進行合法安全測試活動!未經授權進行網路攻擊或資訊收集等活動是違法且不道德之行為!請確保您有相關授權及合規才能執行任何測試操作!

實驗室設定與 Bash 指令碼自動化

學習 Bash 指令碼編寫無疑能提升你的工作效率,讓你能夠自動化那些耗時且單調的任務。這樣你就能釋放出更多時間來專注於更重要的事情,例如學習或研究,而不再浪費時間在手動操作上。現在,讓我們來探討如何設定一個安全的實驗室環境,讓你能夠在這裡安全地學習並跟隨演練。

虛擬機器設定

Bash 雖然不是唯一的 Shell 直譯器,但在 Linux 和 Unix 系統中是最常見的。其他的 Shell 如 Zsh 在 macOS 和 Kali Linux 上也很常見。那麼,為什麼這本文選擇專注於 Bash 呢?雖然 macOS 和 Kali 已經將 Zsh 作為新使用者帳戶的預設 Shell,但它們仍然安裝了 Bash。大部分為 Bash 寫的程式碼在 Zsh 上也能執行,只需要做一些小改動。你可以在指令碼中包含 shebang 行來確保它在多個 Shell 安裝的系統上使用 Bash 直譯器執行。

在進行安全評估時,你很可能會遇到以 Bash 作為預設 Shell 的 Linux 伺服器。因此,瞭解如何與 Bash 互動對於測試人員來說是至關重要的,因為這能幫助他們利用應用程式、提升許可權和橫向移動。

虛擬機器選項

有很多方式可以免費取得 Bash Shell,接下來我們來探討一些理想的設定方法,讓你可以跟隨學習如何使用 Bash 進行測試。我們也會探討一些易受攻擊的實驗室環境,讓你可以安全地練習使用 Bash 和測試工具。

虛擬機器是最推薦的方式,它們提供了一個方便的沙盒環境,讓你可以快速重新整理或替換測試環境。我選擇在所有演示中使用 Kali Linux,這樣可以避免在日常使用的系統上安裝測試工具和惡意程式碼。Kali 提供了簡單的方法來安裝所需的測試軟體包。

虛擬機器選項

有許多免費和付費的虛擬化解決方案可供選擇:

  • Oracle VirtualBox:這是一個免費的 x86 虛擬化超管軟體,適用於 Windows、macOS(Intel 處理器)和 Linux。VirtualBox 易於使用,適合初學者和專業人士。它支援多種客戶端作業系統,並提供快照、無縫模式和分享資料夾等功能。
  • VMware:VMware 提供了一個免費版本稱為 VMware Workstation Player,適用於非商業用途。它與 Windows 和 Linux 主機相容。Workstation Player 易於使用並支援 VMware 的 VMDK 虛擬磁碟格式,同時也與其他 VMware 產品建立的虛擬機器相容。
  • Microsoft Hyper-V:Hyper-V 是免費的,適用於 Windows 10 Pro、企業版和教育版。雖然它在伺服器環境中更常見,但也可以用於 Microsoft Windows 主機上的桌面虛擬化。
  • T.me/nettrain 注意:macOS 使用者如果使用的是 Apple CPU ,則有 UTM、Parallels 和 VMWare Fusion 三種選項可供選擇。

Docker Container

Docker Container 提供了一個比虛擬機器更輕量級的選項。Docker 提供了一個適用於 Windows、Linux 和 macOS 的執行時環境。容器比傳統虛擬機器更輕量級且高效率地執行在低端硬體上,因為它們分享主機核心而不需要像傳統超管軟體那樣虛擬化硬體。

由於 Docker 使用主機核心,你只能執行與主機相同作業系統的容器。Docker Desktop 是一個替代方案,它使用虛擬機器執行不同作業系統的容器。

根據玄貓多年經驗(強制移除),以下是使用 Docker 的優缺點考量:

  • 優點:Docker 比傳統超管軟體更輕量級並適合硬體資源有限的情況下使用。
  • 缺點:如果要執行不同作業系統下的容器時需要使用 Docker Desktop。

總結來說,我們推薦至少為執行 Kali Linux 的虛擬機器組態 4 GB 的 RAM 和 40 GB 的磁碟空間。不過 Docker Container 提供了一個更靈活且資源效率更高的替代方案。