在資安測試領域,效率和效能至關重要。Bash 作為強大的命令列工具,結合平行處理技術,能顯著提升測試效率。本文將探討如何運用 GNU Parallel 和 xargs 等工具,在 Bash 環境下執行平行化的資安測試,包括網路掃描、SQL 注入測試和服務列舉等。同時,文章也將探討資訊收集與偵察的關鍵性,並結合 OSINT 方法,展示如何取得關鍵資訊,以提升測試的有效性。文章中提供的程式碼範例,將協助讀者理解如何實際應用這些技術,並根據自身需求調整引數和指令。此外,文章也強調了在進行資安測試時,必須遵守相關法律和道德規範,確保測試的合法性和安全性。

BASH 平行處理在測試中的實際應用

在這一部分,玄貓將透過具體案例展示BASH平行處理在測試中的實際應用。首先,我們將使用GNU parallel來進行SQL注入測試。

使用GNU parallel進行SQL注入測試

以下是玄貓設計的BASH指令碼,其使用GNU parallel來進行SQL注入測試:

#!/usr/bin/env bash
urls=("http://example.com/login.php" "http://test.com/index.php" "http://site.com/search.php")
echo "${urls[@]}" | parallel -j 3 'sqlmap -u {} --batch --crawl=2'
echo "所有 SQL 注入測試已完成。"

內容解密:

  • urls 是一個包含待測URL的陣列。
  • echo "${urls[@]}" 會輸出這些URL列表。
  • parallel -j 3 'sqlmap -u {} --batch --crawl=2' 會對每個URL執行sqlmap,並且最多同時執行三個工作。
  • sqlmap -u 是指定要測試的URL,--batch 模式是自動化模式, --crawl=2 是指定爬取深度。
  graph TD;
    A[起始] --> B[定義 URLs];
    B --> C[輸出 URLs];
    C --> D[使用 parallel 執行 sqlmap];
    D --> E[完成 SQL 注入測試];

此圖示展示了BASH指令碼的基本流程。從定義URL開始,然後輸出這些URL並使用GNU parallel來平行執行SQL注入測試。最後,當所有測試完成後,會顯示完成訊息。

使用Xargs進行網路TCP埠掃描

以下是另一個例子,展示如何使用BASH進行網路TCP埠掃描:

#!/usr/bin/env bash
ips=$(seq 1 254 | awk '{print "192.168.1." $1}')
echo "$ips" | xargs -n 1 -P 10 -I {} bash -c 'nmap -sP {}'
echo "網路掃描已完成。"

內容解密:

  • seq 1 254 | awk '{print "192.168.1." $1}' 生成從192.168.1.1到192.168.1.254的IP地址列表。
  • echo "$ips" 輸出這些IP地址。
  • xargs -n 1 -P 10 -I {} bash -c 'nmap -sP {}' 對每個IP地址執行NMAP的Ping掃描(-sP),並且最多同時執行十個工作。xargs-n 1 機制確保每個命令只有一個引數,這意味著它會為每個IP地址或主機名執行一次NMAP命令。
  graph TD;
    A[起始] --> B[生成 IP 地址列表];
    B --> C[輸出 IP 地址];
    C --> D[使用 xargs 執行 NMAP Ping 掃描];
    D --> E[完成網路掃描];

此圖示展示了BASH指令碼的基本流程。從生成IP地址列表開始,然後輸出這些IP地址並使用Xargs來平行執行NMAP Ping掃描。最後,當所有掃描完成後,會顯示完成訊息。

自主式埠掃描指令碼

雖然NMAP本身已經支援平行掃描,但在某些情況下,你可能無法安裝外部工具。因此,玄貓設計了一個完全依賴BASH和ping應用程式的埠掃描指令碼:

#!/usr/bin/env bash
IP_RANGE="10.2.10.{1..20}"
PORTS=(21 22 23 25 53 80 110 143 443 587 3306 3389 5900 8000 ...
       ... [繼續省略中間部分] ...
       ... ... 49230)
LIVE_HOSTS=()
for IP in $(eval echo $IP_RANGE); do
    if ping -c 1 -W 1 $IP > /dev/null 2>&1; then
        LIVE_HOSTS+=($IP)
    fi
done
scan_ports() {
    local IP=$1
    for PORT in "${PORTS[@]}"; do
        (echo >/dev/tcp/$IP/$PORT) > /dev/null 2>&1 && echo "$IP:$PORT"
    done
}
export -f scan_ports
for IP in "${LIVE_HOSTS[@]}"; do
    scan_ports $IP &
done
echo "等待埠掃描完成..."
wait

內容解密:

  • #!/usr/bin/env bash 是標準的Bash shebang註解,告訴系統使用哪個程式來執行下面的程式碼。
  • IP_RANGE="..." 用來定義需要掃描的IP範圍。
  • PORTS=(...) 是一個包含最常用TCP埠號碼的陣列。
  • LIVE_HOSTS=() 是一個空陣列,用來儲存回應ping請求的活動主機。
  • for IP in $(eval echo $IP_RANGE) 用來遍歷生成的IP地址列表。
  • ping -c 1 -W 1 $IP > /dev/null 2>&1 用來傳送一個ICMP回響請求(-c 1)且超時時間為一秒(-W 1),並將輸出重導向到 /dev/null 去忽略它們。
  • 若ping成功(即主機存活),則將該主機新增到活動主機陣列中: LIVE_HOSTS+=($IP)
  • scan_ports $IP 是一個函式,接收一個IP作為引數。
  • (echo >/dev/tcp/$IP/$PORT) > /dev/null 2>&1 && echo "$IP:$PORT" 用來嘗試開啟TCP連線至指定主機和埠號。若成功則會列印該主機與埠號。
  • export -f scan_ports 用於使該函式能夠在子shell中運作。
  • 在遍歷活動主機清單時: for IP in "${LIVE_HOSTS[@]}" 呼叫該函式並在背景執行以達到平行效果: scan_ports $IP &
  • 呼叫wait函式確保所有背景工作結束後再離開:wait
  graph TD;
    F[F]
    H[H]
    no[no]
    yes[yes]
    A[起始] --> B[定義 IP 範圍]
    B --> C[定義常用 TCP 通路]
    C --> D[定義空活動主機陣列]
    D --> E[生成 IP 地址]
    E --> F{Ping 檢查}
    F -- yes --> G[加入活動主機清單]
    F -- no --> E
    G --> H{檢查所有 IP 地址}
    H -- yes --> I[開始平行埠掃描]
    H -- no --> I

此圖示展示了指令碼內部邏輯結構。從起始階段開始生成與定義各項資料結構、遍歷、Ping 檢查、平行埠檢查最後等待工作結束。

玄貓認為這些實際應用能夠幫助你更好地理解BASH平行處理在測試中的優勢及其技術選型與設計考量。

Parallel Processing 在 Bash 語言中應用

在資訊安全領域中,平行處理(Parallel Processing)是提升效率的重要手段。Bash 這種強大的命令列工具,能夠輕鬆地執行多個任務,讓我們能夠有效地處理大量資料或執行多個指令。接下來,我們將探討如何在 Bash 中利用平行處理來提升作業效率。

平行下載檔案範例

以下是一個利用 GNU Parallel 來平行下載多個檔案的範例:

parallel -j 3 wget ::: http://example.com/file1 http://example.com/file2 http://example.com/file3

內容解密:

  • parallel -j 3: 這個指令會同時執行三個平行作業。
  • wget :::: 後面的三個 URL 是作為輸入引數,分別給予 wget 命令進行下載。
  • http://example.com/file1 http://example.com/file2 http://example.com/file3: 分別是要下載的三個檔案。

這段程式碼的核心邏輯是利用 parallel 命令來分派工作,讓三個檔案可以同時下載,而不需要依序等待前一個檔案下載完成。

Bash 中平行執行的最佳實踐

在使用 xargsGNU Parallel 進行平行處理時,以下是一些最佳實踐:

決定最佳的平行作業數量

最佳的平行作業數量取決於你的系統 CPU 和記憶體容量。一般建議從 CPU 核心數開始,然後根據效能進行調整。如果沒有指定作業數量,xargs 的預設值為一個作業,而 GNU Parallel 則是每個 CPU 核心一個作業。

# 指定平行作業數量為 4
parallel -j 4 <your_command>

處理錯誤

xargsGNU Parallel 都能夠捕捉和記錄錯誤。利用這些功能可以在不中斷整個流程的情況下,識別和除錯問題。

# 捕捉錯誤並重定向到錯誤日誌
your_command 2> error.log

處理輸出

將每個作業的輸出重定向到不同的檔案或日誌系統,以避免混亂。

# 將每個作業的輸出重定向到不同的日誌檔案
parallel --joblog job_log.txt <your_command>

建立意義明確的作業名稱

在使用 GNU Parallel 時,可以給每個作業命名,以便追蹤進度。

# 指定每個作業名稱
parallel --jobname job_{} <your_command>

在資安測試中的應用

在資安測試中,平行處理可以顯著加快網路掃描、暴力破解攻擊或分析多個目標等任務的速度。掌握如何管理平行任務可以讓你編寫出更高效且穩健的指令碼來應對各種測試情境。

透過運用這些技術和策略,你將能夠更好地利用系統資源,提升工作流程的效率。以下我們進一步探討如何將這些技術應用到實際情境中。

資安測試中的平行處理

淺談實戰案例與技術選型考量

在進行資安測試時,使用 Bash 語言結合平行處理可以顯著提升效率。玄貓過去在測試過程中曾遇到需要對多個目標進行網路掃描和服務列舉的情況。傳統方法需要逐一執行每個指令,但這樣做會花費大量時間。因此,玄貓選擇使用 GNU Parallelxargs 來實作平行處理。例如:

cat targets.txt | parallel -j 4 nmap -sV {}

內容解密:

  • cat targets.txt: 讀取包含目標 IP 或網域列表的檔案。
  • parallel -j 4 nmap -sV {}: 檢查每個目標 IP 或網域上的服務版本資訊,同時最多執行四個平行作業。

這段程式碼利用平行處理技術同時對多個目標進行掃描,大幅縮短了整體測試時間。然而,過多的平行作業可能會導致網路流量過高或系統資源耗盡。因此,玄貓在實際操作中會根據網路狀況和系統負載動態調整平行數量。

資安測試中的未來趨勢與改進點

隨著技術的進步,未來可能會出現更多強大且靈活的工具來支援更高效能的平行處理。例如:

  1. 雲端計算:雲端服務提供商如 AWS、Google Cloud 和 Azure 提供了豐富的資源來支援大規模平行處理。
  2. 容器化技術:Docker 和 Kubernetes 提供了靈活且可擴充套件的環境來佈署和管理大量容器化應用。
  3. 分散式系統:Zookeeper、Kafka 和 Spark 等分散式系統可以協助管理和處理大規模資料集。

玄貓認為未來資安測試者將越來越依賴這些先進技術來提升效率和準確性。例如,使用容器化技術可以讓測試環境更加靈活和可重複,而雲端計算則提供了更多計算資源來支援大規模測試。

總結來說,掌握 Bash 中的平行處理技術可以顯著提升資安測試工作流程的效率。透過適當地組態和管理平行任務,我們可以更快速地完成複雜且耗時的測試任務。

使用 Bash 進行資訊收集與偵察

在資訊安全領域,對於測試人員來說,進行詳細的資訊收集與偵察是成功進行測試的關鍵。這些步驟不僅能提供深入的目標瞭解,還能揭示潛在的攻擊面。這篇文章將探討如何利用 Bash 進行資訊收集與偵察,並透過實際案例來說明其重要性。

技術需求

要開始進行資訊收集與偵察,你需要具備以下基本條件:

  1. 從第一章開始閱讀並具備使用 Bash shell 的經驗。
  2. 最好使用 Kali Linux,因為其內建了許多有用的工具和指令碼。
  3. 本章節的一個指令碼需要 ProjectDiscovery Chaos API 金鑰,可以在 https://chaos.projectdiscovery.io/ 上免費取得。

如果你尚未安裝 Golang 和 Chaos 客戶端,請參考以下指令進行安裝:

sudo apt update && sudo apt install -y libxml2-utils whois
go install -v github.com/projectdiscovery/chaos-client/cmd/chaos@latest

資訊收集與偵察的重要性

對於測試人員來說,跳過偵察階段直接進行掃描和攻擊是非常常見的錯誤。玄貓曾經在一次測試中,花了三天時間試圖破解一個簡單的登入表單,但最終發現這些努力都無濟於事。直到回到偵察階段,玄貓發現該公司在 GitHub 上有一些公開儲存函式庫,其中一個儲存函式庫中包含了被移除但仍然可查詢到的認證資訊。這些認證資訊最終幫助玄貓成功登入並控制了該公司的一個財務應用程式。

使用 OSINT 收集公開資訊

OSINT(開源情報)是指透過公開可得的資料來收集和分析資訊,以產生可行動的情報。這些資料可以來自網際網路、社交網路、公共記錄和新聞報導等多種媒體。OSINT 在安全測試中非常重要,因為它能夠幫助測試人員識別潛在漏洞、瞭解目標基礎設施並模擬真實世界中的攻擊行為。

在 OSINT 的過程中,測試人員通常會收集以下資料:

  • 領域和 IP 地址資訊
  • 員工詳細資訊
  • 電子郵件地址
  • 社交媒體個人檔案
  • 檔案後設資料
  • 網路組態
  • 軟體版本

調整使用者名稱和電子郵件地址

在某些測試場景中,測試人員需要列出使用者名稱和電子郵件地址。這些資訊可以用於網路釣魚攻擊、密碼噴射或列出有效賬戶等操作。

若要進行此操作,你可以使用 Hunter.io 來查詢公司員工的名稱和電子郵件地址。首先在 https://hunter.io 上註冊一個免費賬戶,然後登入並前往 API 頁面。複製其中的一個 API 搜尋範例命令並將其貼上到終端機中,替換 [redacted] 為你自己的 API 金鑰:

curl https://api.hunter.io/v2/domain-search?domain=stripe.com&api_key=[redacted] > employees.txt

請注意,這裡使用 Stripe 作為範例目標僅供演示之用,請勿未經授權對任何目標進行攻擊。

網路安全與道德規範

玄貓強調,任何形式的網路安全測試必須遵守法律和道德規範。未經授權的測試不僅違法且不道德,並且可能會導致嚴重後果。

持續學習與實踐

網路安全領域充滿了挑戰和機遇。透過不斷學習和實踐,測試人員可以提升自己的技能並應對各種複雜的網路安全問題。希望這篇文章能夠幫助你更好地理解如何使用 Bash 進行資訊收集與偵察。

本文涵蓋瞭如何利用 Bash 和 OSINT 方法進行詳細的目標偵察和資料收集。透過實際案例展示了這些步驟的重要性以及其在網路安全中的應用。