
SKILLQ — 滲透測試專案助手`
SKILLQ — 滲透測試專案助手(中文版)
把滲透測試中最耗時的行政工作——方法論追蹤、原始掃描資料整理、報告
撰寫——變成可重複使用的結構化流程。SKILLQ 專為已獲授權的安全評估
專案設計:它不包含任何掃描、漏洞利用或攻擊自動化功能,只處理測試人員
自身已合法授權測試所蒐集到的資料。
為什麼需要這個工具
不管測試目標是什麼,每個滲透測試專案都會遇到同樣三個麻煩:讓不同測試
人員之間的方法論檢查清單保持一致、把三種不同掃描工具的輸出格式整理
成同一份發現清單、以及寫出一份客戶真的會看的報告。SKILLQ 把這三件事
標準化,讓顧問或內部資安團隊把時間花在分析上,而不是格式整理上。
套件內容
| 路徑 | 功能說明 |
|---|---|
SKILL.md |
技能定義檔——agent runtime 的進入點,說明何時、如何使用各模組 |
scripts/parse_nmap.py |
解析 nmap -oX XML 輸出為正規化 CSV(主機、連接埠、服務、banner) |
scripts/parse_burp.py |
解析 Burp Suite XML 發現匯出檔為正規化 CSV(主機、路徑、名稱、嚴重度) |
scripts/parse_nessus.py |
解析 Nessus/OpenVAS .nessus 檔為正規化 CSV,含 CVSS v3 向量/分數 |
scripts/aggregate_findings.py |
合併上述三份 CSV、依主機+標題去重,並依風險排序 |
scripts/cvss_helper.py |
依 FIRST.org 公開公式,由向量字串計算 CVSS v3.1 基礎分數 |
references/methodology_web_api.md |
Web/API 評估檢查清單,對應 OWASP WSTG v4.2 與 OWASP API Security Top 10 |
references/methodology_internal_network.md |
內部網路/Active Directory 檢查清單,對應 NIST SP 800-115 |
references/methodology_cloud.md |
雲端基礎設施(AWS/Azure/GCP)檢查清單,對應 CIS Benchmarks |
references/report_template.md |
完整報告骨架——executive summary、範圍、逐項發現、風險矩陣、附錄 |
references/agent_card.md |
上架文案草稿與定價建議(供上架者參考,非 runtime 技能的一部分) |
LEGAL_AND_LICENSE.md |
免責聲明、授權條款與商標聲明——上架前請先填入你自己的資訊 |
註:
scripts/內的程式碼與英文版完全相同(程式邏輯與 CSV 欄位名稱
維持英文以利跨團隊/跨工具相容),僅文件與範本以繁體中文撰寫。
需求環境
Python 3.8 以上,無需額外套件——全部使用標準函式庫
(xml.etree.ElementTree、csv、argparse)。不用 pip install 任何
東西,不會對外連線回傳資料,執行時也不需要網路。
如何選擇模組
單一專案可以同時使用一個、兩個、或全部三套檢查清單:
- Web/API(
methodology_web_api.md)——目標是網頁應用程式或 API
的評估,黑箱、灰箱、白箱皆適用。 - 內部網路/AD(
methodology_internal_network.md)——針對內部
基礎設施的評估,無論是「假設已入侵」或「外部立足點」情境。 - 雲端基礎設施(
methodology_cloud.md)——AWS/Azure/GCP 帳號的
組態與存取控制檢視。這是組態盤點清單,不是對服務商基礎設施的實際
攻擊。
把對應的檔案複製成 checklist_<專案名稱>.md,隨專案進度勾選完成
項目——每個專案保留獨立的檢查清單檔案,方便日後稽核追溯。
快速開始
# 1. 把各掃描工具的原始輸出解析為正規化 CSV
python3 scripts/parse_nmap.py scan.xml -o nmap_findings.csv
python3 scripts/parse_burp.py burp_export.xml -o burp_findings.csv
python3 scripts/parse_nessus.py scan.nessus -o nessus_findings.csv
# 2. 合併成一份去重、依風險排序的發現清單
python3 scripts/aggregate_findings.py nmap_findings.csv burp_findings.csv nessus_findings.csv -o master_findings.csv
# 3. 由向量字串計算(或覆核)CVSS v3.1 基礎分數
python3 scripts/cvss_helper.py "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
實際範例
假設一筆 Nessus 發現是 severity="2"、cvss3_vector=CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N,執行parse_nessus.py 後會產出這樣的一列:
host,port,protocol,plugin_id,plugin_name,severity,cvss3_vector,cvss3_score,description,solution
10.0.0.5,443,tcp,12345,TLS Weak Cipher,Medium,CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N,5.3,Weak TLS cipher suites enabled.,Disable weak ciphers.
再搭配一份 nmap 與一份 Burp 的 CSV 一起跑 aggregate_findings.py,master_findings.csv 會產出每筆發現各一列、依 CVSS 分數(缺分數則依
Critical/High/Medium/Low/Info 順序)由高到低排序——可以直接套進references/report_template.md 的發現章節。
CLI 參數說明
每支腳本都支援 -h/--help 印出完整參數列表。摘要如下:
| 腳本 | 必填參數 | 選項 | 輸出欄位 |
|---|---|---|---|
parse_nmap.py |
input(nmap -oX 檔案) |
-o/--output(預設 nmap_findings.csv) |
host, hostname, port, protocol, state, service, product, version, banner |
parse_burp.py |
input(Burp XML 匯出檔) |
-o/--output(預設 burp_findings.csv) |
host, path, name, severity, confidence, issue_background, remediation_background |
parse_nessus.py |
input(.nessus 檔案) |
-o/--output(預設 nessus_findings.csv) |
host, port, protocol, plugin_id, plugin_name, severity, cvss3_vector, cvss3_score, description, solution |
aggregate_findings.py |
一或多份上述解析腳本產出的 CSV | -o/--output(預設 master_findings.csv) |
host, port, source, title, severity, cvss_score, description |
cvss_helper.py |
vector(CVSS v3.1 字串,須以 CVSS:3 開頭) |
— | 印出 Base Score: X.X (Rating) |
aggregate_findings.py 會自動依 CSV 標頭列辨識來源是哪支解析腳本產出,
輸入順序不拘,也可以只挑你實際擁有的來源(例如只有 nmap + Nessus,
沒有 Burp 資料也沒關係)。
彙整與評分邏輯說明
- 去重依
(host, port, title)三欄做比對(不分大小寫)。兩筆撞到
同一個 key 時,保留描述文字較長的那一筆(假設它資訊較完整)。 - 排序優先採用數值型 CVSS 分數;若無分數,則退回
Critical > High > Medium > Low > Info > 未評分 的順序。沒有分數也
沒有嚴重度的資料列不會被捨棄,會標記為「未評分—待分析師輸入」,
確保沒有任何一筆發現被默默漏掉。 - CVSS 計算完全依照 FIRST.org 公開發布的 CVSS v3.1 基礎分數公式
實作(https://www.first.org/cvss/v3-1/specification-document)。
僅接受CVSS:3.x格式的向量字串,若向量缺少必要欄位會明確報錯並
指出缺了哪個欄位——不會憑空猜測。
報告撰寫流程
- 確認
master_findings.csv(或等效清單)已定稿。 - 複製
references/report_template.md,填入每個{{佔位符}}。 - 報告中每一筆發現都必須可追溯到彙整清單中的一列,或測試人員實際
蒐集到的佐證——沒有真正執行過的重現步驟不該寫進報告。 - 交付前先核對:executive summary 引用的嚴重度統計數字,是否與發現
章節的實際數字一致。 - 需要
.docx或.pdf交付格式?先完成 Markdown 草稿,再交給你
agent runtime 上的文件產出技能/工具處理。
疑難排解
| 症狀 | 可能原因 | 排解方式 |
|---|---|---|
[!] Could not parse XML |
輸入檔不是有效 XML,或是不同於預期的匯出格式 | 確認匯出格式正確(例如 nmap 用 -oX 而非 -oN;Burp 用「Export findings as XML」而非 HTML) |
[!] No <host>/<issue>/<ReportItem> entries found |
檔案能解析但內容為空,或是用錯工具的格式 | 打開檔案確認根元素是否符合 nmap/Burp/Nessus 的 schema |
aggregate_findings.py 顯示來源 unrecognized |
CSV 標頭列跟三支解析腳本的輸出不完全一致 | 用套件內附的解析腳本重新產生 CSV,不要手動改標頭 |
cvss_helper.py 說缺少某個 metric |
向量字串不完整,或用了 CVSS v2 語法 | CVSS v3.1 向量需要 8 個基礎 metric 全部齊全(AV/AC/PR/UI/S/C/I/A),且須以 CVSS:3 開頭 |
版本規劃
目前為 SKILLQ v1.0。已規劃的後續更新項目:原生 OpenVAS XML 支援
(與 Nessus 的 .nessus 格式不同)、CSV 之外的 JSON 匯出選項、以及
第四個模組(行動應用程式評估)。訂閱制買家在這些功能上線時會自動
取得更新。
重要提醒
本技能假設所有輸入資料皆來自買家已獲授權執行的測試。它不包含任何
掃描、漏洞利用、或攻擊自動化功能——僅提供資料解析、彙整與文件產出
工具。完整免責聲明、授權條款與商標聲明請見 LEGAL_AND_LICENSE.md,
上架前請先填入你自己的資訊。


