滲透測試報告自動生成工具
背景
在安服仔的日子里,發現其他人輸出的滲透測試報告結果不規范,主要在報告質量、內容、字體、及修復方案中存在諸多問題,而且大部分安服仔需要對每次的項目結果進行統計整理,方便后續跟蹤復測。
因此研發了Savior—滲透測試報告輔助生成系統,起這個名字也是為了拯救大多數滲透測試工程師,
告別繁瑣的滲透測試報告編寫過程及漏洞統計過程。
系統框架
前端:Ant Design Pro
后端:Django REST Framework
數據庫:Mysql
主要功能
用戶管理:主要是方便統計漏洞的發現者,后續可能大概也許會添加漏洞統計模塊,根據提交數據、漏洞類型、時間等進行統計報表,當前用戶管理模塊僅允許通過Django后臺進行修改,前端只負責展示,主要是我太懶了。
項目管理:根據項目的不同可上傳項目的專屬滲透測報告模板,并可以根據需要進行模板自定義模板(/Demo/demo.docx);
模板自定義:不用修改源代碼,僅需修改word即可進行模板自定義;
整改建議管理:此平臺主要就是為了體現標準化輸出,因此可通過內置漏洞描述及修復建議進行快速輸出,并支持自定義修改(/Demo/常規WEB滲透測試漏洞描述及修復方法.docx);
一鍵生成:通過提交報告模塊,內聯項目模板,快速生成滲透測試報告,真正達到了一鍵生成,并確保報告內數據準確、字體統一、格式標準;
自動郵件:在生成報告后可通過用戶管理配置的自動郵件發送功能進行郵件通知,可自定義郵件模板,這樣再報告給客戶的時候就可以直接轉發了(暖男功能);
漏洞統計:每次滲透過后,需要挨個查找報告進行統計整理,現在只要提交報告后,后臺會自動聯動;
漏洞報表一鍵導出
漏洞跟蹤:增加了漏洞狀態字段,創建報告后,漏洞狀態默認為新增,漏洞管理模塊可進行復測,包括已整改、未整改兩種狀態;
相關預覽
Demo:http://savior.sec404.cn
演示賬號:admin
演示密碼:Savior@404
安裝指南
首先將代碼clone到本地:
git clone https://github.com/Mustard404/Savior.git
Docker部署
我們推薦使用Docker進行部署,相對于源碼部署更為簡單和快速。
部署前請務必先安裝Docker及docker-compose。
修改配置文件
首先復制根目錄的.env.docker并重命名為.env,修改其中的Email Settings和initial Administrator配置。
這兩個配置分別控制郵件提醒,以及初始管理帳號密碼及郵箱。
同時需要注意以下兩點:
1. 務必把郵箱修改為自己郵箱,不然可能會出現非預期錯誤!
2. 如果使用阿里云、騰訊云服務器,請使用smtp的ssl協議,兩家云廠商默認封禁了25端口。
一鍵啟動
docker-compose up -d
訪問 http://127.0.0.1:8000即可看到頁面。
修改啟動端口
如果想修改啟動端口,可以修改docker-compose.yaml文件中web容器的ports。
默認為8000:8000,比如要修改為8080端口可改為8080:8000。
源碼部署
所需環境:
python 3.8+(測試過3.6也沒問題,其他版本自行測試)
yarn 1.22+
Pandoc
Mysql 5.7
前端環境
cd app yarn && yarn start:no-mock
環境變量設置 創建字符集為utf-8編碼的數據庫。
復制**.env.docker為.env**,并配置數據庫、郵箱、管理員等信息。
務必把郵箱修改為自己郵箱,不然可能會出現非預期錯誤!
如果使用阿里云、騰訊云服務器,請使用smtp的ssl協議,兩家云廠商默認封禁了25端口。
后端環境
#開啟env環境 python3 -m venv env source env/bin/activate #安裝依賴 python -m pip install -r requirements.txt -i http://pypi.doubanio.com/simple --trusted-host pypi.doubanio.com #同步數據庫 python manage.py makemigrations api python manage.py migrate python manage.py init_admin #啟動后端 python manage.py runserver 0.0.0.0:8000
源碼部署環境:
前臺頁面:http://127.0.0.1:8001
Django管理后臺:http://127.0.0.1:8000/api/admin/
使用手冊
初始化說明
其中Savior平臺包含兩個后臺頁面。考慮到安全性,目前用戶管理、項目管理托管于Django管理后臺(主要是這兩個模塊不會寫),其余功能均可通過前臺頁面實現。
前臺頁面:http://127.0.0.1:8000
Django管理后臺:http://127.0.0.1:8000/api/admin/
用戶管理
訪問Django管理后臺:http://127.0.0.1:8000/api/admin/,
請完善API>用戶的Name、Avatar、Autosentmail三個字段,分別控制報告的作者、頭像(圖片Url)、生成報告后自動發送滲透測試報告到郵箱。

項目管理
訪問Django管理后臺:http://127.0.0.1:8000/api/admin/
請通過API>Projects進行添加項目,可根據不通項目選擇不通的滲透測試報告模板。
參數說明:Project logo(項目Logo)、Project center(項目名稱)、Project description(項目描述)、Project template(滲透測試報告模板,目前標準模板可使用Demo/demo.docx,如需自定義模板,請參考模版自定義部分)

整改設置
訪問http://127.0.0.1:8000可進入Savior平臺,通過個人設置>整改設置>添加漏洞模板可進行設置漏洞類型、漏洞描述、修復建議從而達到標準化。
目前整理了一些通用的修復建議模板,請參考Demo/常規WEB滲透測試漏洞描述及修復方法.docx。

模板自定義
目前根據我經常使用的滲透測試報告模板生成了一個demo版本(請參考/Demo/demo.docx)。
當然您也可以根據自己的需求進行模板自定義,其中僅需在WORD模板中進行參數替換,目前Savior中具體參數如下:
{{report_no}} - 漏洞編號,通過時間戳自動生成,確保漏洞編號的唯一性
{{report_center}} - 測試項目,為項目管理中項目名稱
{{report_systemname}} - 系統名稱
{{report_start_time}} - 測試開始時間
{{report_end_time}} - 測試結束時間
{{report_author}} - 測試提交人,對應用戶管理的Name參數
{{report_test_url}} - 測試Url
{{vuls|length}} - 漏洞個數
{{vuls|vul_statistics(3)}} - 高危漏洞個數
{{vuls|vul_statistics(2)}} - 中危漏洞個數
{{vuls|vul_statistics(1)}} - 低危漏洞個數
以下漏洞詳情請利用{%tr for vuls in vuls %}{%tr endfor %}進行循環遍歷。
如想列出所有漏洞URL,則使用參數{%tr for vuls in vuls %}{{item.vul_url}}{%tr endfor %}
{{item.vul_url}} - 漏洞Url
{{item.vul_recurrence}} - 漏洞復現
{{item.vul_level}} - 漏洞危險等級
{{item.vul_describe}} - 漏洞描述
{{item.vul_modify_repair}} - 修復建議
注:Savior平臺滲透測試模板遵循Jinja2語法,更多內容請參考https://jinja.palletsprojects.com/en/3.0.x/
創建報告
如果我們完善了用戶信息、項目管理、整改設置后,就可以通過前端頁面進行創建報告,其大概流程如下:首先完善報告的基本信息。

選擇漏洞管理的添加漏洞功能。選擇漏洞類型后,漏洞名稱、漏洞描述、修復建議會根據整改設置進行自動聯動,并可根據需求進行自定義修改。
需要注意的是漏洞詳情處如果需要插入XSS語句,請進行url編碼后進行輸入!

注:未提交前請勿刷新頁面,此時漏洞詳情保存為前端。提交后會自動生成滲透測試報告并進行下載。

打開報告會提示更新域,更新請選擇是,再選擇更新整個目錄,此問題主要是為了更新目錄,不然滲透測試報告中目錄無法自動更新。


如果在用戶管理打開了Autosentmail功能,滲透測試報告會自動發送至我們郵箱,方便轉給甲方爸爸。

漏洞列表
訪問Savior平臺,選擇漏洞列表可進行漏洞統計并進行漏洞復測。
其中漏洞包含三個狀態(新發現、已修復、未修復)。

通過選擇導出數據功能,可將漏洞列表導出為Excle。

后續計劃
用戶管理、項目管理遷移至前端
大數據看板
致謝
感謝 echo503提供的項目幫助
感謝 lp0int提供的項目幫助
項目框架及Docker部署參考Github-Monitor:(https://github.com/VKSRC/Github-Monitor)