你向別人說你是搞安全的,外行人會問你能盜QQ嗎內行人會問你能拿站嗎,在很長一段時間裏只能反覆尷尬地回答不能,而後外行人就對你興趣缺缺內行人也對你興致缺缺。html
大概2010年之前尤爲2005年之前,一是廠商並無那麼重視安全因此漏洞不少二是用戶也缺少安全意識有補丁也不多打,形成的結果就是漏洞不少且長時間內均可利用。基於這種狀況很容易地就能夠編寫一款自動化工具而後在很長時間內都能用來攻破大量系統,但在如今漏洞密度愈來愈小利用難度愈來愈高0day/1day時間愈來愈短的環境下,這種模式愈來愈難以持續了。新人們不能不比老人們當年我學幾天就拿下xxx實在不是人的水平低了而是外部安全水平高了。python
你說得頗有道理可是誰在乎呢,正如妹子問你有沒有房,你說房價漲得太快啦老家剛裝修啦,那就是沒有嘛。想了一想搞安全要求能拿站應該不算過度,環境怎麼樣是咱們本身要去處理的問題而不是隻要求結果的領導們要了解的問題。難道老人們水水就叫能拿站新人就毫無捷徑可走被貼上一代不如一代的標籤嗎。想了一想,正如剛改革開放只要稍微努力都能奔小康如今搞IT還有但願跨階層,只要把自動化發揮到極致輕鬆抓雞仍是有可能。mysql
集成化思路其實在不少地方都存在,好比cvedetails上會盡可能列出關聯的exploit,再如shodan和zoomeye上搜索主機會列出相關CVE,又如AutoSploit就直接是一個抓雞工具。git
cvedetails首先有些exp並無列到對應的cve條目上(不懂爲何),其次在真正的滲透中咱們須要本身掃描ip存在的服務。github
shodan和zoomeye主是列出了主機相關的cve。並無直接列出exp。web
autosploit爲了實現自動化,只能使用特定格式的msf模塊,一些能夠攻擊的百規範化exp都被捨棄了。sql
結命以上各工具優缺點,咱們這裏選實現的「IP-服務-CVE-EXP」三步,捨棄掉最後攻擊一步。數據庫
其實從標題「抓雞」可知最初而言是但願能實現autosploit那樣的自動化攻擊,但實現過程當中發現存在想得太簡單,不是別人只想到集成而沒想到自動化而是有不少問題。因此本文「抓雞」是標題黨,「最強」也是標題黨,後來補上去的「半自動化」也是標題黨,程序只算能運行起來。不過對於採集CVE、MSF模塊和exploitdb的exp及進一步的應急響應都還算有些意義。api
通過如下三步,得出最終IP及可用EXP(由IP確認EXP)安全
步驟 | 輸入 | 處理 | 輸出 |
第一步 | IP | Shodan/Nmap | IP開放的服務及版本 |
第二步 | IP開放的服務及版本 | cvedetails相似數據庫 | 服務及版本存在的CVE |
第三步 | 服務及版本存在的CVE | metasploit/exploit-db | CVE對應的exp |
通過如下三步,得出最終IP及可用EXP(由EXP確認IP)
步驟 | 輸入 | 處理 | 輸出 |
第一步 | 最新的exp | metasploit/exploit-db | exp相關cve |
第二步 | exp相關cve | cvedetails相似數據庫 | cve影響的服務及版本 |
第三步 | cve影響的服務及版本 | Shodan | 存在服務及版本的IP |
在上一節中,咱們提到了如下幾項:shodan、cvedetails、metasploit和exploit-db。
首先,聯網方式受網速限制。這些網站都是國外網站速度相對不穩定,幾個網站依次訪問耗時會較長。
其次,聯網方式受網站保護策略限制。頻繁該問IP有可能被封掉(雖然測試中還沒有發現),其次像exploit-db查詢須要驗證碼。
再次,聯網方式受網站排版限制。好比cvedetails查詢一個產品存在的cve列出的先是一個匹配產品彙總表,點進去再是一個漏洞年份彙總表,再點進去纔是CVE列表,要走好幾步這是很麻煩的。
除了shodan必然須要聯網使用,cvedetails、metasploit和exploit-db都不適宜聯網方式。
在kali上metasploit經過啓動msfconsole而後使用search命令能夠進行搜索,但使用msfconsole的都會感受到其啓停是比較耗費資源和時間的,因此啓動msfconsole查詢而後經過管道獲取結果的形式並很差。
在kali上可使用searchsploit命令查找exploit-db的exp,這資源和時間都算可接受,可是必定要安裝好exploit-db才能用這限制很大也不是很理想。
在否認聯網方式和否認管道形式後,剩下的只能建設本地數據庫,而建設又能夠分爲在線建設和離線建設兩種思路。
在線建設就是一個個頁面去訪問頁面而後解析入庫,這種方式一是花費時間長,二是在實踐時中間常由於請求超時和解碼有誤而使程序中斷,三是這種暴力的形式容易被封IP(metasploit最敏感,exploit最寬容;在被封IP時你能夠感覺到動態IP也有好處)。基於以上緣由能離線建設就離線建設。
數據庫 | 建設方式 | 更新方式 | url |
cve數據庫 | cvedetails雖然沒提供離線下載,但cvedetails的cve數據來源於nvd,nvd提供cve離線下載。離線建設 | 每日下載nvdcve-modified.xml更新數據庫 | https://nvd.nist.gov/vuln/data-feeds |
metasploit數據庫 | metasploit在github有託管。離線建設。 | metasploit實在太容易封ip,git同步項目後從新遍歷採集 | https://github.com/rapid7/metasploit-framework |
exploitdb數據庫 | exploitdb在github也有託管,可是cve只向exploitdb合做者提供而cve是程序的關鍵,因此只能使用在線建設 | 仍然只能在線追蹤 | https://www.exploit-db.com/ |
關於更新還有如下幾個關鍵點:
cvedetails在排列cve時只是簡單地order by cve desc,這致使的問題就是排在最前面的cve並不必定是最新的cve,好比CVE-2018-1002209(2018-07-25發佈)會排在CVE-2018-19115(2018-11-08發佈)前面,因此cvedetails並不適合用來採集更新。
因爲cve數據庫使用nvdcve-modified.xml進行更新,這就要求必須天天都執行更新程序否則cve就會不完整。nvdcve-modified.xml一是包含新發布的cve二是包含舊cve的更改,若是要保證cve的完整性須要從新下載擱置更新的年份的xml從新讀取,若是要保證參考等的完整性那就要刪除數據庫所有從新解析入庫(仍是要時間的大概半天)。
metasploit一個模塊發佈後通常不會再改動,因此咱們以module_name爲關鍵字,每次git pull同步後若是已存在就放棄插入若是還沒有存在就插入,這能很好地保證metasploit數據庫的完整性。單純exploit模塊整個過程大概只須要半個小時。
exploitdb在線建設花費比較長的時間,一是在線不斷請求耗時二是雖然比較寬容但鏈接過久也會被禁,斷斷續續整個採集過程大概須要一週。
exploitdb以edbid爲關鍵字,更新時依次訪問exploitdb的remote、webapps、local、dos四大頁面該頁面,從頭開始解析若是查到已存在expid則終止往下讀取。remote等一個頁面大概能顯示一到三個月內的exp,在此時間範圍內能彌補缺失的記錄若是超出一頁那麼那些記錄也將不會補追補。固然你也能夠在remote等中一頁頁地追蹤下去但考慮如下兩點這裏不這麼實現,但這裏一是考慮一個月時間已經比較長,二是edbid是遞增的能夠自由地設置採集的edbid的區間。
首先,是選關係型數據庫仍是非關係型數據庫,根據實際來看使用關係型數據庫當有子查詢時速度很慢,建索引也仍是比較耗時間,因此可能非關係型數據庫會快些。可是我須要同步到elk但elk不支持從非關係型讀取數據,因此只能使用非關係型數據庫。另外若是你要本身改爲非關係型數據庫那工做量比較大。
其次,選擇關係型數據庫後還要肯定具體選哪一個數據庫,其實不扯到高可用這些東西僅就使用來講關係型數據庫都差異不大,開始想用sqlite但同步到elk時一直報錯處理不了,後來很慢想oracle可能快一些但太耗資源電腦運行不起,因此就用mysql。你本身要改爲其餘數據庫,鏈接語句和sql語句稍微修改應該就能夠了。
cve_records表各字段以下:
對應cvedetails如下部份:
最終數據示例以下:
cve_affect_records表用於記錄受cve影響的產品,各字段以下:
對應cvedetails如下部份:
最終收集數據示例以下:
cve_refer_records表用於記錄cve的參考連接,各字段以下:
對應cvedetails如下部分:
最終收集數據示例以下:
msf_records表各字段以下:
對應模塊查看頁面的那幾項內容:
最終收集數據示例以下:
edb_records表各字段以下:
對應edb查看頁面以下幾項內容:
最終收集數據示例以下:
程序寫了兩週,實現效果也不是很好不是頗有心情仔細說明,另外文件中也有必定註釋。
配置好setting相關項,運行cve_offline_parse.py,就會收集cve數據
配置好setting相關項,運行msf_offline_parse.py,就會收集msf模塊數據
配置好setting相關項,運行edb_online_parse.py,就會收集edb模塊數據
項目文件結構總體以下:
|-config| | |-setting.py----程序配置文件,本身使用時主要修改這個文件 | |-dao| | |-src_db_dao.py----存放各dao數的文件 | |-model| | |-src_db_model.py----存放數據庫表對應的model的文件 | |-cve_offline_parse.py----經過下載nvd的xml解析入庫cve的文件 | |-cve_online_parse.py----本來設計經過讀取cvedetails解析入庫cve的文件,實際不使用 | |-daily_trace_report.py----檢查cve、msf、edb更新狀況併發送通知郵件的文件 | |-edb_online_parse.py----經過遍歷www.exploit-db.com解析入庫exp的文件 | |-exploit_tool.py----所謂的「半自動化抓雞工具」實現文件 | |-msf_offline_parse.py----經過git同步github的metasploit-framework解析入庫模塊的文件 | |-msf_online_parse.py----本來設計經過遍歷www.rapid7.com/db/modules解析入庫模塊的文件,實際只用其追蹤更新功能。 | |-search_engine.py----shodan搜索實現文件
說明:2018.12.08發現exploit-db網站升級,新寫edb_online_parse_new.py替代舊的edb_online_parse.py。
語言:python3
額外安裝庫:pip install requests requests-html pymysql sqlalchemy shodan beautifulsoup4
代碼比較多,直接上github(db目錄是我收集好的數據解壓出來導入mysql便可):https://github.com/PrettyUp/expdb