zoukankan      html  css  js  c++  java
  • 子域名收集利器——oneforall

    0X00 简介:

      在渗透测试中信息收集的重要性不言而喻,子域收集是信息收集中必不可少且非常重要的一环,目前网上也开源了许多子域收集的工具,但是总是存在以下部分问题: 

      * 不够强大,子域收集的接口不够多,不能做到对批量子域自动收集,没有自动子域解析,验证,FUZZ以及信息拓展等功能。
      * 不够友好,固然命令行模块比较方便,但是当可选的参数很多,要实现的操作复杂,用命令行模式就有点不够友好,如果有交互良好,高可操作的前端那么使用体验就会好很多。
      * 缺少维护,很多工具几年没有更新过一次,issues和PR是啥,不存在的。
      * 效率问题,没有利用多进程,多线程以及异步协程技术,速度较慢。

    0X01 功能特性:

      1)收集能力强大:

    1 利用证书透明度收集子域(目前有6个模块:censys_api,spyse_api,certspotter,crtsh,entrust,google)
    2 常规检查收集子域(目前有4个模块:域传送漏洞利用axfr,检查跨域策略文件cdx,检查HTTPS证书cert,检查内容安全策略csp,检查robots文件robots,检查sitemap文件sitemap,后续会添加检查NSEC记录,NSEC3记录等模块)
    3 利用网上爬虫档案收集子域(目前有2个模块:archivecrawl,commoncrawl,此模块还在调试,该模块还有待添加和完善)
    4 利用DNS数据集收集子域(目前有21个模块:ip138, ximcx, CeBaidu, binaryedge_api, circl_api, hackertarget, riddler, bufferover, dnsdb, ipv4info, robtex, chinaz, dnsdb_api, netcraft, securitytrails_api, chinaz_api, dnsdumpster, passivedns_api, ptrarchive, sitedossier,threatcrowd)
    5 利用DNS查询收集子域(目前有1个模块:通过枚举常见的SRV记录并做查询来收集子域srv,该模块还有待添加和完善)
    6 利用威胁情报平台数据收集子域(目前有6个模块:alienvault, riskiq_api,threatbook_api,threatminer,virustotal,virustotal_api该模块还有待添加和完善)
    7 利用搜索引擎发现子域(目前有17个模块:ask, bing_api, fofa_api, shodan_api, yahoo, baidu, duckduckgo, gitee,github, google, so, yandex, bing, exalead, google_api, sogou, zoomeye_api),在搜索模块中除特殊搜索引擎,通用的搜索引擎都支持自动排除搜索,全量搜索,递归搜索。

       2)支持子域爆破:该模块有常规的字典爆破,也有自定义的fuzz模式,支持批量爆破和递归爆破,自动判断泛解析并处理。

            3)支持子域验证:默认开启子域验证,自动解析子域DNS,自动请求子域获取title和banner,并综合判断子域存活情况。
            4)支持子域接管:默认开启子域接管风险检查,支持子域自动接管(目前只有Github,有待完善),支持批量检查。
            5)处理能力强大:发现的子域结果支持自动去除,自动DNS解析,HTTP请求探测,自动筛选出有效子域,拓展子域的Banner信息,最终支持的导出格式有txt, rst, csv, tsv, json, yaml, html, xls, xlsx, dbf, latex, ods。
            6)速度极快:收集模块使用多线程调用,爆破模块使用异步多进程多协程,子域验证中DNS解析和HTTP请求使用异步多协程,多线程检查子域接管风险。
            7)体验良好: 日志和终端输出全使用中文,各模块都有进度条,异步保存各模块结果。

    0X02 安装:

    1、下载:git clone https://gitee.com/shmilylty/OneForAll.git
    2、安装:
       cd OneForAll/
       python -m pip install -U pip setuptools wheel -i https://mirrors.aliyun.com/pypi/simple/
       pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
       cd oneforall/
       python oneforall.py --help
    3、更新:
       git fetch --all
       git reset --hard origin/master
       git pull

    0X03 使用:

      基础使用:

    1 通过pip安装:
    2     python3 oneforall.py --target example.com run
    3 通过pipenv安装:
    4     pipenv run python oneforall.py --target example.com run

       进阶使用:

        命令行参数只提供了一些常用参数,更多详细的参数配置请见config.py。由于众所周知的原因,如果要使用一些被墙的收集接口请先到config.py配置代理,有些收集模块需要提供API(大多都是可以注册账号免费获取),如果需要使用请到config.py配置API信息,如果不使用请忽略有关报错提示。

            oneforall.py是主程序入口,oneforall.py可以调用aiobrute.py,takerover.py及dbexport.py等模块,为了方便进行子域爆破独立出了aiobrute.py,为了方便进行子域接管风险检查独立出了takerover.py,为了方便数据库导出独立出了dbexport.py,这些模块都可以单独运行,并且所接受参数要更丰富一点。
            OneForAll命令行界面基于Fire实现,有关Fire更高级使用方法请参阅使用Fire CLI。https://github.com/google/python-fire/blob/master/docs/using-cli.md
            当你使用的过程中遇到一些问题或者疑惑的时候,先到lssues里使用搜索找找答案,还可以参阅常见问题与回答:https://github.com/shmilylty/OneForAll/blob/master/docs/Q%26A.md

       四个主要模块的使用帮助:

      1 1、oneforall.py:
      2 NAME
      3     oneforall.py - OneForAll是一款功能强大的子域收集工具
      4 SYNOPSIS
      5     oneforall.py --target=TARGET <flags>
      6 DESCRIPTION
      7     Version: 0.0.4
      8     Project: https://git.io/fjHT1
      9     Example:
     10         python3 oneforall.py --target example.com run
     11         python3 oneforall.py --target ./domains.txt run
     12         python3 oneforall.py --target example.com --brute True run
     13         python3 oneforall.py --target example.com --verify False run
     14         python3 oneforall.py --target example.com --valid None run
     15         python3 oneforall.py --target example.com --port medium run
     16         python3 oneforall.py --target example.com --format csv run
     17         python3 oneforall.py --target example.com --show True run
     18     Note:
     19         参数valid可选值1,0,None分别表示导出有效,无效,全部子域
     20         参数verify为True会尝试解析和请求子域并根据结果给子域有效性打上标签
     21         参数port可选值有'small', 'medium', 'large', 'xlarge',详见config.py配置
     22         参数format可选格式有'csv', 'tsv', 'json', 'yaml', 'html', 'xls', 'xlsx',
     23                           'dbf', 'latex', 'ods'
     24         参数path为None会根据format参数和域名名称在项目结果目录生成相应文件
     25 ARGUMENTS
     26     TARGET
     27         单个域名或者每行一个域名的文件路径(必需参数)
     28 FLAGS
     29     --brute=BRUTE
     30         使用爆破模块(默认False)
     31     --verify=VERIFY
     32         验证子域有效性(默认True)
     33     --port=PORT
     34         请求验证的端口范围(默认medium)
     35     --valid=VALID
     36         导出子域的有效性(默认1)
     37     --path=PATH
     38         导出路径(默认None)
     39     --format=FORMAT
     40         导出格式(默认xlsx)
     41     --show=SHOW
     42         终端显示导出数据(默认False)
     43 
     44 
     45 2、aiobrute.py:
     46 NAME
     47     aiobrute.py - OneForAll多进程多协程异步子域爆破模块
     48 
     49 
     50 SYNOPSIS
     51     aiobrute.py --target=TARGET <flags>
     52 
     53 
     54 DESCRIPTION
     55     Example:
     56         python3 aiobrute.py --target example.com run
     57         python3 aiobrute.py --target ./domains.txt run
     58         python3 aiobrute.py --target example.com --process 4 --coroutine 64 run
     59         python3 aiobrute.py --target example.com --wordlist subdomains.txt run
     60         python3 aiobrute.py --target example.com --recursive True --depth 2 run
     61         python3 aiobrute.py --target m.{fuzz}.a.bz --fuzz True --rule [a-z] run
     62 
     63 
     64     Note:
     65         参数segment的设置受CPU性能,网络带宽,运营商限制等问题影响,默认设置500个子域为任务组,
     66         当你觉得你的环境不受以上因素影响,当前爆破速度较慢,那么强烈建议根据字典大小调整大小:
     67         十万字典建议设置为5000,百万字典设置为50000
     68         参数valid可选值1,0,None,分别表示导出有效,无效,全部子域
     69         参数format可选格式:'csv', 'tsv', 'json', 'yaml', 'html', 'xls', 'xlsx',
     70                           'dbf', 'latex', 'ods'
     71         参数path为None会根据format参数和域名名称在项目结果目录生成相应文件
     72 
     73 
     74 ARGUMENTS
     75     TARGET
     76         单个域名或者每行一个域名的文件路径
     77 
     78 
     79 FLAGS
     80     --process=PROCESS
     81         爆破的进程数(默认CPU核心数)
     82     --coroutine=COROUTINE
     83         每个爆破进程下的协程数(默认64)
     84     --wordlist=WORDLIST
     85         指定爆破所使用的字典路径(默认使用config.py配置)
     86     --segment=SEGMENT
     87         爆破任务分割(默认500)
     88     --recursive=RECURSIVE
     89         是否使用递归爆破(默认False)
     90     --depth=DEPTH
     91         递归爆破的深度(默认2)
     92     --namelist=NAMELIST
     93         指定递归爆破所使用的字典路径(默认使用config.py配置)
     94     --fuzz=FUZZ
     95         是否使用fuzz模式进行爆破(默认False,开启须指定fuzz正则规则)
     96     --rule=RULE
     97         fuzz模式使用的正则规则(默认使用config.py配置)
     98     --export=EXPORT
     99         是否导出爆破结果(默认True)
    100     --valid=VALID
    101         导出子域的有效性(默认None)
    102     --format=FORMAT
    103         导出格式(默认xlsx)
    104     --path=PATH
    105         导出路径(默认None)
    106     --show=SHOW
    107         终端显示导出数据(默认False)
    108 
    109 3、takeover.py:
    110 NAME
    111 takeover.py - OneForAll多线程子域接管风险检查模块
    112 
    113 
    114 
    115 
    116 
    117 
    118 
    119 
    120 SYNOPSIS
    121      takeover.py COMMAND | --target=TARGET <flags>
    122 
    123 
    124 
    125 
    126 DESCRIPTION
    127      Example:
    128          python3 takeover.py --target www.example.com  --format csv run
    129          python3 takeover.py --target ./subdomains.txt --thread 10 run
    130 
    131 
    132 
    133 
    134      Note:
    135          参数format可选格式有'txt', 'rst', 'csv', 'tsv', 'json', 'yaml', 'html',
    136                            'jira', 'xls', 'xlsx', 'dbf', 'latex', 'ods'
    137          参数dpath为None默认使用OneForAll结果目录
    138 
    139 
    140 
    141 
    142 ARGUMENTS
    143      TARGET
    144          单个子域或者每行一个子域的文件路径(必需参数)
    145 
    146 
    147 
    148 
    149 FLAGS
    150      --thread=THREAD
    151          线程数(默认100)
    152      --dpath=DPATH
    153          导出目录(默认None)
    154      --format=FORMAT
    155          导出格式(默认xls)
    156 
    157 
    158 4、dbexport.py:
    159 NAME
    160     dbexport.py - OneForAll数据库导出模块
    161 
    162 
    163 
    164 
    165 SYNOPSIS
    166     dbexport.py TABLE <flags>
    167 
    168 
    169 
    170 
    171 DESCRIPTION
    172     Example:
    173         python3 dbexport.py --table name --format csv --path= ./result.csv
    174         python3 dbexport.py --db result.db --table name --show False
    175 
    176 
    177 
    178 
    179     Note:
    180         参数port可选值有'small', 'medium', 'large', 'xlarge',详见config.py配置
    181         参数format可选格式有'csv', 'tsv', 'json', 'yaml', 'html', 'xls', 'xlsx',
    182                           'dbf', 'latex', 'ods'
    183         参数path为None会根据format参数和域名名称在项目结果目录生成相应文件
    184 
    185 
    186 
    187 
    188 POSITIONAL ARGUMENTS
    189     TABLE
    190         要导出的表
    191 
    192 
    193 
    194 
    195 FLAGS
    196     --db=DB
    197         要导出的数据库路径(默认为results/result.sqlite3)
    198     --valid=VALID
    199         导出子域的有效性(默认None)
    200     --path=PATH
    201         导出路径(默认None)
    202     --format=FORMAT
    203         导出格式(默认xlsx)
    204     --show=SHOW
    205         终端显示导出数据(默认False)

      

    0X04 主要框架:

    1 aiodns - 简单DNS异步解析库。
    2 aiohttp - 异步http客户端/服务器框架
    3 aiomultiprocess - 将Python代码提升到更高的性能水平(multiprocessing和asyncio结合,实现异步多进程多协程)
    4 beautifulsoup4 - 可以轻松从HTML或XML文件中提取数据的Python库
    5 fire - Python Fire是一个纯粹根据任何Python对象自动生成命令行界面(CLI)的库
    6 loguru - 旨在带来愉快的日志记录Python库
    7 records - Records是一个非常简单但功能强大的库,用于对大多数关系数据库进行最原始SQL查询。
    8 requests - Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。
    9 tqdm - 适用于Python和CLI的快速,可扩展的进度条库

    0X05 目录结构:

     1 D:.
     2 |
     3 +---.github
     4 +---docs
     5 |       collection_modules.md 收集模块说明
     6 +---images
     7 ---oneforall
     8     |   aiobrute.py   异步多进程多协程子域爆破模块,可以单独运行
     9     |   collect.py    各个收集模块上层调用
    10     |   config.py     配置文件
    11     |   dbexport.py   数据库导出模块,可以单独运行
    12     |   domains.txt   要批量爆破的域名列表
    13     |   oneforall.py  OneForAll主入口,可以单独运行
    14     |   __init__.py
    15     |
    16     +---common 公共调用模块
    17     +---data   存放一些所需数据
    18     |       next_subdomains.txt     下一层子域字典
    19     |       public_suffix_list.dat  顶级域名后缀
    20     |       srv_names.json          常见SRV记录前缀名
    21     |       subdomains.txt          子域爆破常见字典
    22     |
    23     ---modules
    24         +---certificates     利用证书透明度收集子域模块
    25         +---check            常规检查收集子域模块
    26         +---crawl            利用网上爬虫档案收集子域模块
    27         +---datasets         利用DNS数据集收集子域模块
    28         +---dnsquery         利用DNS查询收集子域模块
    29         +---intelligence     利用威胁情报平台数据收集子域模块
    30         ---search           利用搜索引擎发现子域模块

    0X06 总结:

      这个工具是在vulkey_chen师傅的介绍下入坑的,感觉挺好用的。采用模块化的方式开发,其中的构成虽然很多,但是在仔细了解以后丝毫不会让你觉得混乱。这篇文章是为了帮助大家更好的使用该工具,上面已经写得很详尽了。如果还有什么不懂地方或者奇怪的报错,可以在开发群中提出建议以及给开发者发送邮件。

      反馈群:824414244,加群验证,我的英雄学院。

      开发者邮箱:admin@hackfun.org

     

  • 相关阅读:
    Java集合概述
    Java8内存结构—永久代(PermGen)和元空间(Metaspace)
    ArrayList分析
    “三次握手,四次挥手”你真的懂吗?
    Object中的方法以及对象相等的判定
    笔记
    Mybatis中的@Param注解
    react与jQuery对比,有空的时候再翻译一下
    队列理论和队列网络模型 queueing theory and queueing network model
    下拉列表autocomplete各种实现方式比较
  • 原文地址:https://www.cnblogs.com/sq-smile/p/12304235.html
Copyright © 2011-2022 走看看