域名资产收集整理实践篇

VSole2023-03-21 14:33:00

之前一位学员分享了一个关于自动化挖洞的方法论《我的渗透测试方法论》完整讲述了如何从一个域名开始到最终的漏洞扫描,但是对于初学者而言,知道思路,从思路到实践又有很长的路要走,今天来分享下第一阶段的工作如何做。

多工具组合收集子域名

主要完成以下工作:

1、使用 Oneforall、amass、ksubdomain 针对目标进行域名收集 

2、将所有结果进行汇总,然后提取所有目标到对应的文件中 

3、使用 dnsgen 基于收集到的域名列表,生成新的字典,然后使用 ksubdomain 进行验证 

4、最后将所有存活的域名和IP对应列表整理出来,输出文件

其中涉及开源工具以及自定义脚本实现数据的整合处理。

第一步:使用 Onefoall 实现子域名收集

使用命令(只进行域名收集,不做存活验证):

python3 oneforall.py --target xazlsec.com --req False run

结果格式如下:

cat results/xazlsec.com.csv

第二步:使用 amass 实现子域名收集

使用命令(被动+枚举):

amass enum -v -src -ip -brute -d xazlsec.com -o xazlsec-amass.txt

结果格式如下:

第三步:使用 ksubdomain 实现子域名收集

提前准备字典(针对泛解析域名,效果一般,需要手动去掉与泛解析结果相同的域名),命令:

ksubdomain enum -d xazlsec.com -f dns.txt -o xazlsec-ksub.txt

结果如图:

针对大文件做 dns 枚举存在丢包的情况

1、可以使用自定义脚本或者 split 对大文件进行分割

split -l 1000 subdomain.txt subs/

分割后的文件保存至目录 subs 中

2、简单写一个脚本,生成一个 bash 脚本


import os
for item in os.listdir('subs/'):    print("./ksubdomain v --dns-type a -f subs/{} -o a/{}".format(item, item))
python3 gen.py > scana.sh

最后执行:

bash scana.sh

第四步:编写脚本,实现数据整合

首先将三个工具的结果文件放置在相同目录下,方便调用,也可以不用,编写脚本时,指定路径即可,以上三种工具的结果分别是:

Oneforall: /usr/src/github/OneForAll/results/xazlsec.com.csv Amass: /root/xazlsec-amass.txt ksubdomain: /root/xazlsec-ksub.txt

下面是一个简单脚本,将三个文件中的域名提取出来进行去重汇总;


#!/usr/bin/env python3#-*- coding: utf-8 -*-
Oneforall="/usr/src/github/OneForAll/results/xazlsec.com.csv"Amass="/root/xazlsec-amass.txt"ksubdomain="/root/xazlsec-ksub.txt"
#读取 Oneforall 的结果#id,alive,request,resolve,url,subdomain,level,cname,ip,public,cdn,port,status,reason,title,banner,cidr,asn,org,addr,isp,sourcedef readOneforall(filename):    domain2ip = {}    for item in open(filename):        sub = item.strip().split(',')[5]        ip = item.strip().split(',')[8]        if sub != "subdomain":            domain2ip[sub] = ip    return domain2ip

#读取 amass 的结果def readAmass(filename):    domain2ip = {}    for item in open(filename):        sub = item.strip().split(' ')[-2]        ip = item.strip().split(' ')[-1]        domain2ip[sub] = ip    return domain2ip


#读取 ksubdomain 的结果def readKsubdomain(filename):    domain2ip = {}    for item in open(filename):        sub = item.strip().split('=>')[0]        ip = item.strip().split('=>')[-1]        domain2ip[sub] = ip    return domain2ip

#保存结果def saveResults(domain2ip):    obj = open("results.txt", 'a+', encoding='utf-8')    for sub in domain2ip:        ip = domain2ip[sub]        obj.writelines(sub+'')    obj.close()
if __name__=="__main__":    o = readOneforall(Oneforall)    a = readAmass(Amass)    k = readKsubdomain(ksubdomain)    domain2ip = o    for sub in a:        ip = a[sub]        domain2ip[sub] = ip    for sub in k:        ip = k[sub]        domain2ip[sub] = ip    saveResults(domain2ip)

使用方法也很简单,将你本地的文件路径进行替换,然后执行该脚本,最后结果保存至文件 results.txt 中:


第五步:使用 dnsgen 基于已知域名生成新的字典

需要将所有子域名保存至文件中,不包含 IP 地址的纯子域列表,然后使用命令:

dnsgen results.txt -w word.txt > newdns.txt

为了方便,可以将之前收集的域名一起放在这个新域名列表中,最终解析的结果就是一个比较全面的结果,只需提取其中的域名和IP即可:

cat results.txt >> newdns.txt

最后使用 ksubdomain 进行最后的解析操作:

ksubdomain verify -f newdns.txt -o newsub.txt

最后的 newsub.txt 就是之前所有步骤中收集的所有子域名列表,为后续的操作提供数据支持。

第六步:排除泛解析域名

排除思路,首先判断域名是否存在泛解析,如果存在则启动排除泛解析的程序,排除方法的话,可以保留与泛解析 IP 一致的结果中的三个,其余的都进行删除。这个操作最好只针对暴力枚举阶段的结果进行排除,也就是针对 ksubdomain 产生的结果。

实现上面功能的脚本,如下:


#!/usr/bin/env python3#-*- coding: utf-8 -*-
import sysimport randomimport stringimport dns.resolver
#读取 ksubdomain 的结果def readKsubdomain(filename):    domain2ip = {}    for item in open(filename):        sub = item.strip().split('=>')[0]        ip = item.strip().split('=>')[-1]        domain2ip[sub] = ip    return domain2ip

#判断域名是否存在泛解析def judgeWildcard(domain):    randstr = ''.join(random.choices(string.ascii_letters + string.digits, k=32))    try:        answer = dns.resolver.Resolver().resolve(randstr + "." +domain)        for a in answer:            return str(a)    except:        return False
#保存结果def saveResults(domain2ip):    obj = open("ksubresults.txt", 'a+', encoding='utf-8')    for sub in domain2ip:        ip = domain2ip[sub]        obj.writelines(sub+"\t"+ip+'')    obj.close()

if __name__=="__main__":    domain = sys.argv[1]    wildcard = judgeWildcard(domain)    if not wildcard:        print("[-]不存在泛解析,程序退出")    filename = sys.argv[2]    d2i = readKsubdomain(filename)    newd2i = {}    i = 0    for sub in d2i:        ip = d2i[sub]        if ip == wildcard:            i = i + 1            if i > 3:                continue        newd2i[sub] = ip
    saveResults(newd2i)    print('[+]存在泛解析,结果保存至:ksubresults.txt')

其他部分内容

今天分享是是整个过程中的第一阶段,如何从主域名到子域名列表的跨越,其余四阶段分别为:

  • 从 IP 到端口到网站链接的跨越
  • 从网站链接到网站信息的跨越,包括存活验证、去重、指纹识别、waf 识别、网站截图等技术
  • 从存活网站到 URL 列表的跨越,包括带参数 url 去重
  • 从网站信息到漏洞发现的跨越,包括漏扫工具的组合
域名sub
本作品采用《CC 协议》,转载必须注明作者和本文链接
近日,一个名为“SubdoMailing”的大规模广告欺诈活动正在使用8000多个合法互联网域名和1.3万个子域名大量发送垃圾邮件,每天发送量高达500万封电子邮件,用于诈骗和恶意广告盈利。
0x01 工具介绍信息收集过程中,大型目标收集到的子域名和解析IP的关系错综复杂,肉眼分析起来费时又费力。cobweb 蛛网 将关联数据进行可视化显示,方便快速定位目标资产。
Komo集成了oneforall,subfinder,ksubdomain,amass,ctfr,emailall,httpx,naabu,TxPortMap,ehole,goon3,crawlergo,rad,hakrawler,gau,gospider,URLfinder,vscan,nuclei,afrog,vulmap,SweetBabyScan,xray等20多款工具,全自动化、智能化工具。本工具依托各工具特色,进行模块化构建。配置配置文件config/config.yaml部分配置讲解修改有runtime字段的工具的runtime字段,设置工具的运行时间,如果超时则kill掉,推荐设置600-1200scrawlergo:
一个既可以满足安服仔日常渗透工作也可以批量刷洞的工具盒子。集合了常见的域名收集、目录扫描、ip扫描、指纹扫描、PoC验证等常用工具,方便安服仔快速展开渗透测试。
集合了常见的域名收集、目录扫描、ip扫描、指纹扫描、PoC验证等常用工具,方便安服仔快速展开渗透测试。且支持TAB键关键字自动补全。smap:s0md3v/Smap: a drop-in replacement for Nmap powered by shodan.io
集合了常见的域名收集、目录扫描、ip扫描、指纹扫描、PoC验证等常用工具,方便安服仔快速展开渗透测试。且支持TAB键关键字自动补全。smap:s0md3v/Smap: a drop-in replacement for Nmap powered by shodan.io
现在只对常读和星标的公众号才展示大图推送,建议大家把betasec“设为星标”,否则可能看不到了!平台介绍这是一款自动化信息收集的一个简单平台,通过收集经常使用的信息收集工具和技术,现对内网及互联网资产信息的自动收集,提高隐匿排查和透测测试的工作效率。
HW红队作战工具
2022-06-19 06:13:20
本列表,收集一些在服务器上运行的一些工具,组建自动化,服务器长期挂跑项目 欢迎提issues,来丰富工作流程,比如自己挖洞时候的一些简易流程,工具+调用命令, 在我的日常渗透中,我发现我重复调用几个工具,但是不同的调用组合渗透的工作流程,有时候调用命令会忘记,所以有了这个列表,来达到帮助我记忆一些流程命令的文档,未来还会细化过程,脚本小子福音了
所以只能退而求其次,选用cmder工具。当然,终端cmd仅是为了美化,看起来好看一些,除Cmder之外还有很多更好用的代替工具,娱乐之余,仅供参考。即可新开cmd窗口,除collect_subdomain之外,其余工具均可无需等待当前命令执行结束直接执行下一条命令。所以定位就是渗透盒子,辅助工具。但通过将subfinder、ksubdomain、finger整合,通过一条命令也可做到资产收集验证指纹扫描,结合PoC扫描验证也可进行批量刷洞。
VSole
网络安全专家