InsectsAwake|自动化工具源码分析

Posted 红日安全

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了InsectsAwake|自动化工具源码分析相关的知识,希望对你有一定的参考价值。

红日安全-工具研发小组 

博客:http://sec-redclub.com/team/

简介

InsectsAwake是一个比较著名的开源的基于Python开发的漏洞扫描系统。启蒙于Bugscan脱胎于Pocsuite。采用FLASK+MongoDB提供WEB服务。初步具备Por的健壮性。

主要功能

  • 漏洞扫描

    • 通过调用创宇的 Pocsuite 进行扫描,扫描插件通过 Seebug

    • 扫描目标只能是单个 IP 或者 URL,不支持网段扫描(公司是中小型公司,就忘写这块需求了),默认有80余个插件,大多是 Seebug 的免费PoC

    • 任务周期可以选择临时、每日、每周或每月

  • 资产管理 

    • 可以通过各资产库创建漏洞扫描任务,同样资产库只能是单个 IP 或者 URL。

    • 开启端口发现功能后,后端会定时调用 nmap 对资产进行端口扫描,需要扫描的端口可以在设置里进行配置

  • 域名发现功能

    • 即子域名爆破功能,但目前功能尚不完善,只能通过配置字典进行暴力猜解,域名字典可以在设置处进行配置,项目 tests 文件夹内提供了一份子域名字典(字典来源 ring04h 的 wydomain 项目)

安装过程

  • 安装虚拟机 16.04

  • 更新为国内源

InsectsAwake|自动化工具源码分析(二)

  • 获取项目源码

 

  • 安装 Python 及 pip

 

InsectsAwake|自动化工具源码分析(二)

  • 安装 MongoDB

  • 安装的是企业版MongoDB,普通的MongoDB是无法支持系统运行的

  • 很多人按照freebuf 的安装不成功,是因为载入的是3.4版本的安装源 可是当我们执行 sudo apt-get install -y mongodb-enterp的时候,如果没有指定版本号的话,apt默认安装最新的即3.6版本,所以mongodb-enterprise在安装的时候就会出现问题。这里我们加载的是3.6版本的安装源,所以可以安装成功

 

InsectsAwake|自动化工具源码分析(二)

  • 其他系统安装参考官方手册:

https://docs.mongodb.com/manual/installation/

  • 安装 Python 依赖包

 

  • 安装nmap

 sudo apt install nmap
  • 配置数据库


    InsectsAwake|自动化工具源码分析(二)

     

    InsectsAwake|自动化工具源码分析(二)

    • 添加用户

    • 启动数据库

  • 修改扫描器配置

     

    比较懒,clone下来直接chmod -R 777 然后就可以愉快的修改文件了

    InsectsAwake|自动化工具源码分析(二)

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

  • 初始化数据库

 

InsectsAwake|自动化工具源码分析(二)

  • 运行系统

 

  • run.sh会出现有关nohup的报错可以参考 InsectsAwake|自动化工具源码分析(二)https://blog.csdn.net/educast/article/details/28273301 进行适当修改

  • 成功

    InsectsAwake|自动化工具源码分析(二)

  • 项目默认运行在127.0.0.1:5000 (可以 修改 默认的 WEB_HOST 及 WEB_PORT),无法外网访问,建议配置 nginx 或者 Caddy 等Web服务代理访问

  • 后记

    • 系统安装后先更新一遍,推荐清华源

    • 安装mongodb-enterprise的时候建议慢慢来一遍成功,否则安装会很麻烦apt各种报错基本等于报废需要重新来过了。。。

    • 刚刚启动run.sh的时候等一下才能看到web页面

 

工作流程

下图为系统运行简单SDL流程图

InsectsAwake|自动化工具源码分析(二)

项目结构

 

项目思维导图

InsectsAwake|自动化工具源码分析(二)

主文件分析

 

子域名爆破模块

该模块与服务器Flask是分开的。Flask负责将前端接受的关于子域名破解的信息存储和更新到数据库中,而核心的子域名暴力破解程序则使用调度器每隔一段时间循环检查数据库中的配置文件,当数据库中有数据满足暴力破解程序运行的条件时,就开始执行程序,对目标进行子域名暴力破解,并将结果存储在数据库中。

简介

 

细节函数分析

 

稍微修改了一下,现在可以单独使用了 https://github.com/cmustard06/subdomain

端口扫描模块

端口扫描模块依然是与falsk框架分开的,是一个独立运行的模块,数据的交互主要还是通过数据库进行的,循周期性运行程序,通过查看数据库的关于端口扫描模块的配置信息,如果配置满足一定条件时,就开始执行程序。该模块使用使用了第三方模块APScheduler 该模块是一个Python定时任务框架,使用起来十分方便。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务、并以daemon方式运行应用。 函数实现的是每天14:47执行这start_port_scan这个函数

 
 

漏洞扫描模块

漏洞扫描模块使用的是知道创宇的开源扫描框架pocsuite,由于该框架在后期升级维护的过程中修改了很多功能,导致如果使用最新版的pocsuite框架运行程序时可能会出现异常,这里采用的是该框架的2.0.4版。比如在测试的时候由于导入下面模块时出现错误,通过查看原函数发现

 

没有genPassword函数,因此手动修改了password.py文件,修改后文件内容如下

 

修改完成后继续运行测试程序,运行成功。成果获取到了漏洞扫描结果的数据,如下

 

代码分析

函数分析

 

数据库模块

数据库模块

数据库结构

 
   
   
 
  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模块对资产进行扫描

InsectsAwake|自动化工具源码分析(二)

InsectsAwake|自动化工具源码分析(二)

  • test_config:该表用于存放域名字典,需要扫描的端口,开启的进程数量等数据

InsectsAwake|自动化工具源码分析(二)

InsectsAwake|自动化工具源码分析(二)

  • test_domain:该表用于存放域名信息,通过该表中的数据对表中的域名进行子域名爆破

InsectsAwake|自动化工具源码分析(二)

InsectsAwake|自动化工具源码分析(二)

  • test_plugin_info:该表用于存放扫描插件信息,包括插件名称,功能,以及插件存放的路径

InsectsAwake|自动化工具源码分析(二)

InsectsAwake|自动化工具源码分析(二)

  • test_server:该表中存储的是资产信息,包括开放的端口信息以及服务

InsectsAwake|自动化工具源码分析(二)

InsectsAwake|自动化工具源码分析(二)

  • test_subdomain:该表用于存放子域名爆破结果

InsectsAwake|自动化工具源码分析(二)

InsectsAwake|自动化工具源码分析(二)

  • test_tasks:该表用于存储漏洞扫描任务信息

InsectsAwake|自动化工具源码分析(二)

总结

该系统使用的所有模块之间都是通过数据库进行数据交互的,每个模块都是相对独立的运行,单独拿出来做测试也是没有问题的,在进行代码分析时也很友好,一个槽点就是漏洞扫描模块使用的pocsuite开源框架有一些问题,每一次版本的迭代都有新的功能被添加,旧的功能被删除,导致了官方的pocsuite poc验证插件容易出问题,老版本的poc插件无法在新的框架下运行!!

文章推荐
























以上是关于InsectsAwake|自动化工具源码分析的主要内容,如果未能解决你的问题,请参考以下文章

ThreadX内核源码分析 - 定时器及线程时间片调度(arm)

RIPS PHP源码静态分析(转)

高效工具:Pyreverse将Python源码自动生成UML类图

洞态IAST源码分析及吐槽

一个简单的时间片轮转内核代码的分析(课程作业)

Android 逆向Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 )(代码片