在資安領域,使用 Bash 和 Awk 進行資訊蒐集和整理至關重要。本文將介紹如何結合這些工具處理 Nuclei 掃描報告,並運用 Sed 和 Sort 進行資料清理和排序。接著,我們會探討 Awk 如何進一步處理資料,並將其應用於 Hosts 檔案,以利於後續的滲透測試或安全分析。此外,我們也會探討如何將這些資料轉換為 Nessus 掃描器可用的格式。除了資訊蒐集,自動化 HTTP 請求和網頁應用程式安全分析也是重要的議題。本文將介紹如何使用 curl 命令傳送各種 HTTP 請求,例如 GET 和 POST,並示範如何新增自定義標頭、從檔案傳送資料以及處理 HTTP 回應。我們也將探討如何使用 Bash 指令碼進行 SQL 注入測試、XSS 測試和身份驗證測試等安全評估,並結合 awk、sed 和 grep 等工具進行資料處理和分析。最後,文章將分享實際案例,並探討未來網路安全評估的趨勢,例如 AI、機器學習和雲端安全的應用,以及如何將安全評估融入 CI/CD 流程。
使用 Bash 與 Awk 進行資訊蒐集與整理
在現代資訊安全與網路攻擊中,資訊蒐集(Reconnaissance)是一個不可或缺的步驟。透過蒐集目標系統的相關資訊,我們可以更有效地進行後續的攻擊或滲透測試。以下將介紹如何使用 Bash 與 Awk 來進行資訊蒐集與整理,特別是如何處理和格式化 Nuclei 掃描報告中的資料。
使用 Sed 進行基本資料清理
在處理核心資料之前,我們通常需要進行一些基本的資料清理工作。這裡我們使用 sed 命令來移除不需要的字元和格式。以下是一個多步驟的 sed 命令範例:
sed 's/:443//;s/\[//g;s/\]//g;s/"//g;s/,/ /g;s/ \*\.[^ ]*//g'
內容解密:
s/:443//: 移除輸入中的:443字串。s/\[//g: 移除所有[字元。g表示全域性替換,適用於每一行中的所有比對項。s/\]//g: 移除所有]字元。這裡的]需要使用反斜槓\轉義。s/"//g: 移除所有雙引號"。s/,/ /g: 將所有逗號,替換為空格。s/ \*\.[^ ]*//g: 移除所有以空格後接*.的子網域名稱條目,如*.example.com。這裡的[^ ]是正規表示式,表示任何非空格字元。
使用 Sort 命令進行排序
在清理完基本資料後,我們需要對資料進行排序。這裡我們使用 sort 命令來實作:
sort -u -k2
內容解密:
-u: 唯一排序,去除重複項。-k2: 指定從第二個欄位開始排序,到行尾結束。如果只想排序第二個欄位,可以使用-k2,2。
使用 Awk 語言進行進一步處理
Awk 是一種強大的文書處理工具,特別適合用於處理結構化的文字資料。以下是如何使用 Awk 語言來進一步處理我們的資料:
awk '{
# 初始化 new_line 為空字串
new_line = ""
for (i = 1; i <= NF; i++) {
if ($i !~ /\*/) {
new_line = new_line $i " "
}
}
sub(/[ \t]+$/, "", new_line)
if (split(new_line, fields, " ") > 1) {
print new_line
}
}'
內容解密:
- 初始化
new_line為空字串。 for (i = 1; i <= NF; i++) { ... }: 建立一個迴圈,遍歷每個欄位(NF表示欄位數)。if ($i !~ /\*/) { ... }: 檢查當前欄位是否包含星號 (*),如果不包含則將其連線到new_line中。sub(/[ \t]+$/, "", new_line): 去除new_line尾部的多餘空格或製表符。if (split(new_line, fields, " ") > 1) { ... }: 分割new_line為陣列fields,並檢查是否包含多於一個欄位。
處理輸出並應用到 hosts 檔案
最終輸出的結果可以直接新增到系統的 hosts 檔案中,從而覆寫 DNS 請求並確保主機名解析到指定的 IP 地址。這對於需要控制 DNS 查詢結果的測試環境非常有用。
此圖示展示了整個流程
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Bash 與 Awk 資訊蒐集整理及網頁應用程式安全分析
package "安全架構" {
package "網路安全" {
component [防火牆] as firewall
component [WAF] as waf
component [DDoS 防護] as ddos
}
package "身份認證" {
component [OAuth 2.0] as oauth
component [JWT Token] as jwt
component [MFA] as mfa
}
package "資料安全" {
component [加密傳輸 TLS] as tls
component [資料加密] as encrypt
component [金鑰管理] as kms
}
package "監控審計" {
component [日誌收集] as log
component [威脅偵測] as threat
component [合規審計] as audit
}
}
firewall --> waf : 過濾流量
waf --> oauth : 驗證身份
oauth --> jwt : 簽發憑證
jwt --> tls : 加密傳輸
tls --> encrypt : 資料保護
log --> threat : 異常分析
threat --> audit : 報告生成
@enduml
內容解密:
此圖示展示了整個流程:從原始資料開始,經過 Sed 清理、Sort 排序和 Awk 處理後,最終生成可應用到 Hosts 檔案中的輸出結果。每一步都有其特定功能,共同構成了完整的資訊蒐集與整理流程。
匯出 Nessus 掃描格式
除了將結果應用到 Hosts 檔案外,我們還可以將其轉換為 Nessus 掃描器支援的格式。Nessus 是一款廣泛使用的弱點掃描工具,它不會直接使用 Hosts 檔案來解析網域名稱。以下是如何將 Nuclei 掃描結果轉換為 Nessus 支援的格式:
#!/usr/bin/env bash
if [ "$#" -ne 1 ]; then
echo "This script is intended for use with Nuclei scan output from the ssl-dns-names template."
echo "The related Nuclei scan command is: nuclei -t \"$HOME/nuclei-templates/ssl/ssl-dns-names.yaml\" -nc -silent -u [IP or network address] -o [output file]"
echo "Usage: $0 /path/to/file"
exit 1
fi
seen_hostnames=()
while read -r line; do
...
done < "$1"
內容解密:
#!/usr/bin/env bash: 指定指令碼使用 Bash Shell 執行。if [ "$#" -ne 1 ]; then ... fi: 檢查指令碼是否接收到了正確數量的命令列引數。seen_hostnames=(): 建立一個陣列來追蹤唯一主機名。while read -r line; do ... done < "$1": 読取檔案並處理每一行。
透過這些步驟,我們可以高效地蒐集和整理必要的網路資訊,並將其應用到實際測試環境中。這不僅提高了測試的準確性,還能讓我們更好地理解目標系統的結構和行為。
未來趨勢與預測
隨著網路攻擊技術的不斷進步,資訊蒐集將變得更加重要且複雜。未來可能會出現更多自動化工具和技術來協助我們進行更高效、更精確的資訊蒐集工作。此外,機器學習和人工智慧技術也可能被引入到這個領域中,幫助我們從海量資料中提取出更有價值的資訊。
創新點與實務應用
在實務應用中,這些技術可以幫助安全專業人員更快速地識別目標系統中的潛在弱點並進行相應的修補工作。此外,這些技術也可以用於其他領域,例如網路監控、異常行為檢測等。
總結來說,透過深入理解和應用 Bash 與 Awk 工具,我們可以大大提高資訊蒐集與整理的效率和準確性。希望這篇文章能夠幫助你在實際工作中發揮更大的作用。
自動化HTTP請求與網頁應用程式安全分析
在現代的網路安全評估中,自動化HTTP請求與分析網頁應用程式安全是不可或缺的一部分。本篇文章將探討如何使用Bash來進行這些任務,並結合具體案例與技術選型考量,提供一個全面且深入的技術指引。
自動化HTTP請求的關鍵技術
在Bash中自動化HTTP請求,curl 是最常用的工具之一。curl 是一個命令列工具,能夠使用各種協定(如HTTP、HTTPS、FTP等)來傳輸資料。它廣泛應用於網路安全測試中,因為它能夠傳送自定義請求來揭示潛在的漏洞。
curl -X GET "http://example.com/api/data" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
內容解密:
-X GET:指定HTTP請求方法為GET。"http://example.com/api/data":目標URL。-H "Authorization: Bearer YOUR_ACCESS_TOKEN":新增自定義HTTP標頭,這裡是Bearer認證。
分析網頁應用程式安全
使用Bash來分析網頁應用程式安全,可以透過多種方式來實作。以下是一些常見的方法:
- SQL注入測試:使用
curl和其他工具來測試SQL注入漏洞。 - 跨站指令碼(XSS)測試:透過自動化傳送包含惡意指令碼的請求來測試XSS漏洞。
- 身份驗證測試:檢查身份驗證機制是否存在漏洞。
以下是一個簡單的SQL注入測試範例:
curl -s -X POST "http://example.com/login" -d "username=admin'--&password=test" | grep "Welcome"
內容解密:
-s:靜默模式,不顯示進度條和錯誤訊息。-X POST:指定HTTP請求方法為POST。"http://example.com/login":目標URL。-d "username=admin'--&password=test":傳送POST資料,這裡包含了SQL注入攻擊字元。| grep "Welcome":過濾回應中包含"Welcome"字樣的行,這通常表示登入成功。
高階資料處理技術
在處理大量資料時,Bash中的高階資料處理技術可以大幅提升效率。例如,使用awk、sed和grep等工具來過濾和處理資料。
awk -F',' '{print $1, $3}' data.csv > output.txt
內容解密:
-F',':指定分隔符為逗號。'{print $1, $3}':列印第1列和第3列。data.csv:輸入檔案。> output.txt:將結果寫入到output.txt檔案中。
具體實務案例
在實際操作中,玄貓曾經使用Bash進行了一次大規模的網路安全評估。該評估涉及到多個目標網站,並且需要自動化測試各種常見的漏洞。玄貓使用了一系列Bash指令碼來完成這些任務。
首先,玄貓編寫了一個指令碼來自動化HTTP請求:
#!/bin/bash
targets=("http://site1.com" "http://site2.com" "http://site3.com")
for target in "${targets[@]}"; do
response=$(curl -s "$target")
if [[ $response == *"vulnerability"* ]]; then
echo "$target is vulnerable"
else
echo "$target is secure"
fi
done
內容解密:
targets=("http://site1.com" "http://site2.com" "http://site3.com"):定義目標URL列表。for target in "${targets[@]}":遍歷每個目標URL。response=$(curl -s "$target"):傳送GET請求並捕捉回應。if [[ $response == *"vulnerability"* ]]:檢查回應中是否包含"vulnerability"字樣。
未來趨勢與技術選型考量
隨著技術的不斷進步,未來的網路安全評估將更加依賴於自動化工具和技術。玄貓認為,以下幾點將是未來的趨勢:
- AI和機器學習:利用AI和機器學習技術來自動識別潛在漏洞。
- 雲端安全:隨著雲端服務的普及,雲端安全將成為一個重要的研究方向。
- 持續整合/持續佈署(CI/CD):將安全評估融入CI/CD流程中,以確保程式碼在每次佈署前都經過嚴格的安全檢查。
自動化 HTTP 要求在 Bash 中
在測試與開發過程中,自動化 HTTP 要求是一項重要的技能。Bash 作為一個強大的命令列工具,結合 curl 指令,可以非常方便地完成這項任務。以下是一些常用的 curl 選項,這些選項對於測試人員(pentesters)特別有用:
-X或--request:指定請求方法(如 GET、POST、PUT、DELETE 等)-d或--data:隨 POST 請求傳送資料-H或--header:傳送自訂標頭到伺服器-I或--head:僅顯示回應標頭資訊-u或--user:包含使用者驗證-o或--output:將輸出寫入檔案-s或--silent:靜默模式(無進度條或錯誤訊息)-k或--insecure:使用 SSL 時允許不安全的伺服器連線-L或--location:跟隨重新導向-w或--write-out <format>:完成傳輸後在 stdout 上顯示資訊-Z或--parallel:使curl以平行方式執行傳輸,而不是依序進行
接下來,我們將探討這些選項的使用範例。
GET 與 POST 請求
GET 和 POST 請求是最常見的 HTTP 請求方法。要了解更多,可以參考 Mozilla Developer Network。
GET 請求
GET 請求用於從伺服器取得資訊。以下是使用 curl 傳送 GET 請求的範例:
curl -X GET https://example.com
此命令的解說如下:
curl: 啟動curl指令-X GET: 指定請求方法為 GEThttps://example.com: 目標伺服器的 URL
POST 請求
POST 請求用於將資料傳送到伺服器的請求主體中。以下是範例:
curl -X POST https://example.com/login -d "username=user&password=pass"
此命令的解說如下:
-X POST: 指定請求方法為 POST-d "username=user&password=pass": 隨請求傳送資料
內容解密:
- GET 與 POST 的區別:GET 請求將資料放在 URL 中作為引數,而 POST 請求則將資料放在請求主體中。
- GET 請求範例:使用
curl -X GET https://example.com可以從example.com取得資料。 - POST 請求範例:使用
curl -X POST https://example.com/login -d "username=user&password=pass"可以將使用者名稱和密碼傳送到example.com/login。
包含自訂標頭
許多網頁應用程式需要身份驗證標頭。以下是如何在請求中包含它們的範例:
curl -X GET https://example.com/protected -H "Authorization: Bearer <token>"
從檔案傳送資料
你也可以使用 --data-binary 選項從檔案傳送資料:
curl -X POST https://example.com/upload --data-binary @file.txt
高階範例
測試人員經常需要組合多個選項來建構特定的請求。以下是一個高階範例:
curl -X POST https://example.com/api -H "Authorization: Bearer <token>" -H "Content-Type: application/json" -d @data.json
內容解密:
- -H “Content-Type: application/json”:指定傳送資料的內容型別為 JSON。
- -d @data.json:傳送
data.json檔案中的內容。
分析 HTTP 応答
處理 HTTP 応答以分析網頁應用程式的行為是非常重要的。以下是一個簡單的範例:
#!/usr/bin/env bash
response=$(curl -s -o /dev/null -w "%{http_code}" https://example.com)
if [ "$response" -eq 200 ]; then
echo "請求成功。"
else
echo "請求失敗,應答碼為 $response。"
fi
內容解密:
- response=$(…):捕捉 HTTP 応答碼到變數中。
- -s -o /dev/null -w “%{http_code}”:靜默模式、丟棄輸出並僅顯示 HTTP 応答碼。
- if 塊:分析應答碼。如果應答碼為 200,則請求成功。
自動化多次請求
測試人員經常需要自動化多次請求。以下是使用迴圈來實作這一點的範例:
for i in {1..10}; do
curl -X GET "https://example.com/page$i" -H "Authorization: Bearer <token>"
done
內容解密:
- for i in {1..10}:迴圈從 1 與到 10。
- “https://example.com/page$i":動態構建每次迴圈中的 URL。
檢查 HTTP 応答標頭
有時你只想檢查 HTTP 応答標頭並丟棄其他部分:
curl -I "https://www.example.com/"
####此圖示展示了一個 HTTP 專案部分所對應之標頭值與引數值之解釋,
sequenceDiagram
participant Client as 使用者端端點(user)
participant Server as Server端點(Server)
Client->>Server: GET /admin/report?year=2024&month=7 HTTP/2
Server-->>Client: HTTP/2 200 OK<br>Content-Type: application/json<br>Content-Length: xxx<br>
Note right of Server: 資料回傳至使用者端端點以及<br>Server回應狀態碼及Header值
內容解密:
- GET /admin/report?year=2024&month=7 HTTP/2:展示此區塊之引數值與Query parameter之傳遞方式。
- Server–»Client: HTTP/2 200 OK:展示HTTP/2回傳狀態碼以及相關Header值。
語法錯誤與除錯技巧
如果在 Bash Shell 中建立 HTTP 專案時遇到錯誤,可以透過代理或儲存封包抓取來進行排查。這樣可以看到實際傳送和接收的內容,這可能會因編碼問題而不同於你所期望的。
網頁應用程式測試之實際案例研究
現在我們已經掌握瞭如何使用 curl 建構 HTTP 專案,讓我們將這些知識運用到實際案例中。接下來我們將展示如何使用 Bash 編寫 SQL 注入負載。具體範例可以在 GitHub 儲存函式庫中的本章資料夾中找到 ch09_sqliscanner.sh
檢查相依性
以下是檢查 curl 和 parallel 是否已安裝的函式範例:
#!/usr/bin/env bash
check_dependencies() {
for cmd in curl parallel; do
if ! command -v $cmd &> /dev/null; then
echo "$cmd 未安裝。請先安裝 $cmd 。"
exit 1
fi
done
}
內容解密:
- command -v $cmd &> /dev/null:檢查
$cmd是否存在於系統路徑中。 - exit 1:如果未安裝指定命令,則輸出錯誤訊息並離開指令碼。
透過以上範例和解說,玄貓希望能夠幫助你更好地理解如何在 Bash 中自動化 HTTP 專案。無論是基本的 GET 和 POST 請求,還是複雜的多重選項組合和自動化任務,Bash 和 curl 提供了強大且靈活的工具來完成這些任務。