美文网首页
我的子域名挖掘之道

我的子域名挖掘之道

作者: book4yi | 来源:发表于2020-06-08 14:37 被阅读0次

文章内容介绍

本篇文章仅讨论如何挖掘出更多的子域名,其它不作分析。
先说说我常用的挖掘子域名的手段:

  1. OneForAll
  2. Open Data
  3. subDomainsBrute/Layer子域名挖掘机
  4. Sublist3r
  5. JSFinder
  6. 其它补充

Oneforall:


一款集百家之长,功能强大的全面快速子域收集终极神器,收集子域名快速且全面,但要注意一定要配置API,否则收集的子域名会不够全。

Open Data:


Rapid7的Open Data项目进行了整个Internet的调查,以深入了解全球常见漏洞的风险,它收集所有IPv4地址的DNS记录。
它本身也提供了一个查询子域名的接口:subdomain
但是它有一定的局限性,不支持批量查询和模糊查询。
这里我们可以把Open Data中的rdns和fdns导入数据库中,推荐使用clickhouse,然后再进行查询,这对笔记本的性能有一定要求。
具体过程请参考:如何搭建一个自己的DNS域名检索系统

subDomainsBrute


爆破子域名也是收集子域名的重要方法之一,爆破脚本已经有了,剩下的就是去完善自己的子域名爆破字典。

Sublist3r


项目地址:https://github.com/aboul3la/Sublist3r
Sublist3r使用许多搜索引擎(例如Google,Yahoo,Bing,Baidu和Ask)枚举子域。Sublist3r还使用Netcraft,Virustotal,ThreatCrowd,DNSdumpster和ReverseDNS枚举子域。
使用该脚本主要是对oneforall的一个补充。

python2 sublist3r.py -d huazhu.com -p 80,443,8080 -o huazhu.txt

建议:挂代理以后再运行脚本

JSFinder

JSFinder是一款用作快速在网站的js文件中提取URL,子域名的工具。
使用条件:通过前面几步收集到了大多数的子域名后,将收集到的子域名分别以http和https协议生成url字典,然后使用JsFinder挖掘更多子域名

在线站点:

https://www.nmmapper.com/sys/tools/subdomainfinder/
https://w-e-b.site/?act=findomain

三级子域名发现:


通过去查找主域名的证书信息,得到三级域名的证书信息:

curl -s "https://rapiddns.io/subdomain/tencent.com?full=1" | grep -oP '_blank">\K[^<]*' | grep \* |sort -u

然后把*号去掉,进行三级子域名爆破。如果没结果,可以多请求几次试试

其他补充:

1、通过扫描C段获取ip138中存在历史解析的ip,然后在ip138中进行ip反查得到更多的子域名。我自己写了个demo来实现,个人代码水平贼菜,大佬轻喷,主要通过以下两个步骤来实现
1.通过扫描C段获取ip138中存在历史解析的ip
2.把获取到的ip放到ip138进行反查,查找ip的历史解析记录

import requests
import re
import time
from scrapy.selector import Selector
from scrapy.http import HtmlResponse
requests.packages.urllib3.disable_warnings()
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.40'
}

# 通过扫描C段获取ip138中存在历史解析的ip
def ip_find():
    with open(r'ips.txt', 'r') as f1:        #ips.txt的内容为通过上述手段收集到的ip的C段,如110.110.110.0/24
        ips = [line.strip() for line in f1.readlines()]
    for ip in ips:
        url0 = 'https://chapangzhan.com/' + ip
        r0 = requests.get(
            url0,
            headers=headers,
            allow_redirects=True,
            verify=False,
            timeout=30)
        html0 = r0.text
        status0 = r0.status_code
        response0 = HtmlResponse(html0, body=html0, encoding='utf-8')
        selector0 = Selector(response=response0)
        xpath = '/html/body/div/div[2]/div/div[1]/div[1]/div/div[2]/table/tfoot/tr/th[1]/b'
        count_result = selector0.xpath(xpath)
        ok = re.findall(r'(?<=<b>).*(?=</b>)', str(count_result))
        count = " ".join(ok)    
        for i in range(int(count)):
            j = i + 1
            xpath2 = '/html/body/div/div[2]/div/div[1]/div[1]/div/div[2]/table/tbody/tr[' + str(
                j) + ']/td[1]/a'
            ip_result = selector0.xpath(xpath2).extract()
            ok2 = re.findall(r'(?<=>).*(?=</a>)', str(ip_result))
            get_ip = " ".join(ok2)
            ip_list.append(get_ip)
            print('ip采集完成,共', len(ip_list), '个')


# 查找IP的历史解析记录————域名
def domain_find():
    for line in ip_list:
        begin = 3
        url = 'https://site.ip138.com/' + line + '/'
        r = requests.get(
            url,
            headers=headers,
            allow_redirects=True,
            verify=False,
            timeout=30)
        html = r.text
        status = r.status_code
        count = re.findall(r'-----', html)
        response = HtmlResponse(html, body=html, encoding='utf-8')
        selector = Selector(response=response)
        print(url + ':' + str(status))
        time.sleep(0.5)
        for i in range(len(count)):
            content = '//*[@id="list"]/li[' + str(begin) + ']/a'
            begin = begin + 1
            result = selector.xpath(content)
            result = str(result.extract()).split('/')
            result = result[1]
            domain = result.split('.')[-1]
            domain = '.' + domain
            Domain = result.split(domain)[0].split('.')
            Domain = Domain[-1] + domain
            if Domain == 'com.cn':
                domain = result.split('.')[1]
                Domain = domain + '.com'
            print(line + '\t' + Domain + '\t' + result + '\t' + str(status))
            domain_set.add(line + '\t' + Domain + '\t' + result + '\n')


def main():
    ip_find()
    domain_find()
    b = list(domain_set)
    b.sort()
    fr = open(r'ip138.txt', 'w+')        #得到结果,生成ip138.txt
    fr.writelines(b)
    fr.close()


if __name__ == '__main__':
    ip_list = []
    domain_set = set()
    main()

2、另外我们要关注厂商是否存在微信小程序,尝试去进行抓包获取子域名,往往能发现一些通过上述手段没有收集到的子域名,另外小程序的源码可能会暴露一些子域名:


相关文章

  • 我的子域名挖掘之道

    文章内容介绍 本篇文章仅讨论如何挖掘出更多的子域名,其它不作分析。先说说我常用的挖掘子域名的手段: OneForA...

  • 信息收集

    域名挖掘:工具 :subDomainsBruteLayer子域名挖掘机 在线子域名反查:http://tool.c...

  • python挖掘子域名

    使用某在线网站的查询子域名功能进行挖掘子域名。 代码实现 #coding=utf-8import requests...

  • 漏洞挖掘-子域名

    前言 在挖掘SRC漏洞以及HW收集资产的时候,子域名作为必备的一项信息收集工作。同时也是寻找到敏感资产、脆弱资产、...

  • 信息收集

    1. 子域名收集: layer子域名挖掘机 - 适用于可以扫描的网站subdomains-py程序 - 适用于可...

  • SRC漏洞挖掘信息收集之子域名收集(一)

    一、子域名介绍 1.1 什么是子域名? 子域名级别:域名按照层级可以分为顶级域、根域名、子域名等 。例如.com ...

  • 子域名挖掘工具Aquatone安装以及遇到的坑

    Aquatone是一款子域名挖掘工具,Aquatone不仅仅只是通过简单的子域爆破,它还会利用各种开放的互联网服务...

  • 刷漏洞应有的姿势

    漏洞挖掘准备: 1.站点资产所有域名:通过whois反查所有公司域名(邮箱与注册者,以及之前的域名) 2....

  • Linux dig command usage

    DIG(Domain Information Groper)域名信息挖掘,是Linux上一个用来查询域名信息的很有...

  • 信息收集:子域名信息收集

    子域名介绍 顶级域名例如“.com”“.net”“.org”“.cn”等等 子域名子域名(Subdomain Na...

网友评论

      本文标题:我的子域名挖掘之道

      本文链接:https://www.haomeiwen.com/subject/ucfvbhtx.html