纯socket实现的checkdns基于文本相似度过滤泛解析域名

查看纯socket实现的dns服务器

根据文本相似度过滤通用域名

这段代码跨度很大,下面是简化版

其他

ESD只能使用文本相似度过滤通用解析,但这会导致机器内存和CPU暴涨,不建议使用性能低的机器。

另外,windows下好像没有用ESD,因为最后保存的路径很难写

没有其他不兼容,Windows应该可以使用这个路径。

另外

解决各DNS服务商判断网络线路出口不一致的问题

解决各DNS服务商缓存时间不一致的问题

解决随机DNS问题,如fliggy.com、plu.cn等

我不知道如何解决这三个问题。可能代码藏在角落里,我没找到。

万能

万能

OneForAll 是一个勤奋的更新者,当我写这篇文章时,我注意到 1 小时前有一个新的提交。

OneForAll还有很多功能,比如被动域名搜索、子域爆破、子域接管、端口检测、指纹识别、导出等。

被动搜索

OneForAll 集成了许多用于收集域名的 Web 界面。每个接口都是一个py文件。 py文件最后会基于这个类。该类提供了很多常用的方法,比如网页请求、匹配域名、保存结果以及运行时需要的各种方法。

比较有意思的是域名匹配的方法,因为很多web界面返回格式都不一样,你想让每个插件都处理这样的格式吗?不是,OneForAll 写了一个通用的域名匹配函数,就是通过 regex 匹配最终的结果。

泛分析处理

通过DNS解析域名时返回相同的TTL。

参考

泛解析一直是域名爆破的一大难题。目前的解决方案是根据不存在的子域记录(md5(domain).domain)获取列入黑名单的IP,然后将爆破过程的结果列入黑名单。 然而,这种广泛的过滤很容易导致假阴性。比如一般解析记录是1.1.1.1,但是一个已有的子域也指向1.1.1.1,这个子域可能会被黑名单过滤掉。胖同学提到TTL也可以作为黑名单规则的一部分。判断依据是:在权威DNS中,泛解析记录的TTL必须相同。如果子域记录相同,但 TTL 不同,那么这条记录可以说绝对不是泛解析记录。最终判断代码如下:

不知道这个方法好不好。

爆破工艺

简略爆破工序

域名接管

OneForAll的域名接管主要是针对一些公共服务的域名接管,根据其指纹识别的内容进行

原理是获取域名的cname。如果cname与上面的指纹匹配,并且访问后返回的内容也匹配,说明当前没有人使用跑字典用服务器吗,可以创建同一个域名。

但是创建需要手动完成,OneForAll 只提供了一个 GIthub 自动创建脚本,但是我没有看到它在任何地方被调用。

OneForAll 的域名接管仅适用于在线服务提供商。

本来以为每个普通域名都会查询cname,然后查看cname的域名是否被注册,结果没有。

指纹识别

OneForAll 的指纹识别用途

作者定义了一般指纹的规则

而且指纹的集成转换,感觉还不错。

指纹识别的具体文件在里面,根据指纹识别的规则,基本上访问首页一次就可以识别指纹。唯一不明白的是作者只用了多进程来识别,为什么前面是协程+多进程,而指纹识别这里只用进程,感觉效率会受到很大影响。

其他

OneForAll 基于 Python3,官方要求 Python3.8 或以上,依赖有 38 行,不太人性化(Python 需要的版本太多,依赖太多,而且它容易报错)。

dns探测

dns探测

dnsprobe 是一个用 go 语言编写的 dns 查询工具。因为go语言隐藏了协程的细节,所以通过简单的编程就可以实现并发编程。同时go语言的静态编译可以在各种平台上运行,对用户来说也很方便。

图片[1]-纯socket实现的checkdns基于文本相似度过滤泛解析域名-老王博客

dnsprobe 的作者也很清楚效率的瓶颈。例如,如果是大字典的dns爆破,读字典会耗费大量时间。但是dnsprobe是边读边爆的,上面分析的工具也没有。注意这一点。

但是在 Python 中做到这一点并不容易。使用python的协程后,所有的功能都需要变成协程,才能发挥协程的威力。如果要实现边读边扫描,需要将文件读成协程,扫描成协程。

需要为此安装额外的软件包

子查找器

子查找器

Projectdiscovery项目下的子域发现工具Subfinder,定位于通过各种接口发现有效子域。

subfinder 仅用于做一件事 – 被动子域枚举,它做得很好。

subfinder 只用于做一件事 – 被动子域枚举,它做得很好。

其接口列表

subfinder是用go写的,那么如何加载这些接口呢?

subfinder的每个接口都需要实现这个接口

然后定义Agent实现一个地图类,地图的内容就是各个接口的Source

搜索域名时,只需要遍历map,执行方法即可。

合作

通过在线界面获取域名后,批量dns查询域名保存为domain.txt文件

洗牌

shuffledns 是调用的massdns,返回结果进行处理。 OneForAll 和 shuffledns 都使用了 massdns,我们来看看吧。

群发

Massdn 是一款简单、高性能的 DNS 存根解析器,适用于那些希望解析数百万甚至数十亿大域名的用户。无需特殊配置,massdn 每秒能够使用公开可用的解析器解析超过 350,000 个名称。

用C写的,第一次提交记录在2016年。

粗略看了下代码,massdns使用socket发送数据包,然后使用epoll、pcap、busy-wait轮询等技术接收。

去年我写了一篇文章《从Masscan,Zmap源码分析到开发实践》()。当时就想过用“无状态扫描”技术来爆破DNS。那时候我只用pcap模块收发

理论转速可达70w/s。

最近打算改一下开源~

总结

原来的计划还在,所以我会留到下一章。

总结一下。

老式的DNS爆破工具,非常稳定好用,依赖少,安装方便。

收集域名的方式很多,连接的网页界面很少。它支持python调用,应该可以很好地集成到扫描仪中。

依赖比较多,功能也比较全面,但是功能还是比较欠缺的,有些地方效率考虑的不是很好。适合爆个新域名,效果比较多。

对于子域的集合,我推荐的组合是and,它们都是go语言,直接下载二进制就可以运行。用来收集线上接口(不过好像没有OneForAll接口),用来爆破/验证域名。

有了linux哲学,运行起来更优雅~

另外跑字典用服务器吗,在进行DNS爆破时,DNS解析器的设置非常重要。它决定了爆破的质量和数量。建议每1w个字典添加一个DNS服务器。

写文章的时候可能有一些错误或者遗漏的地方,大家可以在论文评论区回复和我讨论~

过去的问题

如果感觉不错,请点击“我在看”

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论