一、巡風:
巡風是一款什么東西,想必安全同行都不陌生吧。用它作為內網漏洞掃描管理架構是一種很好的選擇,掃描快,開源,還可自己編寫符合規則的POC直接放入相應目錄來擴展。今天下午趁着有點時間捋了一下巡風的代碼框架,順便學習下Flask的項目文件結構。在這里,還是鳴謝一下同程應急響應中心(YSRC),開源這款產品。
二、巡風的基本架構:
巡風是一款使用Python Flask框架編寫的網絡安全漏掃工具,BS架構。數據庫使用MongoDB,掃描器使用號稱五分鍾掃遍互聯網的masscan(當然真是情況沒有那么快)。漏掃使用編寫好的POC,POC全部開源在源碼目錄下的/vulscan/vuldb下面。其他輔助功能還有啟動一個DNS服務器(UDP 53端口),和一個web服務器,輔助檢測類似於Jenkins反序列化遠程命令執行(cve-2017-1000353)這種無回顯的漏洞。掃描任務的建立是根據用戶輸入添加到MongoDB數據庫中。另一個進程漏洞的一個腳本,會周期性檢查數據庫,取出任務隊列,執行任務。
三、巡風的漏掃POC原理:
1、有回顯的直接根據回顯判斷。
2、無回顯的,會生成一條訪問上文提到的web服務器的增加一個隨機字符串的payload。然后POC掃描腳本去請求這個服務器中有沒有這個隨機字符串,有就判定有漏洞,反之則沒有漏洞。
四、巡風的文間結構:
最外層:xunfeng(folder)
1、folder:
1.1 -> aider =>aider.py 該文件中會以socket起一個webserver 堅聽在8088端口(使用TCP協議)以及一個DNS監聽UDP 53端口的socket。
1.2 -> db =>大量json和bson文件,沒搞清楚具體用途。
1.3 -> dockerconf => mongoauth 用來創建mongodb的用戶,配置口令。start.sh是一個shell文件用來起docker話的啟動服務。
1.4 -> docs -> install => 大量markdown文件 用來講解各種OS下以及使用Docker如何安裝巡風。
1.5 -> install:
1.5.1 ->files => xunfeng 配置日志文件、pid文件等路徑,並啟動巡風的shell文件/xunfeng.conf巡風的配置文件。
1.5.2 => config.sh 配置shell腳本 install.sh 安裝shell腳本 uninstall.sh 卸載的shell腳本。
1.6 -> masscan linux和windows環境下的masscan程序執行文件。
1.7 -> nascan:
1.7.1 -> lib => 大量的自定義lib庫python文件,包含超類路由的cidr.py文件,icmp.py ping功能文件,mongo.py和mongodb數據了交互的文件,log.py日志功能文件以及start.py和scan.py等等。
1.7.2 -> plugin => masscan.py 調用masscan的文件。
1.7.3 => NAscan.py 啟動scan部分功能的py文件。
1.8 -> views:
1.8.1-> lib => AntiCSRF.py 防止csrf攻擊的自定義lib庫,以及其他自定義lib庫conn.py 連接功能模塊,createexcel創建excel結果表的模塊,登錄模塊login.py,搜索查詢模塊querylogic。
1.8.2 -> static 靜態文件庫 :包含css文件庫、js文件庫、圖片文件庫等等。
1.8.3 -> templates 模板文件庫:html文件模板。
1.8.4 -> __init__.py 創建app和數據庫對象的文件。
1.8.5 -> Views.py 路由函數文件。
1.9 -> vulscan:
1.9.1 ->vuldb POC文件庫。
1.9.2 => vulscan.py 漏掃進程主模塊文件。
2、files:
2.1 => Config.py 配置文件:web的用戶名、口令以及數據庫的用戶名、口令配置。明文硬編碼的。
2.2 => Dockerfile Docker文件 用來創建啟動運行Docker。
2.3 => LICENSE。
2.4 => README.md。
2.5 => requirements.txt Python的以來的庫都寫在該文本文件內。
2.6 => Run.py 文件 app啟動文件、可修改監聽的IP和端口。
2.7 => Run 啟動文件(linux下.sh文件;win下.bat文件)。
五、總結Flask項目文件結構:
1、總目錄:WWW(使用Project Name 做folder的名字也可以)
1.1 配置文件config.py。
1.2 啟動文件 manage.py 或者run.py。
1.3 License文件(文本文件)。
1.4 readme文件(markdown格式)。
1.5 requirements.txt(依賴庫說明文件)。
1.6 lib-floder 自定義插件或其他進程庫文件夾。
1.7 views 主程序文件夾:
1.7.1 lib 主程序依賴的庫文件package。
1.7.2 static 靜態文件庫。
1.7.3 templates 模板文件庫。
1.7.4 __init__.py app對象創建以及數據庫初始化的python文件。
1.7.5 views.py 路由函數定義文件。