在網路安全的戰場上,滲透測試猶如偵察兵的秘密行動,其結果必須清晰、有效地傳達給指揮部。一份高品質的報告不僅展現了技術實力,更是後續防禦策略的根本。然而,手動編寫報告耗時費力,如何自動化這個流程,一直是我思考的重點。結合 Bash、SQLite 和 LaTeX,我開發了一套自動化方案,有效提升了報告的產出效率和品質。

  graph LR
    D[D]
    A[滲透測試工具] --> B(JSON/XML 報告);
    B --> C[Bash & SQLite];
    C --> D{資料處理與儲存};
    D --> E[LaTeX];
    E --> F(PDF 報告);

圖表説明: 這個流程圖簡潔地展示了整個自動化報告生成的流程:從滲透測試工具取得資料,利用 Bash 和 SQLite 進行處理和儲存,最後使用 LaTeX 生成專業的 PDF 報告。

Bash 與 SQLite:資料處理的雙劍合璧

Bash,如同瑞士刀般靈活,是我處理資料的首選工具。SQLite,輕巧與免設定,是儲存資料的理想選擇。兩者結合,威力倍增。

以下是一個 Bash 指令碼 process_data.sh,示範如何處理資料並存入 SQLite 資料函式庫:

#!/usr/bin/env bash

DB_NAME="pentest_results.db"

# 建立資料函式庫表格(如果不存在)
sqlite3 "$DB_NAME" "CREATE TABLE IF NOT EXISTS vulnerabilities (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    ip TEXT NOT NULL,
    port INTEGER NOT NULL,
    service TEXT,
    vulnerability TEXT
);"

# ... (從 Nmap、Nessus 等工具解析資料的程式碼) ...

# 將處理後的資料插入資料函式庫
while IFS= read -r line; do
  ip=$(echo "$line" | cut -d ',' -f 1)
  port=$(echo "$line" | cut -d ',' -f 2)
  service=$(echo "$line" | cut -d ',' -f 3)
  vulnerability=$(echo "$line" | cut -d ',' -f 4)

  sqlite3 "$DB_NAME" "INSERT INTO vulnerabilities (ip, port, service, vulnerability)
  VALUES ('$ip', '$port', '$service', '$vulnerability');"
done < processed_data.txt

echo "資料已成功匯入資料函式庫。"

這個指令碼首先建立一個名為 vulnerabilities 的表格,用於儲存漏洞資訊。接著,它會讀取 processed_data.txt 檔案,逐行解析資料,並將解析後的 IP、埠號、服務和漏洞資訊插入資料函式庫。

LaTeX:開發專業報告的利器

LaTeX,如同一位排版大師,能將資料轉化為美觀、專業的報告。以下是一個 Bash 指令碼 generate_report.sh,示範如何使用 LaTeX 生成報告:

#!/usr/bin/env bash

DB_NAME="pentest_results.db"

# 生成 LaTeX 報告內容
generate_latex_content() {
  echo "\\documentclass{article}"
  echo "\\usepackage{booktabs}"
  echo "\\begin{document}"

  echo "\\title{滲透測試報告}"
  echo "\\author{玄貓}"
  echo "\\date{\\today}"
  echo "\\maketitle"

  # 從資料函式庫提取資料並生成表格
  echo "\\section*{漏洞摘要}"
  sqlite3 -header -csv "$DB_NAME" "SELECT ip, port, service, vulnerability FROM vulnerabilities;" | sed 's/\"//g' | while IFS=, read -r ip port service vulnerability; do
      echo "$ip & $port & $service & $vulnerability \\\\"
  done | xargs printf "\\begin{tabular}{llll} \\toprule IP & Port & Service & Vulnerability \\\\ \\midrule %s \\bottomrule \\end{tabular}\n"

  echo "\\end{document}"
}


# 生成 LaTeX 檔案
generate_latex_content > pentest_report.tex

# 編譯 LaTeX 檔案為 PDF
pdflatex pentest_report.tex

echo "報告已生成: pentest_report.pdf"

這個指令碼會從資料函式庫中提取漏洞資訊,並使用 LaTeX 的表格環境生成報告內容。最後,它會使用 pdflatex 命令將 LaTeX 檔案編譯成 PDF 報告。

  sequenceDiagram
    participant Bash
    participant SQLite
    participant LaTeX
    Bash->>SQLite: 查詢資料
    SQLite-->>Bash: 傳回資料
    Bash->>LaTeX: 傳遞資料
    LaTeX->>LaTeX: 生成 PDF 報告

圖表説明: 這個序列圖清晰地展示了 Bash、SQLite 和 LaTeX 之間的互動過程,Bash 從 SQLite 查詢資料,然後將資料傳遞給 LaTeX 生成 PDF 報告。

透過這個自動化方案,我告別了手動編寫報告的煩惱,將更多時間投入到技術研究和實踐中。這不僅提升了我的工作效率,也確保了報告的品質和一致性,讓我能更好地守護網路安全。

在網路安全領域,滲透測試是一項關鍵任務。然而,測試完成後的報告撰寫卻常常耗費大量時間和精力。傳統的手動報告方式容易出錯,與難以保持一致性。為瞭解決這個問題,我開發了一套根據 Python 和 LaTeX 的自動化報告生成方案,能有效提升效率並確保報告的專業度。

import os
import sqlite3

def query_db(ip_address):
    conn = sqlite3.connect('pentest_results.db')
    cursor = conn.cursor()
    cursor.execute("SELECT port, service, status FROM scan_results WHERE ip = ?", (ip_address,))
    results = cursor.fetchall()
    conn.close()
    return results

def generate_latex_content(ip_addresses):
    latex_content = r'''
\documentclass{article}
\usepackage{booktabs}
\begin{document}

\title{滲透測試報告}
\author{玄貓(BlackCat)}
\date{\today}
\maketitle
'''

    for ip in ip_addresses:
        ports_info = query_db(ip)
        latex_content += f"\\section*{{{ip} 掃描結果}}\n"
        latex_content += r'''
\begin{table}[h]
\centering
\begin{tabular}{@{}lll@{}}
\toprule
埠口 & 服務 & 狀態 \\
\midrule
'''
        for port, service, status in ports_info:
            latex_content += f"{port} & {service} & {status} \\\\\n"

        latex_content += r'''
\bottomrule
\end{tabular}
\caption{埠口掃描結果}
\end{table}
'''
    latex_content += r"\end{document}"
    return latex_content


ip_list = ["192.168.1.1", "192.168.1.2", "192.168.1.3"]
latex_output = generate_latex_content(ip_list)

with open("pentest_report.tex", "w") as f:
    f.write(latex_output)

os.system("pdflatex pentest_report.tex")

這段程式碼的核心邏輯在於 generate_latex_content() 函式。它首先定義 LaTeX 檔案的起始結構,包括標題、作者和日期。接著,它利用迴圈迭代每個 IP 位址,並透過 query_db() 函式從資料函式庫中提取對應的埠口資訊。取得資料後,程式碼會將這些資訊動態地格式化成 LaTeX 表格,並增加到最終的 LaTeX 檔案內容中。最後,pdflatex 命令會將生成的 .tex 檔案編譯成 PDF 格式的報告。我特意選擇了 booktabs 套件來最佳化表格樣式,使其更具專業感。query_db() 函式則封裝了資料函式庫查詢的邏輯,提升程式碼的模組化和可讀性。

  graph LR
    B[B]
    C[C]
    A[執行指令碼] --> B{查詢資料函式庫};
    B --> C{生成 LaTeX 內容};
    C --> D[編譯成 PDF];

圖表説明: 此流程圖清晰地展現了指令碼的執行流程,從指令碼啟動、資料函式庫查詢、LaTeX 內容生成,最終到 PDF 報告的編譯。

  classDiagram
    class ReportGenerator{
        +generate_latex_content()
        +query_db()
    }

圖表説明: 這個類別圖描述了程式碼的核心結構。ReportGenerator 類別包含兩個主要方法:generate_latex_content() 負責生成 LaTeX 內容,而 query_db() 則負責從資料函式庫中提取必要的資訊。

這個自動化方案不僅大幅提升了報告生成的效率,更重要的是,它確保了報告的一致性和準確性,減少了人為錯誤的可能性。此外,這個方案具有高度的靈活性,可以根據實際需求調整和擴充套件,例如整合到 CI/CD 流程中,實作完全自動化的滲透測試報告生成。