在渗透测试的早期阶段,子域名扫描是一个非常重要的步骤,它有助于识别目标组织的网络结构和在线资源。
子域名扫描应该在获得适当的权限和授权的情况下进行,以确保所有活动都是合法和合规的。
以下是进行子域名扫描的几个主要原因和目的:
##### 1.1 **信息收集和枚举**:
- 通过子域名扫描,渗透测试人员可以收集有关目标组织网络结构的宝贵信息。
- 这包括识别网络服务、服务器、应用程序和其他在线资源。
##### 1.2 **攻击面发现**:
- 子域名通常与目标组织的不同网络服务和应用程序相关联。每个子域名可能代表一个潜在的攻击向量。
- 通过识别尽可能多的子域名,渗透测试人员可以更全面地了解目标的攻击面。
##### 1.3 **发现隐藏或遗忘的资源**:
- 组织可能在一些子域名上托管旧的、未维护的或遗忘的服务和应用程序。
- 这些资源可能包含易于利用的安全漏洞,提供了渗透测试和攻击的机会。
##### 1.4 **识别可能的安全风险和配置错误**:
- 子域名扫描可能会揭示诸如错误配置、不安全的服务、未更新的系统和其他安全风险之类的问题。
##### 1.5**为后续步骤做准备**:
- 了解目标组织的网络拓扑和在线资源对于后续的渗透测试步骤至关重要,例如网络扫描、漏洞评估和实际的渗透测试。
##### 1.6 **合规性和审计**:
- 在某些情况下,进行子域名扫描也可能是为了满足特定的合规性要求或进行安全审计。
##### 1.7**监控和报告**:
- 子域名扫描可以为组织的安全团队提供必要的洞察力,以监控网络资源的状态和安全,同时也能提供渗透测试报告的必要信息。
一级域: baidu.com, sina.com
二级域: www.baidu.com, mail.sina.com
三级域: np.weixin.qq.com
ping baidu.com
ping baidu.com -n 2 # windows, 发送2次
ping baidu.com -c 2 # linux, 发送2次
ping baidu.com -w 1000 # windows, 超时限制1秒
ping baidu.com -W 1000 # linux, 超时限制1秒
(1) 域名存在:
正在 Ping www.a.shifen.com [120.232.145.185] 具有 32 字节的数据:
来自 120.232.145.185 的回复: 字节=32 时间=11ms TTL=54
来自 120.232.145.185 的回复: 字节=32 时间=11ms TTL=54
来自 120.232.145.185 的回复: 字节=32 时间=11ms TTL=54
来自 120.232.145.185 的回复: 字节=32 时间=11ms TTL=54
120.232.145.185 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 11ms,最长 = 11ms,平均 = 11ms
(2) 域名存在, 但禁用ping(ICMP echo 请求):
ping 192.168.110.129
正在 Ping 192.168.110.129 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。
192.168.110.129 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),
(3) 域名不存在:
Ping 请求找不到主机 ssk.baidu.com。请检查该名称,然后重试。
使用python执行ping命令, 根据字典扫描子域名:
# 基于Ping命令的子域名扫描
def ping_domain(dname):
# 读取字典
with open('../dict/subdomain-top160k.txt') as file:
domain_list = file.readlines()
for domain in domain_list:
result = os.popen(f"ping -n 1 -w 1000 {domain.strip()}.{dname}").read()
if '找不到主机' not in result:
print(f"{domain.strip()}.{dname}")
if __name__ == '__main__':
ping_domain(dname='baidu.com')
使用socket库的DNS解析方法, 根据字典扫描子域名:
# socket.gethostbyname() 方法解析域名的ip地址
# 如果是有效的域名, 则正常返回ip, 如果是无效的域名, 则发生异常
def socket_domain(dname):
# 读取字典
with open('../dict/subdomain-top160k.txt') as file:
domain_list = file.readlines()
for domain in domain_list:
try:
ip = socket.gethostbyname(f'{domain.strip()}.{dname}')
print(f'{domain.strip()}.{dname}, {ip}')
except socket.gaierror:
pass
if __name__ == '__main__':
socket_domain(dname='baidu.com')
这是一个windows窗口程序, 输入域名扫就行了, 指定域名层数, 也可以扫描端口. 同样基于字典来扫描, 没啥好说的.
这工具在kali里面就有, 根据一个dns的字典文件来做扫描, 命令:
dnsenum -f /usr/share/dnsenum/dns.txt baidu.com
用在线网站进行扫描, 输入域名扫就行了, 速度很快
网站的后台地址一般没有在网站页面的url链接中, 正常情况下是给网站管理员登录使用的, 而不是普通用户.
扫描网站后台地址可能涉及到未授权访问和侵入测试,这种行为在没有明确授权的情况下是非法的。如果没有网站所有者的明确许可,探查、扫描或尝试访问网站的后台地址是不允许的,并可能违反法律。在执行任何安全测试或扫描之前,务必确保你有适当的授权和许可。
这是一个windows窗口程序, 输入域名扫就行了, 没啥好说的.