您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關如何進行InsectsAwke自動化工具源碼分析,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
InsectsAwke是一個比較著名的開源的基于Python開發的漏洞掃描系統。啟蒙于Bugscan脫胎于Pocsuite。采用FLASK+MongoDB提供WEB服務。初步具備Por的健壯性。
漏洞掃描
通過調用創宇的 Pocsuite 進行掃描,掃描插件通過 Seebug
掃描目標只能是單個 IP 或者 URL,不支持網段掃描(公司是中小型公司,就忘寫這塊需求了),默認有80余個插件,大多是 Seebug 的免費PoC
任務周期可以選擇臨時、每日、每周或每月
資產管理
可以通過各資產庫創建漏洞掃描任務,同樣資產庫只能是單個 IP 或者 URL。
開啟端口發現功能后,后端會定時調用 nmap 對資產進行端口掃描,需要掃描的端口可以在設置里進行配置
域名發現功能
即子域名爆破功能,但目前功能尚不完善,只能通過配置字典進行暴力猜解,域名字典可以在設置處進行配置,項目 tests 文件夾內提供了一份子域名字典(字典來源 ring04h 的 wydomain 項目)
安裝虛擬機 16.04
更新為國內源
獲取項目源碼
git clone https://github.com/jeffzh4ng/InsectsAwake.git
安裝 Python 及 pip
sudo apt update sudo apt install python python-pip
安裝 MongoDB
安裝的是企業版MongoDB,普通的MongoDB是無法支持系統運行的
很多人按照freebuf 的安裝不成功,是因為載入的是3.4版本的安裝源可是當我們執行 sudo apt-get install -y mongodb-enterp的時候,如果沒有指定版本號的話,apt默認安裝最新的即3.6版本,所以mongodb-enterprise在安裝的時候就會出現問題。這里我們加載的是3.6版本的安裝源,所以可以安裝成功
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5 echo "deb [ arch=amd64,arm64,ppc64el,s390x ] http://repo.mongodb.com/apt/ubuntu xenial/mongodb-enterprise/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-enterprise.list sudo apt-get update sudo apt-get install -y mongodb-enterprise
其他系統安裝參考官方手冊:
https://docs.mongodb.com/manual/installation/
安裝 Python 依賴包
cd InsectsAwake sudo pip install pip -U sudo pip install -r requirements.txt
安裝nmap
sudo apt install nmap
配置數據庫
sudo mkdir -p /data/db sudo service mongod start mongo --host 127.0.0.1:27017
use InsectsAwake db.createUser({user:'you username',pwd:'you password',roles:[{role:'dbOwner',db:'InsectsAwake'}]}) exit
添加用戶
啟動數據庫
修改掃描器配置
class Config(): WEB_USER = 'admin' // 掃描器登錄用戶 WEB_PASSWORD = 'whoami' // 掃描器登錄密碼 WEB_HOST = '127.0.0.1' // 本地訪問 WEB_PORT = 5000 // Web服務端口 POCSUITE_PATH = basedir + '/../InsectsAwake/views/modules/scanner/pocsuite_plugin/' class ProductionConfig(Config): DB_HOST = '127.0.0.1' // 數據庫地址 DB_PORT = 27017 // 數據庫端口 DB_USERNAME = 'testuser' // 數據庫用戶 DB_PASSWORD = 'testpwd' // 數據庫密碼 DB_NAME = 'test' // 數據庫名 // 數據庫集合名 PLUGIN_DB = 'test_plugin_info' TASKS_DB = 'test_tasks' VULNERABILITY_DB = 'test_vuldb' ASSET_DB = 'test_asset' CONFIG_DB = 'test_config' SERVER_DB = 'test_server' SUBDOMAIN_DB = 'test_subdomain' DOMAIN_DB = 'test_domain' WEEKPASSWD_DB = 'test_weekpasswd'
比較懶,clone下來直接chmod -R 777 然后就可以愉快的修改文件了
掃描器配置文件路徑:InsectsAwake-Project/instance/config.py
初始化數據庫
cd /InsectsAwake/migration python start.py
運行系統
sudo ./run.sh restart
run.sh會出現有關nohup的報錯可以參考 https://blog.csdn.net/educast/article/details/28273301 進行適當修改
成功
項目默認運行在127.0.0.1:5000 (可以 修改 默認的 WEB_HOST 及 WEB_PORT),無法外網訪問,建議配置 Nginx 或者 Caddy 等Web服務代理訪問
后記
系統安裝后先更新一遍,推薦清華源
安裝mongodb-enterprise的時候建議慢慢來一遍成功,否則安裝會很麻煩apt各種報錯基本等于報廢需要重新來過了。。。
剛剛啟動run.sh的時候等一下才能看到web頁面
下圖為系統運行簡單SDL流程圖
├── InsectsAwake │ ├── app.py flask blueprint注冊 │ ├── __init__.py │ ├── static 網頁靜態文件夾 │ ├── templates 網頁html模板文件夾 │ └── views │ ├── asset_management.py flask資產管理處理頁面 │ ├── authenticate.py flask網頁認證頁面,登錄與登出 │ ├── dashboard.py dashboard頁面 │ ├── index.py 主頁 │ ├── __init__.py │ ├── lib │ │ ├── __init__.py │ │ ├── mongo_db.py 創建和管理mongo數據庫 │ ├── modules │ │ ├── discovery 資產發現 │ │ │ ├── __init__.py │ │ │ ├── port_scanner.py 掃描端口和目標服務信息 │ │ ├── __init__.py │ │ ├── scanner 漏洞掃描 │ │ │ ├── __init__.py │ │ │ ├── pocsuite_plugin 存放漏洞掃描poc插件的文件夾 │ │ │ ├── pocsuite_scanner.py 調用pocsuites框架對目標進行漏洞掃描 │ │ │ ├── vulnerability_plugin.py 管理漏洞poc插件,向數據庫中加入插件信息 │ │ ├── subdomain 子域名爆破 │ │ │ ├── __init__.py │ │ │ ├── subdomain.py 子域名爆破 │ │ └── week_passwd │ │ ├── __init__.py │ │ └── week_http_passwd_test.py 作者還未實現 │ ├── plugin_management.py flask poc插件管理頁面 │ ├── settings.py flask 平臺參數設置頁面,如線程數量,字典 │ ├── sql_injection.py 作者還未實現 │ ├── subdomain_brute.py flask 子域名爆破頁面 │ ├── task_management.py flask 任務管理頁面 │ ├── vulnerability_management.py flask 漏洞掃描結果管理頁面 │ ├── weak_passwd_test.py falsk弱口令管理頁面 ├── InsectsAwake.py 主執行文件 ├── instance │ ├── config.py flask 配置和數據庫配置 │ ├── __init__.py ├── LICENSE ├── logs │ ├── db.log │ └── log.log ├── migration │ ├── DataModels │ └── .py 創建數據庫 ├── requirements.txt ├── run.sh ├── tests │ ├── domain.dict 子域名爆破字典
def scanner(): 調用漏洞掃描模塊 :return: config_db db_name_conf()[] scanner_time int(connectiondb(config_db).find_one()[]) print() scanner_loop_execute(scanner_time) def manage(): 調用flask :return: app.runflask_app.config.get(), flask_app.config.get()) def discovery(): 調用資產發現模塊 :return: print() scheduler BlockingScheduler() try: scheduler.add_job(MultiProcess().start_port_scan, , , , ) scheduler.start() except Exception as e: print(e) def subdomain(): 調用子域名爆破模塊 :return: scanner_time print() subdomain_loop_execute(scanner_time) __name__ : 開啟四個線程執行這4個模塊 t1 threading.Threadscanner, ()) t2 threading.Threadmanage, ()) t3 threading.Threadsubdomain, ()) t4 threading.Threaddiscovery, ()) t1.start() t2.start() t3.start() t4.start() t1.join() t2.join() t3.join() t4.join()
該模塊與服務器Flask是分開的。Flask負責將前端接受的關于子域名破解的信息存儲和更新到數據庫中,而核心的子域名暴力破解程序則使用調度器每隔一段時間循環檢查數據庫中的配置文件,當數據庫中有數據滿足暴力破解程序運行的條件時,就開始執行程序,對目標進行子域名暴力破解,并將結果存儲在數據庫中。
InsectsAwake/views/subdomain_brute.py 核心文件,用于對目標進行子域名查找 InsectsAwake/views/modules/subdomain/subdomain.py flask后端文件,用于接受前端的數據并存儲在數據庫中 執行函數 def subdomain(): 每30s運行一次子域名爆破程序 scanner_time print() subdomain_loop_execute(scanner_time)
class DomainsBrute: def __init__(self, target_domain, subdomain_dict, domain_id, domain_name): 初始化類和成員變量 :param target_domain: 目標域名host :param subdomain_dict: 子域名爆破字典 :param domain_id: 域名在數據庫中所對應的IP :param domain_name: 域名的名字,如百度 def resolver_check(self): 對隨機生成一個域名并進行處理,如果這個隨機的域名存在就返回解析的結果 :return: [] or False def handle_domain(self): 組成新的二級或者三級域名 :return: <type >: [u, u, u] def handle_result(self): 獲取處理的結果,如果該二級或者三級域名存在,則存入數據庫, :return: def save_db(self, result): 將域名爆破結果存儲到數據庫中test_subdomain :param result: :return: def run_multi(self): 多進程解析域名 :return: self.handle_domain() scanner_pool multiprocessing.Pool) self.result scanner_pool.map(ha_resolver_domain, self.domain_list) scanner_pool.close() scanner_pool.join() self.handle_result() def ha_resolver_domain(domain): 解析域名,返回解析結果 :param domain: :return: {: [, ]} or {} def start_brute(inc_time): :param inc_time: :return: schedule.enter(inc_time, , start_brute, (inc_time,)) subdomain_list connectiondb(config_db).find_one()[] domain_text connectiondb(domain_db).find(): domain_text[] : domain_list domain_text[] domain_id domain_text[] domain_name domain_text[] print() start_date datetime.now() connectiondb(domain_db).update_one({: ObjectId(domain_id)}, {: {: }}) target domain_list: DomainsBrute(target, subdomain_list, domain_id, domain_name) .run_multi() domain_text[] : result connectiondb(subdomain_db).find({: ObjectId(domain_id)}): next_subdomain eval(result[]).keys()[0] DomainsBrute(next_subdomain, subdomain_list, domain_id, domain_name) .run_multi() connectiondb(domain_db).update_one({: ObjectId(domain_id)}, {: {: }}) scan_time datetime.now() start_date print(, scan_time.total_seconds()) def subdomain_loop_execute(inc,): schedule.enter(inc, , start_brute, (inc,)) schedule.run()
稍微修改了一下,現在可以單獨使用了https://github.com/cmustard06/subdomain
端口掃描模塊依然是與falsk框架分開的,是一個獨立運行的模塊,數據的交互主要還是通過數據庫進行的,循周期性運行程序,通過查看數據庫的關于端口掃描模塊的配置信息,如果配置滿足一定條件時,就開始執行程序。該模塊使用使用了第三方模塊APScheduler 該模塊是一個Python定時任務框架,使用起來十分方便。提供了基于日期、固定時間間隔以及crontab類型的任務,并且可以持久化任務、并以daemon方式運行應用。函數實現的是每天14:47執行這start_port_scan這個函數
cheduler.add_job(MultiProcess().start_port_scan, 'cron', day='1-31', hour=14, minute=47)
def nmap_scanner(target_host): 對目標主機的指定斷開進行掃描,返回掃描結果 :param target_host: :return: [{: , : , : , : },] 原函數中存在bug,修改 port_scanner.scan(target_host, .join( % port port eval(target_ports))) class MultiProcess: def __init__(self): self.target_list [] self.server_db db_name_conf()[] self.asset_db db_name_conf()[] self.processes_count int(connectiondb(config_db).find_one()[]) self.asset_id self.asset_name def scan_pool(self): 不同目標多進程端口掃描,將結果更新到數據庫中 :return: def start_port_scan(self): 從數據庫中取出數據,調用start_pool函數 :return:
漏洞掃描模塊使用的是知道創宇的開源掃描框架pocsuite,由于該框架在后期升級維護的過程中修改了很多功能,導致如果使用最新版的pocsuite框架運行程序時可能會出現異常,這里采用的是該框架的2.0.4版。比如在測試的時候由于導入下面模塊時出現錯誤,通過查看原函數發現
from pocsuite.lib.utils.password import genPassword
沒有genPassword函數,因此手動修改了password.py文件,修改后文件內容如下
Copyright (c) pocsuite developers (https://seebug.org) See the file copying permission import string from pocsuite.lib.core.common import getFileItems from pocsuite.lib.core.data import paths from random import choice def getWeakPassword(): return getFileItems(paths.WEAK_PASS) def getLargeWeakPassword(): return getFileItems(paths.LARGE_WEAK_PASS) def genPassword, string.letters string.digits): return .join([choice(chars) _ range(length)])
修改完成后繼續運行測試程序,運行成功。成果獲取到了漏洞掃描結果的數據,如下
(, , , , , (0, ), , )
函數分析
def verify_poc(self, target): poc驗證函數 :param target: :return: def start_scan(self): 使用多線程進行漏洞掃描 :return: def periodic_tasks(self): 從數劇庫中獲取任務信息,跟據配置信息周期性掃描目標 :return: def scanner_loop_execute(inc): 主程序循環執行模塊 :param inc: :return:
# PLUGIN_DB 插件集合
------------------------------------
plugin_appversion 影響版本
plugin_vultype 漏洞名稱
plugin_vuldate 漏洞日期
plugin_filename 文件路徑
plugin_name 插件名
plugin_appname 應用名稱
plugin_author 插件作者
_id ObjectId
------------------------------------
# TASKS_DB 任務集合
------------------------------------
task_status 任務狀態
end_date 結束時間
scan_target_list 掃描對象(列表)
task_name 任務名稱
plugin_id 插件id
_id ObjectId
start_date 任務開始時間
task_plan 掃描計劃
------------------------------------
# VULNERABILITY_DB 漏洞集合
------------------------------------
scan_result 掃描結果
target 掃描對象
task_id 任務ID
appname 應用名稱
scan_date 掃描日期
poc_name 插件名稱
vulversion 漏洞影響版本
poc_vultype 漏洞類型
task_name 任務名稱
plugin_id 插件ID
_id ObjectId
------------------------------------
# ASSET_DB 資產庫集合
asset_date 創建日期
scan_option 資產發現
asset_text 資產
asset_name 資產庫名稱
dept_name 部門名稱
admin_name 管理員
_id ObjectId
------------------------------------
# CONFIG_DB 配置集合
------------------------------------
port_thread 端口掃描線程
scanner_thread 漏洞檢測線程
port_list 端口掃描列表
config_name 配置文件名稱
subdomain 子域名字典
------------------------------------
# SERVER_DB 服務集合
------------------------------------
host 主機
asset_id 資產庫ID
port 端口
port_server 服務
banner 指紋(cpe)
scan_date 掃描日期
asset_name 所屬資產庫
------------------------------------
# DOMAIN_DB 服務集合
------------------------------------
domain_text 主域名
scan_option 三級域名掃描
dept_name 域名所屬部門
domain_date 創建日期
domain_name 域名名稱
_id ObjectId
------------------------------------
# SUBDOMAIN_DB 服務集合
------------------------------------
date 掃描日期
domain 主域名
_id ObjectId
result 子域名
domain_id 主域名ID
domain_name 域名名稱
------------------------------------
# WEEKPASSWD_DB 服務集合
------------------------------------
date 掃描日期
target 檢測對象
task_name 任務名稱
post_data 登錄數據包
status 檢測狀態
week_passwd_count 弱口令數量
error_data 失敗標記
success_data 成功標記
username 賬號
password 密碼
week_passwd_result 存在弱口令的結果
_id ObjectId
------------------------------------
`
test_asset :該表collection用于存儲資產信息,通過該表中的信息可以在后面調用漏洞掃描模塊和nmap模塊對資產進行掃描
test_config:該表用于存放域名字典,需要掃描的端口,開啟的進程數量等數據
test_domain:該表用于存放域名信息,通過該表中的數據對表中的域名進行子域名爆破
test_plugin_info:該表用于存放掃描插件信息,包括插件名稱,功能,以及插件存放的路徑
test_server:該表中存儲的是資產信息,包括開放的端口信息以及服務
test_subdomain:該表用于存放子域名爆破結果
test_tasks:該表用于存儲漏洞掃描任務信息
該系統使用的所有模塊之間都是通過數據庫進行數據交互的,每個模塊都是相對獨立的運行,單獨拿出來做測試也是沒有問題的,在進行代碼分析時也很友好,一個槽點就是漏洞掃描模塊使用的pocsuite開源框架有一些問題,每一次版本的迭代都有新的功能被添加,舊的功能被刪除,導致了官方的pocsuite poc驗證插件容易出問題,老版本的poc插件無法在新的框架下運行!!
上述就是小編為大家分享的如何進行InsectsAwke自動化工具源碼分析了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。