微信订阅号二维码

本页内容二维码:

本栏目热门内容
  • Windows 系统安全基线及软...
  • CIS-CAT 配置评估工具介绍...
  • 修改audispd.conf解决审计...
  • 详细了解微软安全合规工具...
  • 从甲方角度介绍“CIS互联...
  • 2022年甲方个人网络安全运...
  • 业务导向安全策略#5员工培...
  • 微软安全合规工具包(SCT...
  • CIS关键安全控制措施#16应...
  • CIS关键安全控制措施#17突...
  • CIS关键安全控制措施#1总...
  • SELINUX介绍连载#3:什么...
  • 安装RHEL/CentOS时如何选...
  • CIS关键安全控制措施#6访...
  • 网络安全日志收集甲方基础...
  • CIS RAM风险评估方法5篇目...
  • 关于OpenSCAP/SCAP安全策...
  • CIS RAM#4实施防护措施、...
  • SELINUX介绍连载#1:基础...
  • 业务导向安全策略#1数据管...
  • 什么是网络行为异常检测(...
  • CIS关键安全控制措施集18...
  • SELINUX介绍连载#2:模式...
  • CIS关键安全控制措施#14安...
  • CIS关键安全控制措施#8审...
  • 内网DNS服务器安全性能基...
  • CIS RAM#1风险评估方法核...
  • 业务导向安全策略#2信息限...
  • CIS关键安全控制措施#15服...
  • 更多...

    DNS子域名发掘工具两项

    作者:Sender  来源:WaveCN.com  发布日期:2022-07-24  最后修改日期:2022-07-24

      在网络安全技术领域,DNS子域名发掘是非常关键的一项操作。众所周知,一个域名下可以存在多个子域名,每个子域名可以解析为不同的IP地址。

      但是,DNS解析服务商基本上都不允许域名解析的管理者,设置从IP地址到域名的反向查询。即使是允许设置,实际BIND的工作机制也只对1条反向记录有效,而这一般会被设置为“@”或者“WWW”的反向查询解析。

      因此,实际上并没有简单直接查询发掘子域名的方法。于是网络安全业界就产生了一些辅助工具去实现这项操作。

      这些工具的原理基本都是相似的:通过某种方法,尝试枚举一个域,从而获得该域内子域名和IP地址的解析关系。

    首先介绍第一个,名为DNSHarvester (DNS收割机)。

    https://github.com/danielmiessler/DNSHarvester

      DNS收割机这个名字挺有杀气的,但这个工具实际非常简单,大约40行的python代码(基于python2)而已。它使用了两种方法实现对子域名的枚举:
    1、通过搜索引擎比如Google提供的搜索API接口进行搜索;

    2、通过预设的字典列表进行搜索。从可用性来说,这个工具实质只是一个概念验证示例,但这也不妨碍它确实具备可用性。

      代码仓库中提供了两个字典列表,一个长,一个短。使用者可以直接把任一个列表复制为脚本内预设的字典列表文件名:“prefixes.txt”让脚本使用。

      脚本在执行时,脚本程序通过socket和simplejson这个python模块,通过调用socket.gethostbyaddr函数,按照字典列表检查子域名前缀的有效性。默认提供的长前缀字典列表中包含超过2500个前缀,短列表也包含了大约60个。有经验的网络安全人员可以自行管理这些前缀字典列表。

      由于DNSHarvester已经比较旧,迄今已经有10年没有更新。如果需要在python3下运行,脚本就需要修改一下前面的引用部分。

      另外是搜索引擎API的地址和调用参数也要按现在Google提供的版本进行修改(比如allinurl已经停用)。考虑到Google服务在国内不可用,还可以尝试把调用搜索服务改为调用BING.COM或其它搜索引擎。

      脚本使用方法是在命令行通过python2去调用运行。因此首先要在操作系统比如CentOS中安装python2:

    yum install python2
    

    然后运行:

    python2 harvester.py 目标域名
    

    脚本成功运行后会输出所找到的子域名。

    然后是第二个工具,名为DNSEnum(DNS枚举器)。

    https://github.com/fwaeytens/dnsenum

      这个脚本工具实际也存在了好一段时间,从github上的分支和星的数量可以知道被使用情况比DNSHarvester要广泛。

      DNSEnum相对成熟,通过多线程的perl脚本实现对DNS服务进行枚举查找子域名。在设计上和DNSHarvester大体相似,都是通过前缀字典列表和搜索引擎相互配合实现。但相比DNSHarvester,DNSEnum提供了一些辅助功能,使得可以从目标DNS域获得更多的信息。

      简单描述,DNSEnum实现的功能包括:

    • 获取域名主机的地址(即A记录)

    • 获取域名的名称服务器(线程化)

    • 获取域名主机的邮件交换MX记录(线程化)

    • 对名称服务器执行axfr查询,并获得BIND版本(线程化)

    • 通过Google抓取获得域的额外名称和子域名(Google查询方式为:“allinurl: -www site:domain”,注意该参数已过时,需要更新)

    • 基于字典文件暴力枚举子域名,并对具有NS记录的子域进行递归查询(全部线程化)

    • 计算C类域网络地址范围,并对这些地址执行whois查询(线程化)

    • 对C类或whois网格执行反向查找(线程化)

    • 查找结果写入domain_ips.txt文件

      DNSEnum 的源代码也有9年了,因此同样需要进行修改以适应当前的运行环境情况。比如对于Google查询使用的allinurl已经失效,需要修改,以及也要把Google搜索的API改成其它能用的搜索引擎的。

      由于需要使用到perl以及一些perl的模块,需要对操作系统比如CentOS安装一些包,操作如下:

    yum install cpan
    

      完成安装后,下载模块:

    curl -L http://cpanmin.us | perl - App::cpanminus
    

      这个程序依赖于一些Perl模组,可以通过cpanm命令安装或更新:

    cpanm threads threads::shared Thread::Queue 
    Getopt::Long IO::File Net::IP 
    Net::DNS Net::Netmask Net::Whois::IP 
    HTML::Parser String::Random Whois::IP 
    WWW::Mechanize XML::Writer
    

      以上安装过程,也可以通过在PERL的交互式外壳中通过install命令进行安装,过程:

    perl -MCPAN -e shell
    

    然后用install命令安装:

    install 模块名称
    

      接下来通过git把DNSEnum的代码克隆到本地:

    git clone https://github.com/fwaeytens/dnsenum.git
    

      要查看使用信息,运行:

    perldoc dnsenum.pl
    

      正式运行,比如:

    perl dnsenum.pl --enum 目标域名 -f 域名前缀文本文件.txt
    

      程序运行过程中会不断输出查询分析的结果。

      看到最后,可能会有人问,这很明显DNSEnum远比DNSHarvester成熟完整,为何要介绍DNSHarvester?这确实是因为DNSHarvester的代码很简洁,而基本上DNS子域名查询工具的原理都是一样的,所以,可以通过DNSHarvester这个简单的例子学习DNS子域名查询的基本原理。

    欢迎关注微信公众号后私信讨论文章内容!
    本栏目相关
  •  2022-03-16 Windows 系统安全基线及软件工具介绍
  •  2022-05-11 CIS-CAT 配置评估工具介绍及操作实践
  •  2022-03-17 详细了解微软安全合规工具包(SCT)
  •  2022-03-25 从甲方角度介绍“CIS互联网安全中心”
  •  2022-05-10 2022年甲方个人网络安全运维基础工具
  •  2022-06-06 业务导向甲方网络安全策略设计#5员工培训及系列总结
  •  2022-03-18 微软安全合规工具包(SCT)操作实战
  •  2022-04-20 CIS关键安全控制措施#16应用软件安全(下)
  •  2022-04-21 CIS关键安全控制措施#17突发事件响应管理