前言
接上一期,这次来记录一下对于资产收集模块的二开过程。
先说一下大概思路,针对域名收集,主要就是把oneforall
给集成到ARL中。如果都预留了接口,当然就不用写一篇文章了,显示情况并非如此。
针对IP的资产收集,再进行一些优化,添加一些我知道的其他收集方法,不能说全部吧,这个只能看经验了。
域名收集改动
根据第二篇,现在已经知道了ARL
域名收集的大致过程。改动就直接添加到domain.py
中了。也看过其他类似的资产管理工具,直接把oneforall
当作一个类,去实例化调用,从而集成到应用中。总感觉这样不优雅,又说不出来哪里别扭。
开始之前,有必要对OneForAll
进行简单分析。主要从以下两个方面
-
OneForAll
的存储和保存结果方法 - 分析各自收集功能,进行修改。
OneForAll怎么保存结果
我们知道,收集子域名有很多方法。一般会每种方法都写成类,然后一个个调用。OneForAll
的启动文件是oneforall.py
,直接打开这个文件,随便找到一种收集方法,一步步找到保存方式。
就从这个方法类开始
进入这个类之后,直接来到run()
方法开始看,这个文件也不大,这个文件内没有直接保存,而是调用了一个公共方法去保存
保存到results/域名/Module/BaseModule.json
文件里边
存储到表名为域名
的数据库表里边
这种把保存写成一个公共类,维护和修改方便多了,只需要修改这个方法就行了。当人,缺点也挺明显,如果程序中途出错停止运行了,前边的任务就白跑了,结果也没了。
上面是运行过程中的保存,用过OneForAll
的老铁都知道,最终默认会保存为一个csv的文件,可以用表格直接打开,这种格式方便分析。
主要是由下面函数来调用执行的
export_data
方法详细功能
功能分析
在接下来分析之前,需要明确一点,OneForAll
的域名收集能力是比ARL
强的。也并不是说ARL
域名收集模块可以直接砍掉,通过分析,OneForAll
只进行了域名收集,然后直接入库。ARL
还进一步对收集到的域名进行了各种处理。
所以说,取长补短,先调用OneForAll
进行域名收集,然后由ARL
对域名进行进一步处理,然后按照ARL
的格式,进行入库。
接下来分析一下都进行了那些处理:
我们可以看到,ARL
域名模块的方法和类还是挺多的,我觉得没必要都分析一下,跟踪一下域名从开始处理,到入库,这整个流程就行了。
调用并启动域名任务
域名任务都做了什么
我们接下来直接看域名提取,通过以下4种方法来收集域名。
这四种方法没必要都看,只要看看都进行了那些处理就行。
选择crt.sh 网站查询
进一步分析
分析到这里,对于改造基本够用了。
改造
结合之前的分析,主要从以下几个方面来改造。
- 把
OneForAll
当作一个类,输入一个域名作为参数,返回收集的域名列表。
虽然OneForAll
类有很多参数,大多参数是默认参数,只需要提供target
参数作为目标即可。
其次,返回域名列表。主函数最后部分,生成csv文件后,说明域名收集工作已经完成。此时即可返回全部收集到的域名
main()
run()
- 在
ARL
的domain_retch
方法内添加对OneForAll
的调用
添加OneForAll
调用方法
参照ARL
,调用域名收集方法
- 添加任务处添加是否启用
OneForAll
收集域名的选项,并且默认启用
添加域名任务处默认调用
scheduler.py文件处
启用按钮:app/routes/policy.py
文件处
启用按钮:app/routes/task.py
应用测试
把修改的几个文件放入到ARL
项目中。
重新运行项目。
查看效果
总结
本文主要针对域名收集模块,进行二开。当然,还不完善,还有很大提升空间。后续会对收集的字段进行优化,也会添加一些其他我觉得用得到的字段。
对资产管理平台开发感兴趣的小伙伴,可以跟我沟通交流。
针对ARL的二开,会继续下去。
发表评论
您还未登录,请先登录。
登录