最強半自動化抓雞工具打造思路


一、說明

你向別人說你是搞安全的,外行人會問你能盜QQ嗎內行人會問你能拿站嗎,在很長一段時間里只能反復尷尬地回答不能,然后外行人就對你興趣缺缺內行人也對你興致缺缺。

大概2010年以前尤其2005年以前,一是廠商並沒有那么重視安全所以漏洞很多二是用戶也缺乏安全意識有補丁也很少打,造成的結果就是漏洞很多且長時間內都可利用。基於這種情況很容易地就可以編寫一款自動化工具然后在很長時間內都能用來攻破大量系統,但在現在漏洞密度越來越小利用難度越來越高0day/1day時間越來越短的環境下,這種模式越來越難以持續了。新人們不能不比老人們當年我學幾天就拿下xxx實在不是人的水平低了而是外部安全水平高了。

你說得很有道理但是誰在意呢,正如妹子問你有沒有房,你說房價漲得太快啦老家剛裝修啦,那就是沒有嘛。想了一想搞安全要求能拿站應該不算過分,環境怎么樣是我們自己要去處理的問題而不是只要求結果的領導們要了解的問題。難道老人們水水就叫能拿站新人就毫無捷徑可走被貼上一代不如一代的標簽嗎。想了一想,正如剛改革開放只要稍微努力都能奔小康現在搞IT還有希望跨階層,只要把自動化發揮到極致輕松抓雞還是有可能。

 

二、自動化攻擊思路

集成化思路其實在很多地方都存在,比如cvedetails上會盡量列出關聯的exploit,再如shodan和zoomeye上搜索主機會列出相關CVE,又如AutoSploit就直接是一個抓雞工具。

cvedetails首先有些exp並沒有列到對應的cve條目上(不懂為什么),其次在真正的滲透中我們需要自己掃描ip存在的服務。

shodan和zoomeye主是列出了主機相關的cve。並沒有直接列出exp。

autosploit為了實現自動化,只能使用特定格式的msf模塊,一些可以攻擊的百規范化exp都被舍棄了。

結命以上各工具優缺點,我們這里選實現的“IP-服務-CVE-EXP”三步,舍棄掉最后攻擊一步。

其實從標題“抓雞”可知最初而言是希望能實現autosploit那樣的自動化攻擊,但實現過程中發現存在想得太簡單,不是別人只想到集成而沒想到自動化而是有很多問題。所以本文“抓雞”是標題黨,“最強”也是標題黨,后來補上去的“半自動化”也是標題黨,程序只算能運行起來。不過對於采集CVE、MSF模塊和exploitdb的exp及進一步的應急響應都還算有些意義。

 

2.1 指定ip查找exp

經過以下三步,得出最終IP及可用EXP(由IP確認EXP)

步驟 輸入 處理 輸出
第一步 IP Shodan/Nmap IP開放的服務及版本
第二步 IP開放的服務及版本 cvedetails類似數據庫 服務及版本存在的CVE
第三步 服務及版本存在的CVE metasploit/exploit-db CVE對應的exp

 

 

 

 

 

2.2 使用最新exp找出適用該exp的ip

經過以下三步,得出最終IP及可用EXP(由EXP確認IP)

步驟 輸入 處理 輸出
第一步 最新的exp metasploit/exploit-db exp相關cve
第二步 exp相關cve cvedetails類似數據庫 cve影響的服務及版本
第三步 cve影響的服務及版本 Shodan 存在服務及版本的IP

 

 

 

 

 

 

三、數據庫建設思路

在上一節中,我們提到了以下幾項:shodan、cvedetails、metasploit和exploit-db。

 

3.1 否定聯網方式

首先,聯網方式受網速限制。這些網站都是國外網站速度相對不穩定,幾個網站依次訪問耗時會較長。

其次,聯網方式受網站保護策略限制。頻繁該問IP有可能被封掉(雖然測試中尚未發現),其次像exploit-db查詢需要驗證碼。

再次,聯網方式受網站排版限制。比如cvedetails查詢一個產品存在的cve列出的先是一個匹配產品匯總表,點進去再是一個漏洞年份匯總表,再點進去才是CVE列表,要走好幾步這是很麻煩的。

除了shodan必然需要聯網使用,cvedetails、metasploit和exploit-db都不適宜聯網方式。

 

3.2 否定metasploit和exploit-db使用管道形式

在kali上metasploit通過啟動msfconsole然后使用search命令可以進行搜索,但使用msfconsole的都會感覺到其啟停是比較耗費資源和時間的,所以啟動msfconsole查詢然后通過管道獲取結果的形式並不好。

在kali上可以使用searchsploit命令查找exploit-db的exp,這資源和時間都算可接受,但是一定要安裝好exploit-db才能用這限制很大也不是很理想。

 

3.3 數據庫建設思路

在否定聯網方式和否定管道形式后,剩下的只能建設本地數據庫,而建設又可以分為在線建設和離線建設兩種思路。

在線建設就是一個個頁面去訪問頁面然后解析入庫,這種方式一是花費時間長,二是在實踐時中間常因為請求超時和解碼有誤而使程序中斷,三是這種暴力的形式容易被封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的區間。

 

3.4 數據庫選擇

首先,是選關系型數據庫還是非關系型數據庫,根據實際來看使用關系型數據庫當有子查詢時速度很慢,建索引也還是比較耗時間,所以可能非關系型數據庫會快些。但是我需要同步到elk但elk不支持從非關系型讀取數據,所以只能使用非關系型數據庫。另外如果你要自己改成非關系型數據庫那工作量比較大。

其次,選擇關系型數據庫后還要確定具體選哪個數據庫,其實不扯到高可用這些東西僅就使用來說關系型數據庫都差別不大,開始想用sqlite但同步到elk時一直報錯處理不了,后來很慢想oracle可能快一些但太耗資源電腦運行不起,所以就用mysql。你自己要改成其他數據庫,連接語句和sql語句稍微修改應該就可以了。

 

3.5 數據庫表設計

3.5.1 cve表設計

cve_records表各字段如下:

對應cvedetails以下部份:

最終數據示例如下:

 

cve_affect_records表用於記錄受cve影響的產品,各字段如下:

對應cvedetails以下部份:

最終收集數據示例如下:

 

cve_refer_records表用於記錄cve的參考鏈接,各字段如下:

對應cvedetails以下部分:

 最終收集數據示例如下:

 

3.5.2 msf表設計

msf_records表各字段如下:

對應模塊查看頁面的那幾項內容:

 最終收集數據示例如下:

 

3.5.3 edb表設計

edb_records表各字段如下:

對應edb查看頁面如下幾項內容:

 最終收集數據示例如下:

 

四、程序說明

4.1 程序使用說明

程序寫了兩周,實現效果也不是很好不是很有心情仔細說明,另外文件中也有一定注釋。

配置好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。

 

4.2 運行環境

語言:python3

額外安裝庫:pip install requests requests-html pymysql sqlalchemy shodan beautifulsoup4

 

4.3 程序源代碼

代碼比較多,直接上github(db目錄是我收集好的數據解壓出來導入mysql即可):https://github.com/PrettyUp/expdb


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM