網路安全測試是保護網路系統的關鍵環節,而 Bash 作為一個強大的命令列工具,在測試中扮演著重要的角色。從檢查 ZAP 掃描結果到編碼、加密和雜湊演算法,Bash 提供了豐富的工具和技術來處理各種資料操控任務。此外,Bash 指令碼可以自動化滲透測試的各個階段,從偵察到利用,提高效率並減少錯誤。建立一個合適的測試環境,包括目錄結構和持久會話管理,對於有效測試至關重要。瞭解網路測試的核心方法,例如掃描、列舉和利用,並結合 Bash 指令碼的自動化能力,可以幫助安全人員更有效地識別和修復網路漏洞。實務應用中,這些技術可以結合使用,例如使用 Base64 編碼處理二進位制資料,使用 gzip 壓縮減少網路傳輸時間,利用 SHA-256 驗證檔案完整性,以及使用 AES-256 保護敏感資訊。隨著技術的發展,新的演算法和工具不斷湧現,安全人員需要持續學習和更新知識,才能應對不斷變化的網路安全威脅。

進階資料操控技術

網路安全測試中,資料操控技術是至關重要的。無論是檢查掃描結果、編碼還是加密資料,都需要精通各種方法。以下我們將探討如何在Bash環境中進行這些操作,並提供具體的實務案例與詳細解說。

檢查ZAP掃描結果

ZAP(Zed Attack Proxy)是一個廣泛使用的網路安全測試工具,能夠生成多種格式的掃描報告,包括HTML、JSON、Markdown和XML。對於人類可讀的報告,HTML格式是最佳選擇。然而,如果需要在自動化框架中使用Bash指令碼進行解析,JSON或XML格式則更為合適。

以下是ZAP掃描結果的範例:

{
    "alerts": [
        {
            "alert": "SQL Injection",
            "risk": "High",
            "description": "Possible SQL injection vulnerability detected."
        }
    ]
}

基礎編碼與解碼技術

在進行網路安全測試時,資料編碼與解碼是必不可少的技術。以下我們將介紹Base64編碼與解碼、URL安全編碼以及gzip壓縮技術。

Base64編碼與解碼

Base64編碼是將二進位制資料轉換為ASCII字串的方法,使用64個字元(包括大小寫字母、數字及+和/符號)來表示資料。這種編碼方法主要用於確保二進位制資料在傳輸過程中不會被破壞。

以下是Base64編碼的範例:

$ echo -n hello | base64
aGVsbG8=

這裡的hello被轉換成aGVsbG8=

URL安全編碼

URL安全編碼與Base64編碼類別似,但它使用-_取代了+/符號,並通常省略填充字元=。這樣可以確保編碼後的資料能夠安全地包含在URL或檔案名稱中。

以下是URL安全編碼的範例:

url_safe_base64_encode() {
    base64 | tr '+/' '-_' | tr -d '='
}

url_safe_base64_decode() {
    tr '-_' '+/' | base64 --decode
}

gzip壓縮

gzip壓縮在HTTP通訊中廣泛應用於壓縮傳輸之間的資料,提高傳輸效率。當Web伺服器傳送資料給客戶端時,可以使用gzip壓縮內容,減少檔案大小並加速下載過程。

以下是gzip壓縮與解壓縮的範例:

$ gzip file.txt
$ gunzip file.txt.gz

雜湊演算法

雜湊演算法用於產生固定長度的雜湊值,常用於驗證資料完整性與認證。

MD5雜湊

MD5雜湊產生128位(16位元組)的雜湊值,通常表示為32個十六進位制數字。然而,MD5已被證明容易產生衝突(collision),因此不建議用於安全敏感應用。

以下是MD5雜湊的範例:

md5_hash() {
    md5sum | awk '{print $1}'
}

$ echo helloworld | md5_hash
d73b04b0e696b0945283defa3eee4538

SHA-256雜湊

SHA-256雜湊產生256位(32位元組)的雜湊值,通常表示為64個十六進位制數字。它由國家安全域性(NSA)開發,屬於SHA-2家族的一部分。SHA-256設計上難以逆向或產生衝突,因此非常適合用於驗證資料完整性與真實性。

以下是SHA-256雜湊的範例:

sha256_hash() {
    sha256sum | awk '{print $1}'
}

$ echo helloworld | sha256_hash
8cd07f3a5ff98f2a78cfc366c13fb123eb8d29c1ca37c79df190425d5b9e424d

AES-256加密與解密

AES-256(Advanced Encryption Standard with 256-bit key)是一種對稱加密演算法,廣泛用於保護敏感資料。它使用一個256位元組的秘密金鑰來將明文轉換為密鑰,只有擁有相同金鑰的人才能解密並存取原始資料。

以下是AES-256加密與解密的範例:

aes_encrypt() {
    local password="$1"
    openssl enc -aes-256-cbc -base64 -pbkdf2 -pass pass:"$password"
}

aes_decrypt() {
    local password="$1"
    openssl enc -aes-256-cbc -d -base64 -pbkdf2 -pass pass:"$password"
}

這些函式需要透過stdin管道傳遞要加密或解密的資料。例如:

$ echo "data to be encrypted" | aes_encrypt 'Passw0rd!' | aes_decrypt 'Passw0rd!'
data to be encrypted

內容解密:

這段程式碼展示瞭如何使用AES-256來進行加密和解密操作。首先定義了兩個函式 aes_encryptaes_decrypt ,分別用於加密和解密。這些函式使用 openssl 命令列工具來執行加密和解密操作。

openssl enc -aes-256-cbc -base64 -pbkdf2 -pass pass:"$password"

這行命令指定了 AES 演算法以 256 位元組鍵長度進行 Cipher Block Chaining (CBC) 模式。 -base64 選項表示將輸出以 Base64 編碼格式輸出。

openssl enc -aes-256-cbc -d -base64 -pbkdf2 -pass pass:"$password"

-d 選項表示進行解密操作。

此圖示展示了 AEM 加密及解密流程圖:

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Bash 網路安全測試:資料操控與滲透測試實務

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

以上圖示展示了 AES 加密和解密流程圖,從明文開始經過 AES 加密轉成密鑰後再經過 AES 解密還原成明文。

資安測試中的實務應用

在實務中,這些技術可以應用於多種情境。例如,使用Base64編碼將二進位制檔案嵌入到HTML頁面中;使用gzip壓縮減少網路傳輸時間;利用SHA-256驗證檔案完整性;以及使用AES-256保護敏感資訊。

未來趨勢

隨著技術的不斷發展,新的編碼、加密和雜湊演算法可能會取代目前常用的方法。例如,量子計算可能會對目前的加密標準構成威脅,因此未來可能會有更強大且更安全的演算法出現。

使用 Bash 進行網路與基礎架構測試

在現代網路安全中,Bash 作為一種強大且靈活的命令列介面,已經成為測試人員的重要工具。它不僅能夠處理基本的網路掃描與漏洞評估,還可以在沒有其他工具或程式設計函式庫支援的環境中進行高階測試。本文將探討如何使用 Bash 進行網路和基礎架構測試,並提供實際案例與詳細技術解說。

網路與基礎架構測試的基本概念

網路與基礎架構測試是確保網路安全的一個重要環節。透過掃描、列舉和評估網路服務和協定,測試人員可以識別潛在的漏洞並模擬攻擊情境。這些操作通常需要深入的技術知識和靈活的工具支援。

使用 Bash 進行網路掃描

Bash 提供了豐富的命令列工具來進行網路掃描。例如,nmapmasscan 是兩個常用的網路掃描工具。以下是如何使用這些工具來掃描網路中的主機和開放埠。

# 使用 nmap 掃描特定 IP 範圍內的主機
nmap -p- 192.168.1.0/24

# 使用 masscan 快速掃描大規模網路
masscan -p0-65535 192.168.1.0/24 --rate=1000

檢視掃描結果

# 使用 tcpdump 捕捉並檢視網路流量
sudo tcpdump -i eth0 -w capture.pcap

# 使用 Wireshark 分析捕捉到的流量
wireshark capture.pcap

網路服務與協定列舉

列舉網路服務和協定是瞭解目標系統內部結構的關鍵步驟。Bash 提供了多種工具來實作這一目的,例如 netcatenum4linux

# 使用 netcat 測試開放埠
nc -zv 192.168.1.1 22

# 使用 enum4linux 調查 Active Directory
enum4linux -a 192.168.1.100

基礎架構漏洞評估

在測試過程中,漏洞評估是必不可少的一步。Bash 能夠與多種漏洞掃描工具配合使用,如 OpenVAS(現名 Greenbone Vulnerability Manager)。

# 安裝 Greenbone Community Edition
sudo apt update && sudo apt install -y gvm gvm-setup
sudo gvm-setup

# 啟動 Greenbone 應用程式並進行漏洞評估
gvm-start

資源組態與準備環境

為了進行有效的測試,需要準備一個合適的實驗室環境。GOAD(Game of Active Directory)是一個非常受歡迎的 Active Directory 攻擊實驗室。它模擬了常見的內部網路環境,讓測試人員能夠練習各種攻擊技巧。

# 安裝 GOAD 的依賴專案
sudo apt update && sudo apt install -y tmux netexec nmap masscan tcpdump wordlists hashcat xmlstarlet

# 下載 GOAD 原始碼並設定實驗室環境
git clone https://github.com/Orange-Cyberdefense/GOAD.git
cd GOAD
./setup.sh

此外,Ludos 是另一個用於佈署複雜網路環境的工具,它可以自動化 GOAD 和其他虛擬機器範本的佈署。

# 安裝 Ludus 伺服器並佈署 GOAD 和 Vulhub 範本
curl -sSL https://docs.ludus.cloud/install | bash
ludus deploy -t GOAD -t Vulhub

安全性考量與最佳實踐

在進行網路與基礎架構測試時,安全性考量至關重要。以下是一些最佳實踐:

  • 避免非法活動:確保你有正當授權去測試目標系統。
  • 保護資料:使用加密技術來保護捕捉到的資料。
  • 定期更新:保持你所使用的工具和系統更新到最新版本。
  • 記錄和報告:詳細記錄所有測試過程和發現的漏洞,並生成詳細報告。

網路測試的基本原理與 Bash 指令碼應用

網路測試(Penetration Testing),簡稱測試,是網路安全領域中至關重要的一環。它涉及模擬攻擊來識別網路中的漏洞,從而預防惡意攻擊者的利用。多種方法指導測試人員進行這一過程,以確保評估的全面性和系統性。在 Unix/Linux 環境中,Bash 指令碼是一個強大的工具,能夠自動化並增強這些方法。讓我們探討網路測試的核心方法,並瞭解如何有效地利用 Bash 指令碼。

網路測試的核心方法

網路測試的核心方法包括以下幾個步驟:

  1. 偵察:偵察是初步階段,目的是收集目標網路的資訊。這可以透過被動方式(例如,搜尋公共記錄)或主動方式(例如,掃描網路)進行。
  2. 掃描:在這一階段,測試人員使用工具來發現活動主機、開放埠和執行的服務。這有助於對映網路並識別潛在的入口點。
  3. 列舉:列舉涉及從網路中提取更詳細的資訊,例如使用者賬戶、機器名稱和網路分享。這一階段建立在掃描階段收集到的資料基礎上。
  4. 利用:在此階段,測試人員嘗試利用已識別的漏洞來取得對系統或資料的未經授權存取。這一階段測試了現有安全措施的有效性。
  5. 後期利用:取得存取後,測試人員評估入侵範圍、保持存取並收集更多資訊。這一階段有助於瞭解攻擊可能帶來的影響。
  6. 報告:最終,測試人員將其發現編寫成報告,詳細說明漏洞、已利用的弱點以及修補建議。

前面我們已經介紹了偵察。本章將重點介紹掃描、列舉和利用。後期利用和報告將在後續章節中講述。

建立測試環境

在開始網路測試時,首先需要建立一個目錄結構來儲存資料。最高層級目錄是測試名稱。在這裡,我們將其命名為 bashbook。然後在 bashbook 下建立 logsscansloot 目錄。

網路測試目錄結構範例

bashbook/
├── logs/
├── scans/
├── loot/
├── scope.txt
└── exclusions.txt

在最高層級目錄 bashbook 下,我們建立兩個檔案:scope.txtexclusions.txtscope.txt 檔案列出我們被授權進行測試的 IP 或網路地址。exclusions.txt 檔案包含任何被排除在外的 IP 地址或主機名稱。例如,如果我們被授權範圍是 10.2.10.0/24 網路地址,但 10.2.10.13 被排除在外,我們可以將該地址放入 exclusions.txt 以確保跳過該地址。

使用 tmux 進行持久會話

在開始駭客活動之前,我們介紹另一個 shell 工具:tmux。讓我們看看 man tmux 命令的輸出:

tmux 是一個終端多路複用器:它允許多個終端被建立、存取和控制,
從單屏顯示器控制。

tmux 的重要性在於測試人員經常需要遠端工作並透過遠端系統進行操作。例如,我是完全遠端工作。當我為客戶進行內部網路測試時,我不會親自到現場。我會將一台小型電腦(如 Intel NUC 或 System76 Meerkat)傳送到客戶現場。客戶將其連線到網路並開啟電源。該裝置隨後使用 Wireguard 協定連線到團隊 DMZ 中的跳板主機。然後我使用 SSH 與公鑰和私鑰安全地連線到客戶內部網路。

建立 SSH 會話後,我立即啟動或還原 tmux 會話。如果您在執行掃描或更糟的是在您已經利用系統並建立了反向 shell 之後從遠端系統斷開連線,則 tmux 程式會保持您的 shell 會話和正在執行的過程不中斷。

$ tmux new -s [session name]

如果您與他人合作且分享系統,最好為您的會話命名。

現在,終端視窗將顯示會話名稱和左下角的一個預設視窗。當前視窗以加號(*)結尾表示。

自動化命令列輸出記錄

命令列輸出記錄可以幫助我們跟蹤每一步操作並記錄所有重要資訊。以下是如何使用 tee 命令來記錄命令列輸出:

$ netexec smb 10.2.10.0/24 -u user -p password --shares | tee logs/netexec-user-shares.log

這樣我們就有一個有意義的日誌檔名稱和命令輸出以供後續解析。

提示

如果您執行另一個命令並將其管道傳遞給 tee 和現有檔名稱時(即輸出被覆寫),要新增到檔案中請使用 tee -a [filename]。

自動化掃描與列舉

使用 Bash 指令碼自動化掃描與列舉可以節省大量時間並減少錯誤。

概述

所有命令都是為了自動化網路掃描與列舉過程所設計。 以下範例展示了一些常見技術與實踐:

#!/bin/bash

# 引入必需函式
source common_functions.sh

# 自動化命令列日誌
log_command_output() {
    local command="$1"
    local logfile="$2"
    eval "$command" | tee "$logfile"
}

# 掃描活動主機
scan_active_hosts() {
    local target="$1"
    local logfile="logs/scan_active_hosts.log"
    log_command_output "nmap -sn $target" "$logfile"
}

# 掃描開放埠
scan_open_ports() {
    local target="$1"
    local logfile="logs/scan_open_ports.log"
    log_command_output "nmap -sS $target" "$logfile"
}

# 清單檔案中所有主機位置及服務查詢
enumerate_services() {
    local target_file="$1"
    while IFS= read -r ip; do
        scan_active_hosts "$ip"
        scan_open_ports "$ip"
    done < "$target_file"
}

# 主程式執行區塊
main() {
    local target_file="targets.txt"
    enumerate_services "$target_file"
}

# 執行主程式
main

概述解密:

此指令碼設計為自動化網路掃描與列舉過程:

  • 首先引入 common_functions.sh 中必需函式。
  • log_command_output() 函式負責記錄命令輸出到指定日誌檔案。
  • scan_active_hosts() 函式使用 nmap 掃描活躍主機並記錄結果。
  • scan_open_ports() 函式則進行開放埠掃描。
  • enumerate_services() 函式從清單檔案中逐行讀取每個IP地址並執行前兩項函式。
  • 主程式執行區塊從指定清單檔案開始敘述流程。

接下來玄貓要展示如何使用 Bash 指令碼自動化常見任務。

常見任務範例:

#!/bin/bash

# 安裝必要工具包及更新資訊函式庫
install_tools() {
    sudo apt-get update && sudo apt-get install -y nmap enum4linux nikto hydra dirbuster sqlmap metasploit-framework
}

# 執行 Nmap 搜尋活躍主機及開放埠掃描
nmap_scan() {
    nmap -sn $1 -oN scans/nmap_sn_scan.txt
    nmap -sS $1 -oN scans/nmap_sS_scan.txt
}

# 執行 Enum4Linux 收集 SMB 資訊(須給予IP及網域名稱)
enum4linux_scan() {
    enum4linux $1 > scans/enum4linux_scan.txt
}

# 執行 Nikto 掃描 Web 應用漏洞 (須給予 URL)
nikto_scan() {
    nikto -h $1 > scans/nikto_scan.txt
}

# 執行 Hydra 持續暴力破解 SSH (須給予 IP, 使用者, 帳密清單)
hydra_ssh_brute() {
    hydra -L users.txt -P passwd.txt ssh://$1 > scans/hydra_ssh_brute.txt
}

# 執行 DirBuster 探索隱藏資料夾及檔案 (須給予 URL)
dirbuster_scan() {
    dirbuster $1 > scans/dirbuster_scan.txt &
}

# 執行 SQLMap 探索 SQL 注入漏洞 (須給予 URL)
sqlmap_scan() {
    sqlmap -u $1 --batch --crawl=3 --level=5 --risk=3 > scans/sqlmap_scan.txt &
}

main() {
    install_tools

    # 須給予 IP 或 URL 指向目標電腦或服務.
    TARGET_IP="your_target_ip_here"
    TARGET_URL="your_target_url_here"

    nmap_scan $TARGET_IP
    enum4linux_scan $TARGET_IP
    nikto_scan $TARGET_URL
    hydra_ssh_brute $TARGET_IP
    dirbuster_scan $TARGET_URL &
    sqlmap_scan $TARGET_URL &
}

main # 啟動主流程.

概述解密:

此指令碼設計為自動化多種常見任務:

  • 首先更新資訊函式庫並安裝必要工具包。
  • 接著執行 Nmap 掃描活躍主機及開放埠。
  • Enum4Linux 收集 SMB 資訊。
  • Nikto 掃描 Web 應用漏洞。
  • Hydra 執行暴力破解 SSH 機制。
  • DirBuster 探索隱藏資料夾及檔案。
  • SQLMap 探索 SQL 注入漏洞。
  • 主程式執行區塊根據需要啟動各項功能模組.