亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行InsectsAwke自動化工具源碼分析

發布時間:2021-11-18 15:53:04 來源:億速云 閱讀:157 作者:柒染 欄目:網絡管理

這期內容當中小編將會給大家帶來有關如何進行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 然后就可以愉快的修改文件了 如何進行InsectsAwke自動化工具源碼分析

    • 掃描器配置文件路徑:InsectsAwake-Project/instance/config.py

  • 初始化數據庫

cd /InsectsAwake/migration
python start.py
  • 運行系統

sudo ./run.sh restart
  • run.sh會出現有關nohup的報錯可以參考如何進行InsectsAwke自動化工具源碼分析 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 子域名爆破字典

項目思維導圖

如何進行InsectsAwke自動化工具源碼分析

主文件分析

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:

數據庫模塊

數據庫結構


  1. # PLUGIN_DB 插件集合

  2. ------------------------------------

  3. plugin_appversion       影響版本

  4. plugin_vultype          漏洞名稱

  5. plugin_vuldate          漏洞日期

  6. plugin_filename         文件路徑

  7. plugin_name             插件名

  8. plugin_appname          應用名稱

  9. plugin_author           插件作者

  10. _id                     ObjectId

  11. ------------------------------------

  12. # TASKS_DB 任務集合

  13. ------------------------------------

  14. task_status             任務狀態

  15. end_date                結束時間

  16. scan_target_list        掃描對象(列表)

  17. task_name               任務名稱

  18. plugin_id               插件id

  19. _id                     ObjectId

  20. start_date              任務開始時間

  21. task_plan               掃描計劃

  22. ------------------------------------

  23. # VULNERABILITY_DB 漏洞集合

  24. ------------------------------------

  25. scan_result             掃描結果

  26. target                  掃描對象

  27. task_id                 任務ID

  28. appname                 應用名稱

  29. scan_date               掃描日期

  30. poc_name                插件名稱

  31. vulversion              漏洞影響版本

  32. poc_vultype             漏洞類型

  33. task_name               任務名稱

  34. plugin_id               插件ID

  35. _id                     ObjectId

  36. ------------------------------------

  37. # ASSET_DB 資產庫集合

  38. asset_date              創建日期

  39. scan_option             資產發現

  40. asset_text              資產

  41. asset_name              資產庫名稱

  42. dept_name               部門名稱

  43. admin_name              管理員

  44. _id                     ObjectId

  45. ------------------------------------

  46. # CONFIG_DB 配置集合

  47. ------------------------------------

  48. port_thread             端口掃描線程

  49. scanner_thread          漏洞檢測線程

  50. port_list               端口掃描列表

  51. config_name             配置文件名稱

  52. subdomain               子域名字典

  53. ------------------------------------

  54. # SERVER_DB 服務集合

  55. ------------------------------------

  56. host                    主機

  57. asset_id                資產庫ID

  58. port                    端口

  59. port_server             服務

  60. banner                  指紋(cpe)

  61. scan_date               掃描日期

  62. asset_name              所屬資產庫

  63. ------------------------------------

  64. # DOMAIN_DB 服務集合

  65. ------------------------------------

  66. domain_text             主域名

  67. scan_option             三級域名掃描

  68. dept_name               域名所屬部門

  69. domain_date             創建日期

  70. domain_name             域名名稱

  71. _id                     ObjectId

  72. ------------------------------------

  73. # SUBDOMAIN_DB 服務集合

  74. ------------------------------------

  75. date                    掃描日期

  76. domain                  主域名

  77. _id                     ObjectId

  78. result                  子域名

  79. domain_id               主域名ID

  80. domain_name             域名名稱

  81. ------------------------------------

  82. # WEEKPASSWD_DB 服務集合

  83. ------------------------------------

  84. date                    掃描日期

  85. target                  檢測對象

  86. task_name               任務名稱

  87. post_data               登錄數據包

  88. status                  檢測狀態

  89. week_passwd_count       弱口令數量

  90. error_data              失敗標記

  91. success_data            成功標記

  92. username                賬號

  93. password                密碼

  94. week_passwd_result      存在弱口令的結果

  95. _id                     ObjectId

  96. ------------------------------------

  97. `

數據庫詳情

  • test_asset :該表collection用于存儲資產信息,通過該表中的信息可以在后面調用漏洞掃描模塊和nmap模塊對資產進行掃描

如何進行InsectsAwke自動化工具源碼分析

如何進行InsectsAwke自動化工具源碼分析

  • test_config:該表用于存放域名字典,需要掃描的端口,開啟的進程數量等數據

如何進行InsectsAwke自動化工具源碼分析

如何進行InsectsAwke自動化工具源碼分析

  • test_domain:該表用于存放域名信息,通過該表中的數據對表中的域名進行子域名爆破

如何進行InsectsAwke自動化工具源碼分析

如何進行InsectsAwke自動化工具源碼分析

  • test_plugin_info:該表用于存放掃描插件信息,包括插件名稱,功能,以及插件存放的路徑

如何進行InsectsAwke自動化工具源碼分析

如何進行InsectsAwke自動化工具源碼分析

  • test_server:該表中存儲的是資產信息,包括開放的端口信息以及服務

如何進行InsectsAwke自動化工具源碼分析

如何進行InsectsAwke自動化工具源碼分析

  • test_subdomain:該表用于存放子域名爆破結果

如何進行InsectsAwke自動化工具源碼分析

如何進行InsectsAwke自動化工具源碼分析

  • test_tasks:該表用于存儲漏洞掃描任務信息

如何進行InsectsAwke自動化工具源碼分析

如何進行InsectsAwke自動化工具源碼分析

該系統使用的所有模塊之間都是通過數據庫進行數據交互的,每個模塊都是相對獨立的運行,單獨拿出來做測試也是沒有問題的,在進行代碼分析時也很友好,一個槽點就是漏洞掃描模塊使用的pocsuite開源框架有一些問題,每一次版本的迭代都有新的功能被添加,舊的功能被刪除,導致了官方的pocsuite poc驗證插件容易出問題,老版本的poc插件無法在新的框架下運行!!

上述就是小編為大家分享的如何進行InsectsAwke自動化工具源碼分析了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东乡县| 晋江市| 青州市| 青海省| 乳源| 什邡市| 垦利县| 台东县| 晋宁县| 朝阳县| 隆回县| 霍城县| 台安县| 安溪县| 古丈县| 普安县| 隆子县| 通海县| 大渡口区| 曲麻莱县| 乌兰县| 双柏县| 化州市| 湘潭市| 明溪县| 抚顺县| 专栏| 都江堰市| 泉州市| 托里县| 福鼎市| 杭锦旗| 布拖县| 鹰潭市| 宣汉县| 朝阳区| 徐闻县| 科尔| 上杭县| 花垣县| 庄河市|