面试官直接问我子域名收集工具原理,我寻思会用就行啊,结果我想了半天也没整明白,然后去把工具扒出来挨个瞅了瞅,这边给大家介绍一下:
一、首先了解一下为什么要收集子域名
在挖洞之前肯定要进行信息收集,信息收集其中肯定包含子域名收集,我这里不推荐工具,毕竟工具有好有坏,每个工具都有自己的利弊,那我们就说一下常用工具OneforAll吧。
二、工具结构
基本是由三个文件构成,另外一个takeover.py我根本用不上,所以不提这个脚本。
其中Oneforall.py是入口文件:
1、brute.py爆破子域名文件
2、export.py导出结果模块
三、基本流程
Oneforall的收集流程其实跟手动差不多,他首先进行收集,其中有一个srv收集查询,大概从134行开始(Oneforall.py),先进行srv查询
srv是个什么东西呢,借用百度一下
SRV 记录:一般是为Microsoft的活动目录设置时的应用。DNS可以独立于活动目录,但是活动目录必须有DNS的帮助才能工作。为了活动目录能够正常的工作,DNS服务器必须支持服务定位(SRV)资源记录,资源记录把服务名字映射为提供服务的服务器名字。活动目录客户和域控制器使用SRV资源记录决定域控制器的IP地址。
通俗一点来讲,就是解析记录,看一下能不能正确解析,当然如果不对大佬们请指正一下。
那我们继续说吧,先进行一个SRV记录查询,后面就进行爆破,然后进行域名匹配,然后进行DNS解析,然后就是处理泛解析域名, 然后是http验证,之后根据得到的结果继续进行递归子域名爆破,最后是那个takeover脚本检查,我不知道啥意思就不说了。
四、分析
这里面试官问我泛解析问题脚本是怎么处理的,我当时说的是工具挨个去匹配IP跟Cname出现次数,出现次数较多的时候就是泛解析,然后就抛弃。
脚本是这样判断的,生成三个随机域名,然后挨个匹配,如果页面相同存在泛解析;域名解析成功,http解析不成功也是泛解析;否侧不是泛解析。
脚本处理泛解析跟我说法相同,匹配IP跟Cname次数,超过他设置的值就直接抛弃。
我们继续来说这个脚本,分析一下模块吧:
1、收集模块
他收集模块主要收集证书、子域名查询接口、DNS子域名查询、威胁情报、搜索引擎查询基本就是这些内容
2、SRV记录查询模块
因为SRV我是第一次听说,所以不怎么了解这个模块不介绍了,具体去看一下百度的结果把,不敢细说怕被喷。。
3、爆破模块
它主要使用massdns工具爆破,这里就引出了面试官另一个题,为什么会配置两个dns?
那我们来说一下massdns这个工具,这个工具其实还是利用dns服务器与子域名字典进行匹配爆破,那他为什么会有两个dns服务器呢,因为一个在国内一个在国外,不在国外使用国外服务器,在国内使用国内服务器;其他因素要参考处理泛解析。
4、DNS验证模块
将结果重新进行DNS解析扫描
5、HTTP验证模块
这个其实很简单,就是在域名前加http头部进行访问不是500也不是400默认就是存活。
6、子域名查询模块
这个看代码很简单,一个是从历史查询,一个从js查询,在finder文件中
7、其他
其他模块也就是一些输出,就是让你看起来比较容易分辨
这个简介只是为了让大家知道,做安全挖洞,不要一味去使用工具,最起码你要知道这个工具是干嘛的,怎么能更好的去利用,他原理什么样子的,嗯就这样吧。
还有一件事,就是如果有人详细了解,这里有github传送门“https://github.com/shmilylty/OneForAll/tree/master/modules/datasets”,其中有最详细的接口介绍。