服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

域名资产收集整理实践篇

日期: 来源:信安之路收集编辑:xazlwiki

本文是信安之路 wiki 平台第 68 篇文章

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

多工具组合收集子域名

主要完成以下工作:

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+'\n') 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+'\n') 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 去重

  • 从网站信息到漏洞发现的跨越,包括漏扫工具的组合

以上部分内容均已更新至信安之路 wiki,均以实验操作步骤的方式提供,大大减少操作难度,让你完整体验整个过程,欢迎注册体验。

相关阅读

  • 公益刷洞前奏,目标哪里来?

  • 大家好,好久不见,上周一直在做信息收集,顺带整理这两年刷公益漏洞编写的脚本和工具,经过两年的时间沉淀,积累了一套属于自己的自动化挖洞系统,一觉醒来就有一百个漏洞等着要提交,现
  • Chatgpt 能帮我下片了!

  • 关于下载网页上的视频,相信每个小伙伴的手里都有那么三把斧,什么嗅探,什么解析等等,我们也写过很多了,比如之前咱们不还研究过 M3U8 下片的姿势,
  • 老马吐槽视频网站广告多,我来给他出方案!

  • 近日,特斯拉 CEO 马斯克发文吐槽 U2B。说逛这个网站时有看不完的诈骗广告。随即有网友回复:“作为首富,你为什么不充个会员?”,“又或者干脆直接买下 U2B,然后取消广告功能”。当
  • 【Pycharm教程】使用 PyCharm 运行和调试 R 脚本

  • 运行 R 脚本1. 单击R 文件工具栏。2. 在R 控制台和R 工具窗口中分析结果。R 控制台启动并显示发送到标准输出的执行结果。如果脚本呈现任何可视内容, PyCharm 还会打开R 工具
  • 新鲜出炉六款神级插件,一键破除所有限制!

  • 前言最近很多小伙伴问浏览器扩展怎么用,莫理特地写了一篇教程,大家先看着,要是还有问题就底部留言哈~主流浏览器扩展+油猴脚本安装教程顺带的,再给大家安利几款好用的浏览器扩展
  • 柑橘春梢管理好,保花保果更省力

  • 柑橘一年可以萌发春夏秋梢,甚至冬梢,春梢无论对幼树还是挂果树,都非常重要,特别是对挂果树,春梢的质量决定着保花保果的质量,春梢管理好,保花保果才会更省心省力。(网络配图)春梢的重
  • 线下面基的正确姿势

  • 最近我们小圈子里的朋友就已经开始组织见面会了,也有很多朋友去交流,有非常大的收获,写了很多内容。想和大家去分享一下线下面基的事情,说实话,我们离不开线下交流的你在线上,不管

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 川观解读丨大熊猫迎“回国潮” 为何要回?

  • 这是2月19日在日本东京上野动物园拍摄的大熊猫“香香”。图据新华社川观新闻记者 王成栋 王培哲2月21日,旅日大熊猫后代“香香”回川。第二天,旅日大熊猫“永明”携双胞胎女儿
  • 域名资产收集整理实践篇

  • 本文是信安之路 wiki 平台第 68 篇文章之前一位学员分享了一个关于自动化挖洞的方法论《我的渗透测试方法论》完整讲述了如何从一个域名开始到最终的漏洞扫描,但是对于初学者
  • WebSocket 测试入门篇

  • 本文是信安之路 wiki 平台第 142 篇文章,注册解锁全部文章Websocket 是一种用于 H5 浏览器的实时通讯协议,可以做到数据的实时推送,可适用于广泛的工作环境,例如客服系统、物联
  • 渗透测试中的 URL 重定向

  • 本文为信安之路内部 wiki 第 144 篇文章,注册解锁全部文章开放重定向(Open Redirect),也叫URL跳转漏洞,是指服务端未对传入的跳转url变量进行检查和控制,导致诱导用户跳转到恶意网
  • 盘点最近两年出版的信息安全类图书「送书」

  • 书籍是获取知识性价比最高的途径,每一本书都汇聚了作者巨大的心血以及多年的实践经验,这两年疫情期间,信息安全领域出现了多个优秀书籍,今天就来一一盘点,总有一款适合你。送书活
  • 公益刷洞前奏,目标哪里来?

  • 大家好,好久不见,上周一直在做信息收集,顺带整理这两年刷公益漏洞编写的脚本和工具,经过两年的时间沉淀,积累了一套属于自己的自动化挖洞系统,一觉醒来就有一百个漏洞等着要提交,现