安全开发实战(4)--whois与子域名爆破

简介: 本文介绍了在网络安全渗透测试中,如何使用Whois查询和子域名爆破来收集目标组织的信息。Whois查询可以获取域名的注册者联系信息、注册时间、DNS服务器等关键数据,而子域名爆破则能发现未公开的网络资产。Whois查询可以通过Python的`python-whois`库实现,它能返回大量关于域名的详细信息。子域名爆破通常涉及创建自定义字典,使用Python的`socket`模块将字典中的字符串与主域名组合,然后尝试解析IP地址,找到有效子域名。

前言


版权声明:本文为本博主在CSDN的原创文章搬运而来,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                            

原文链接:https://blog.csdn.net/weixin_72543266/article/details/137934139


whois查询

       Whois 查询是一种用于获取有关互联网域名注册信息的公共查询服务。当注册一个域名时,必须提供一些个人或组织信息,例如姓名、电子邮件地址、联系电话等。这些信息通常是公开的,可以通过 Whois 查询来获取。

       在渗透测试中,Whois 查询可以我们收集目标组织的关键信息。通过查询目标组织的域名注册信息,我们基本可以获得以下信息:


  1. 组织联系信息:包括名称、地址、电话号码和电子邮件地址。这些信息可以用于建立联系、进行社会工程攻击或者其他类型的攻击。
  2. 域名到期日期:了解域名何时到期可以帮助我们预测目标可能面临的安全风险。例如,如果域名即将到期,组织可能会忽略一些安全措施,使其易受攻击。
  3. DNS 服务器信息:这些信息可以揭示目标使用的 DNS 提供商,有时甚至可以提供与该组织相关的其他域名。
  4. 域名所有者历史记录:通过查看域名所有者的历史记录,我们可以了解组织背后的变化、合作伙伴关系或其他潜在的信息。

       总的来说:我们可以将这些信息用于制定针对目标组织的更有针对性的攻击策略,或者作为侦察阶段的一部分,以帮助了解目标环境。

子域名

       子域名是指在一个域名下面的更小的域名。通常,一个域名可以有多个子域名,每个子域名都可以有自己的主机或服务。例如,在域名example.com下,可以有子域名如www.example.com、mail.example.com等,其实就是前面的信息在换。

子域名爆破

       子域名爆破是一种渗透测试技术,旨在通过尝试各种可能的子域名来发现目标域名下存在的子域名。我们可以使用自动化工具或脚本来进行子域名爆破,工具通常会生成可能的子域名列表,并尝试通过DNS查询确定哪些子域名是有效的。

       在渗透测试中,子域名爆破可以帮助我们发现目标可能忽略或未公开的子域名。这些子域名可能包含敏感信息、测试环境、未经授权的服务或其他潜在的安全风险。通过发现这些子域名,我们可以扩大对目标组织的攻击面,并进一步进行深入的渗透测试活动。

1.4 whois查询

方式1:

利用python第三方库python-whois查询,没有这个库,需要安装一下

pip install python-whois

image.gif

     这个没什么技术含量,直接导入库进行利用就好了,可以看出返回了很多信息,当然,渗透中关注的是其中的获取到域名注册者的联系方式、注册时间、DNS服务器信息等,需要从这个获取的信息中进行提取关键信息即可,有时间将其完善一下.

from whois import whois
data = whois('www.baidu.com')
print(data)

image.gif

image.gif

方式2:

通过爬虫将一些查询whois的网站(阿里,爱站)爬取下来,这里因为要写针对某个网站的爬取,还是比较麻烦的,不如使用现成的浏览器插件superSearchPlus工具效率更快,就不写了.

1.5 子域名查询

方式1:子域名爆破

      为什么要进行子域名爆破,使用第三方工具或是在线查询不是很好吗,作为一个渗透人员,要尽量避开大家都在使用的工具和字典,那么子域名爆破是最后也是当下最好的方式了,资产测绘平台也有查询不到的资产(未收录),当然也可以使用子域名爆破工具,都是可以的,唯一点就是建立自己的爆破字典,能够获取别人获取不到的资产.

1.5.1 One

     利用原理,是通过将字典中的字符读取出来,然后与主域名进行拼接,然后使用socket的方法查询ip地址,如果查询出ip地址,证明这个子域名存在,下面有百度做个示例.

# 方式1: 利用字段爆破进行查询
import socket
import time
# 子域名查询
def subdomain_collect():
    print('[+] 正在收集子域名信息...')  # 这个是我后面加的
    for sub in open('dic.txt', 'r'):
        sub = sub.replace('\n', '')  # 将每个子域名后的换行符替换为空
        url = f'{sub}.baidu.com'
        try:
            ip = socket.gethostbyname(url)
            print(f'[+] {url} -> {ip}')
            time.sleep(0.5)  # 避免因为查询过快而导致ip被封
        except Exception as e:
            pass
if __name__ == '__main__':
    subdomain_collect()

image.gif

image.gif

image.gif

1.5.2 Two

     因为写批量收集的时候需要进行测试,所以根据上面的返回bing和百度的子域名的真实数据混合不存在的子域名制作一个小字典进行测试,因为本次代码,写出后没有出现任何问题,一次成功,所以也就没有最后的整合部分了.

     当然在运行的结果中也可以发现,出现多个域名对应同一个ip,因为本来百度和bing都使用了cdn技术,所以说很正常,后面也需要将代码改进,或是写一个将子域名反查ip相同的子域名进行去重.

# 方式1: 利用字典爆破进行查询
import socket
import time
# 子域名查询
def subdomain_collect(domain):
    with open(f'sub_{domain}.txt', 'a+') as w:
        print(f'[+] 正在收集{domain}子域名的信息...')
        w.write(f'[+] 收集{domain}子域名的信息如下:\n')
        for sub in open('test.txt', 'r'):
            sub = sub.replace('\n', '')  # 将每个子域名后的换行符替换为空
            url = f'{sub}.{domain}'
            try:
                ip = socket.gethostbyname(url)
                print(f'[+] {url} -> {ip}')
                w.write(f'[+] {url} -> {ip}\n')
                time.sleep(0.5)
            except Exception as e:
                pass
    print('\n')
if __name__ == '__main__':
    for domain in open('domain.txt', 'r'):
        domain = domain.replace('\n', '')  # 将每个取出的域名后的换行符替换为空
        subdomain_collect(domain)

image.gif

测试小字典

test.txt

a
ab
a2
abcd
abc
city
a1
cc
a3
josn
blog1
pmt
asd
cha
a4
version
okay
aa
ab

image.gif

image.gif domain.txt

xxx.com
xxx.com

image.gif

运行完代码后生成的两个子域名文件:

sub_baidu.com.txt

[+] 收集xxx.com子域名的信息如下:
[+] a.xxx.com -> 112.34.113.xxx
[+] ab.xxx.com -> 39.156.66.xxx
[+] abc.xxx.com -> 36.155.132.xxx
[+] city.xxx.com -> 112.34.111.xxx
[+] cc.xxx.com -> 112.34.111.xxx
[+] cha.xx.com -> 163.177.17.xxx
[+] ab.xxx.com -> 39.156.66.xxx

image.gif

sub_bing.com.txt

[+] 收集bing.com子域名的信息如下:
[+] a.bing.com -> 204.79.197.xxx
[+] ab.bing.com -> 13.107.21.xxx
[+] a2.bing.com -> 223.119.248.xx
[+] abcd.bing.com -> 204.79.197.xxx
[+] abc.bing.com -> 13.107.21.xxx
[+] city.bing.com -> 13.107.21.xxx
[+] a1.bing.com -> 223.119.248.xx
[+] cc.bing.com -> 13.107.21.xxx
[+] a3.bing.com -> 223.119.248.xx
[+] josn.bing.com -> 204.79.197.xxx
[+] blog1.bing.com -> 13.107.21.xxx
[+] pmt.bing.com -> 13.107.21.xxx
[+] asd.bing.com -> 13.107.21.xxx
[+] cha.bing.com -> 204.79.197.xxx
[+] a4.bing.com -> 223.119.248.xxx
[+] version.bing.com -> 13.107.21.xxx
[+] okay.bing.com -> 13.107.21.xxx
[+] aa.bing.com -> 13.107.21.xxx
[+] ab.bing.com -> 13.107.21.xxx

image.gif

方式2:其他方式

通过子域名查询或是子域名枚举工具

     当然这种方式相信大家初学时都会使用通过将一些子域名查询网站,查询的子域名将其爬取下来,写到txt文本中火是csv中,使用常见工具进行枚举其实根本也是通过调用一些资产测绘平台的api或是工具自带的字典进行暴力枚举,根本上和我使用的这个基本上差不多,大家都在用,用烂了,很难搜集到别人搜集不到的资产,说到底,自己总结的别人没有的字典,才能发现新的大陆,这里我就不写了,大佬们写了很多工具和脚本调用资产测绘平台直接使用就可以了.

总结

      本篇文章也是对上一篇的进一步利用吧,在对渗透过程中,还是需要对所属域名的所有者的信息进行一定的收集的,帮助我们制作对应的字典进行一些登录界面的爆破,当然在渗透过程中,主域名都是比较难啃的骨头,需要我们对子域名进行信息收集,然后进行进一步的利用.

相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
JSON Linux 网络安全
一文搞定:whois数据库查询域名信息(WHOIS)
一文搞定:whois数据库查询域名信息(WHOIS)
1733 0
一文搞定:whois数据库查询域名信息(WHOIS)
|
网络协议 应用服务中间件 Linux
实战:第二十四章:ip:port改成域名的方式,并将http自动转https
实战:第二十四章:ip:port改成域名的方式,并将http自动转https
328 0
实战:第二十四章:ip:port改成域名的方式,并将http自动转https
|
4天前
|
安全 网络协议 网络安全
安全开发实战(2)---域名反查IP
本文介绍了域名与IP地址的关系以及域名反查IP的作用。通过DNS,域名与IP地址相互映射,方便用户访问网络资源。在渗透测试中,反查IP用于确定服务器真实地址、进行目标侦察和安全性评估,也能检测DNS劫持。文中提供了一些Python代码示例,演示了如何进行域名反查IP和批量处理,并强调在处理时要注意去除换行符以避免错误。
|
4天前
域名信息查询同款WHOIS源码
域名查询一般是指查询域名的whois注册信息,域名WHOIS是当前域名系统中不可或缺的一项信息服务。在使用域名进行Internet冲浪时,很多用户希望进一步了解域名、名字服务器详细信息,这就会用到WHOIS。
25 5
|
4天前
|
网络协议 Ubuntu Linux
|
4天前
|
网络协议 Shell Linux
【Shell 命令集合 系统管理 】Linux 查询域名的注册信息 whois命令 使用指南
【Shell 命令集合 系统管理 】Linux 查询域名的注册信息 whois命令 使用指南
57 1
|
7月前
|
域名解析 监控 网络协议
企业实战(17)记录一次使用DDNS动态域名解析服务外网通过域名访问内网服务器服务的过程
企业实战(17)记录一次使用DDNS动态域名解析服务外网通过域名访问内网服务器服务的过程
459 0
|
缓存 Linux Python
Python利器:检索域名WHOIS信息的Python软件包
Python利器:检索域名WHOIS信息的Python软件包
141 0
|
网络协议 Python
Python 实现子域名查询与爆破
该工具第一是查询执行参数`-a Search xxx.com`第二是爆破`-a Blast domain wordlist`,工具同样可以使用DNS域名的枚举,和上面的区别就在于该方法使用了DNS迭代查询.
141 0
|
机器学习/深度学习 人工智能 自然语言处理
NLP实战:对GPT-2进行微调以生成创意的域名
NLP实战:对GPT-2进行微调以生成创意的域名
217 0
NLP实战:对GPT-2进行微调以生成创意的域名