导言 工欲善其事必先利其器,研究一家厂商就要从不同的角度和姿势去研究,多手抓多手也要硬。 今天再度研究一下子域名挖掘的方法,重点谈子域名爆破的方法,以及解决某些问题的方法。 采集的姿势大致如下,每一个姿势都会配一个案例。 - SSL域名证书
- 网站深度爬虫
- 利用域传送漏洞
- 搜索引擎辅助采集
- crossdomain.xml辅助采集
- 子域名枚举爆破
复制代码 SSL域名证书大厂商的SSL证书一般都是一证多用,根据这个特性,可以得知一些子域名。 https://www.baidu.com [/url] [url=https://vpn.sohu-inc.com/]https://vpn.sohu-inc.com [/url] (以上图片来自乌云Zone) [url=https://crt.sh/]Certificate Search L.N.师傅贡献 网络深度爬虫以www.sina.com.cn为例,我们使用正则表达式抓取页面以sina.com.cn结尾的所有的URL(一级深度)。 - #!/usr/bin/env python
- # coding=utf-8
- # author=dave.fang@outlook.com
- # create=20160701
- import re
- import requests
- from pprint import pprint
- def crawl_page(url, domain):
- print('[*] Crawl URL: {0}'.format(url))
- found_url = set()
- req = requests.get(url, timeout=15)
- content = req.text
- link_list = re.findall(r"(?<=href=").+?(?=")|(?<=href=\').+?(?=\')", content)
- for url in link_list:
- result = re.findall('http[s]?://(.*?)\.sina\.com\.cn', url)
- if len(result) > 0:
- found_url.add('{0}.{1}'.format(result[0], domain))
- pprint(found_url)
- if __name__ == '__main__':
- page_url = 'http://www.sina.com.cn/'
- main_domain = 'sina.com.cn'
- crawl_page(page_url, main_domain)
复制代码一级深度爬出来的结果,就有146个子域名,这个小脚本权当抛砖引玉,可以再深度定制。 - [*] Crawl URL: http://www.sina.com.cn/
- {'2016.sina.com.cn',
- 'ah.sina.com.cn',
- 'ai.lottery.sina.com.cn',
- 'aipai.sina.com.cn',
- 'app.sina.com.cn',
- 'astro.sina.com.cn',
- 'auto.sina.com.cn',
- 'career.sina.com.cn',
- ...
- 'golf.sina.com.cn',
- 'zx.jiaju.sina.com.cn'}
- [*] Found Links Num: 146
复制代码 利用域传送漏洞因为对DNS服务器配置不当,导致任意IP都可以直接向DNS服务器请求数据,从而导致该域名的所有子域名暴露。 清华大学某分站DNS域传送漏洞 实例g-queen.com: - root@DaveX ~/D/FuzSub> python3 fuzz.py g-queen.com
- [*] FuzSub is hot.
- [*] Target: g-queen.com
- [+] Name Server: ['ns1.i-netex.com', 'ns2.i-netex.com']
- [*] Checking: g-queen.com NS: ns1.i-netex.com
- [*] Checking: g-queen.com NS: ns2.i-netex.com
- [+] g-queen.com HAS THE ZONE TRANSFER VULNERABILITY
- @ 86400 IN SOA ns1.i-netex.com. techadmin.oc11.com. 1371851839 10800 3600 604800 86400
- @ 86400 IN NS ns1.i-netex.com.
- 86400 IN NS ns2.i-netex.com.
- @ 86400 IN A b'67.43.170.100'
- @ 86400 IN MX 10 mail
- @ 86400 IN TXT "v=spf1 +ip4:67.43.170.xn--0/24 all" "-j1f"
- admin 86400 IN A b'67.43.170.12'
- ml 86400 IN A b'67.43.170.25'
- ml 86400 IN MX 50 ml
- www3 86400 IN A b'67.43.170.100'
- webmail 86400 IN A b'67.43.170.2'
- ftp 86400 IN CNAME @
- munin 86400 IN A b'67.43.170.104'
- m 86400 IN A b'67.43.170.100'
- cache1 86400 IN A b'67.43.170.67'
- ana 86400 IN A b'67.43.170.52'
- ns 86400 IN A b'67.43.170.2'
- mail 86400 IN A b'67.43.170.2'
- lists 86400 IN CNAME @
- www4 86400 IN A b'67.43.170.100'
- www 86400 IN CNAME @
- www2 86400 IN A b'67.43.170.100'
- [*] Done!
- [*] Total Time Consumption: 8s
复制代码这就有可能会获得一些敏感信息,帮助后续的测试。 搜索引擎辅助采集例如在Google中搜索: [/url] 但是搜索引擎查询都会做一些反制爬虫的手段,目前使用google去采集的方法是调用google的官方API,或者调用bing的API去辅助采集。 crossdomain.xml辅助采集以[url=http://www.sina.com.cn/crossdomain.xml]http://www.sina.com.cn/crossdomain.xml为例: - <cross-domain-policy>
- <allow-access-from domain="http://all.vic.sina.com.cn"/>
- </cross-domain-policy>
复制代码我们可以从中获取all.vic.sina.com.cn这个子域名。 子域名枚举爆破原理很简单,向DNS服务器(如8.8.8.8和8.8.4.4)请求字典里面的子域名,看返回的数据里面是否有记录,如果有则说明这是一个存在的子域名。 比如说,向114.114.114.114定向请求www.qq.com的记录,返回了一条A记录指向182.254.34.74,就说明存在这个域名;相应的请求wooyun.qq.com并没有相应的记录返回,这就说明没有这个域名存在。 注:一般只使用同一套主、副DNS,即8.8.8.8和8.8.4.4,DNS服务器不宜混搭,否则容易出现大量误报 发包可以用第三方库,比如说lijiejie的subDomainBrute使用了dnspython这个包。使用第三方包的确好,但是免不了一层封装和不能很好地理解DNS报文协议,也可能会降低一定的效率,和没有解决泛解析的好办法。 泛解析这个问题的解决方法很简单,向DNS请求*记录,然后把枚举子域名回来的记录和*的记录比对,如果相同则直接排除。 但是实际上,如果使用第三方包,不自己造轮子的话,是无法实现这个的。因为有些域名的*记录是CNAME,而第三方包只能解析出IP却不会返回出CNAME给你。 举个例子,以www.baidu.com,大家ping一下都知道会跳转到www.a.shifen.com,这就是一个CNAME记录,但是我们用第三方包只能获得最后解析出来的ip。 也就是说,如果一个域名他的泛解析是一个CNAME记录而且这又是一个CDN域名(恰巧这个又不少),那么不是自己定制的dns查询函数,一般都会出现大量泛解析误报。 这就有点像是灯下黑,知道了怎么做就可以了,却一直没有解决的办法。 如果要自己定制的话需要研究一下DNS报文协议,这里引用两张图片做简要分析,来源于DNS报文结构实例解析 - bluemonster。 这是向DNS请求部分的: [/url] 这是DNS服务器回传的报文: [url=http://www.davex.pw/images/how_to_fuzz_domain/dns_respond.png] 只需要按照这个协议的格式做正则提取即可获得我们想要的信息,A记录的是固定的正则,CNAME记录需要嵌套一层正则才能获取。 这里不详细说怎么去提取的方法,只给大家抛个砖。 最后附上根据这一原理做出来的一个子域名挖掘工具,FuzSub - Github,理论上没有泛解析的误报问题,若有疑问可以PM我~ 这里提供几个测试域名,都有CNAME记录作为泛解析的。 - alitrip.com
- taobao.com
- tmall.com
- 52pk.com
- focus.cn
复制代码 Reference企业域名收集 - WooYun Wiki 子域名挖掘测试总结 - WooYun Zone 分享一个找子域名的小技巧 - WooYun Zone 分享一个找到目标相关联域名的办法 - WooYun Zone DNS报文结构实例解析 - bluemonster
|