网络安全之web信息打点

web信息搜集

1.whois查询

whois是什么:WHOIS 是一种用于查询 域名 和 IP地址 注册信息的标准化协议。

whois可以查询什么?

1. 域名信息查询

  • 域名所有者:注册人姓名、机构名称。

  • 注册商:域名是通过哪个注册商(如 GoDaddy、阿里云)购买的。

  • 注册日期:域名首次注册的时间。

  • 到期日期:域名何时会过期(需续费)。

  • 更新时间:最后一次信息更新的时间。

  • 域名服务器(DNS):域名指向的DNS服务器地址。

  • 状态:域名是否被锁定、是否可转让等。

示例: 查询 example.com 的 WHOIS 信息,可以看到该域名由哪个公司持有、何时到期等。

最简单的python查询whois代码:

import whois


def whoisCheck(info):
    if info == "":
        return print("你输入的是空的啊?")
    try:
        whoisResultInfo = whois.whois(info)
        print(whoisResultInfo)
        print(whoisResultInfo.get('name'))
        print(whoisResultInfo.get('emails'))
        print(whoisResultInfo.get('registrar'))
    except KeyError as ke:
        print(f"WHOIS信息缺少对应键: {ke}")
    except Exception as e:
        print(f"查询出现问题: {e}")


if __name__ == '__main__':
    info = input("请您输入目标地址:")
    whoisCheck(info)

2. IP地址信息查询

  • IP归属:IP地址的分配机构(如ISP、云服务商)。

  • 地理位置:IP地址的大致地理位置(通常到国家或城市)。

  • 自治系统号(ASN):管理该IP的自治系统编号。

  • IP段范围:该IP所属的地址段。

示例: 查询 8.8.8.8 的 WHOIS 信息,会发现它属于 Google 的公共DNS服务。

常用手段:ping,nmap, 超级ping,whois,等等等等。。。

ping:

nmap扫描:

超级ping:

3.子域名查询扫描

子域名收集的核心价值
  1. 扩大攻击面:发现未授权或被遗忘的子域名

  2. 权限提升:通过子域名渗透到主站

  3. 信息泄露:暴露测试环境、API 接口等敏感资产

  4. 安全评估:完善企业资产清单

子域名收集方法论

被动收集(不直接访问目标)
  • DNS 信息挖掘

    • whois domain.com:获取注册邮箱、域名服务器

    • dig axfr @ns1.domain.com domain.com:尝试 DNS 区域传输

    • 工具dnsx, dnslookup

  • 证书透明度日志

    • 访问 crt.shcensys.io 查询证书关联的子域名

    • 工具subfinder -d domain.com -sources crtsh                        

      • site:*.domain.com(Google/Bing)
      • hostname:*.domain.com(Shodan)

      • (domain.com OR *.domain.com)(Censys)

  • 第三方平台

    • 威胁情报:微步在线、威胁猎人

    • 云平台:AWS/Azure 云存储子域名泄露

    • 代码托管:GitHub/GitLab 搜索 *.domain.com

主动收集(直接探测)

暴力枚举

示例:

字典优化:使用/usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt等字典

工具subfinder, amass, assetfinder

DNS 解析验证

massdns -r /usr/share/massdns/lists/resolvers.txt -t A subdomains.txt -o S -w resolved.txt

dnsx -l subdomains.txt -a -o valid_subdomains.txt(同时解析 IP 和存活检测)

服务发现

端口扫描:

nmap -iL live_subdomains.txt -p 80,443 --min-parallelism 100

结合httpx验证 HTTP 存活:

subfinder -d domain.com | httpx -o live_subdomains.txt
 特殊场景处理

 泛解析绕过

生成随机字符串(如xxx.domain.com)验证是否存在泛解析

使用工具knockpy自动处理泛解析问题

CDN 隐藏

通过dnsx -d domain.com -resp-only获取真实 IP

使用findomain -t domain.com结合多个 DNS 服务器解析

常用的子域名查询工具:python脚本,subfinder, amass, assetfinder

4.备案查询

大多数通过网站查询

官方备案查询平台:

https://beian.miit.gov.cn/

站长工具:

https://www.aizhan.com/
https://tool.chinaz.com/

企查查:

https://www.qcc.com/

全国互联网安全管理服务平台(备案号查询):

https://beian.mps.gov.cn/
#多数合规网站会在底部标注备案号(如 “京 ICP 备 12345678 号”)

5.IP端口服务查询

这个ip端口获取方式很多

nmap扫描
nmap 192.168.110.1
​
nmap -p 1~65535
​
nmap -p 80,443
goby扫描

goby官网:Goby— 资产绘测及实战化漏洞扫描工具

6.三方工具检索资产指纹

nmap扫描

例如;

nmap -A www.baidu.com

nmap -A -O -sV www.baidu.com

nmap -A -O -sV 180.101.51.73
goby扫描(推荐)

7.python脚本探测子域名

需要环境:python3.10+

链接放末尾

代码:(如果报错需要手动添加第三方模块哦)

import requests
import dns.resolver
import whois
from concurrent.futures import (ThreadPoolExecutor)


def check_subdomain_http(sub, domain, subdomains):
    url = f"https://{sub}.{domain}"  # 优先使用 HTTPS
    try:
        response = requests.get(url, timeout=5)
        if response.status_code == 200:
            print(f"[+] Found subdomain (HTTPS): {url}")
            subdomains.append(url)
        else:
            print(f"[-] Not found (HTTPS): {url}")  # 对于其他状态码统一输出 [-]
        return  # 直接返回,避免继续执行 HTTP 部分
    except requests.RequestException:
        url = f"http://{sub}.{domain}"
        try:
            response = requests.get(url, timeout=5)
            if response.status_code == 200:
                print(f"[+] Found subdomain (HTTP): {url}")
                subdomains.append(url)
            else:
                print(f"[-] Not found (HTTP): {url}")  # 对于其他状态码统一输出 [-]
        except requests.RequestException:
            pass


def subdomain_scan_http(domain):
    subdomains = []
    with open('子域名扫描配置字典.txt', 'r') as file:
        wordlist = [line.strip() for line in file]
    with ThreadPoolExecutor(max_workers=500) as executor:
        futures = [executor.submit(check_subdomain_http, sub, domain, subdomains) for sub in wordlist]
        for future in futures:
            future.result()
    return subdomains


def subdomain_scan_dns(domain):
    subdomains = []
    with open('子域名扫描配置字典.txt', 'r') as file:
        wordlist = [line.strip() for line in file]
    resolver = dns.resolver.Resolver()
    for sub in wordlist:
        subdomain = f"{sub}.{domain}"
        try:
            answers = resolver.resolve(subdomain, 'A')
            if answers:  # 仅当有答案时添加到子域名列表
                print(f"[+] Found subdomain (DNS): {subdomain}")
                subdomains.append(subdomain)
            else:
                print(f"[-] Not found (DNS): {subdomain}")
        except dns.resolver.NXDOMAIN:
            print(f"[-] Not found (DNS): {subdomain}")
        except dns.resolver.NoAnswer:
            print(f"[-] No answer for: {subdomain}")
        except dns.resolver.Timeout:
            print(f"[-] Timeout occurred while checking: {subdomain}")
        except dns.exception.DNSException as e:
            print(f"[-] DNS error occurred: {str(e)}")
    return subdomains


def subdomain_scan_whois(domain):
    subdomains = []
    try:
        w = whois.whois(domain)
        for name_server in w.name_servers:
            subdomain = name_server.split('.')[0]
            if subdomain!= domain.split('.')[0]:
                print(f"[+] Found subdomain (WHOIS): {subdomain}.{domain}")
                subdomains.append(f"{subdomain}.{domain}")
        else:
            print(f"[-] Not found (WHOIS): {subdomain}.{domain}")  # 对于未找到的情况输出 [-]
    except Exception as e:
        print(f"[-] Error occurred while checking WHOIS: {e}")
    return subdomains


def subdomain_scan_api(domain):
    subdomains = []
    # 使用 crt.sh API 进行子域名查找
    url = f"https://crt.sh/?q=%.{domain}&output=json"
    try:
        response = requests.get(url)
        if response.status_code == 200:
            data = response.json()
            for entry in data:
                subdomain = entry.get('name_value')
                if subdomain.endswith(f'.{domain}'):
                    print(f"[+] Found subdomain (API): {subdomain}")
                    subdomains.append(subdomain)
                else:
                    print(f"[-] Not found (API): {subdomain}")  # 对于不满足条件的情况输出 [-]
        else:
            print(f"[-] Failed to fetch data from API: {url}")
    except Exception as e:
        print(f"[-] Error occurred while using API: {e}")
    return subdomains


def save_valid_subdomains(subdomains):
    valid_subdomains = []
    for subdomain in subdomains:
        try:
            response = requests.get(subdomain, timeout=5)
            if response.status_code == 200:
                valid_subdomains.append(subdomain)
        except requests.RequestException:
            pass
    with open('子域名扫描结果.txt', 'w') as file:
        for subdomain in valid_subdomains:
            file.write(subdomain + '\n')


def main():
    domain = input("请输入要扫描的域名: ")
    if not domain.startswith("http://") and not domain.startswith("https://"):
        domain = "http://" + domain
    domain = domain.split('/')[2]  # 提取域名部分,去除协议和路径

    # 仅使用 subdomain_scan_http 进行爆破
    subdomains_http = subdomain_scan_http(domain)
    all_subdomains = subdomains_http

    print("\nAll found subdomains:")
    for subdomain in all_subdomains:
        print(subdomain)

    # 增加更多日志输出,便于调试
    print(f"Total subdomains found: {len(all_subdomains)}")  

    with ThreadPoolExecutor(max_workers=1000) as executor:
        executor.submit(save_valid_subdomains, all_subdomains)


if __name__ == "__main__":
    main()

使用教程:

1.将子域名配置字典保存文档为 子域名配置字典.txt(链接已打包6w+字典长度)

2.运行时去除前缀,例如查询www.baidu.com只输入baidu.com

3.等待脚本运行完毕输出控制台并同时保存同路径文本文档

打包链接:python子域名扫描官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘

备用链接:python子域名扫描官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘

8.其他子域名扫描核心工具详解

1. Subfinder

项目地址:GitHub - projectdiscovery/subfinder: Fast passive subdomain enumeration tool.

功能:快速枚举子域名(支持 API 和被动源)

安装:

GO111MODULE=on go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest

配置 API(提升效率):

注册Censys, SecurityTrails, RapidDNS等平台获取 API Key

执行subfinder -config ~/.config/subfinder/config.yaml配置

2. Amass

kali默认内置,详细的不过多介绍,下面链接有更详细单独的介绍

功能:综合子域名枚举(主动 + 被动)

常用命令:

amass enum -d domain.com -passive -o passive.txt  # 仅被动模式
amass enum -d domain.com -brute -w /path/to/dict.txt  # 暴力枚举

详细教程子域名收集神器:Amass 保姆级教程(附链接)-CSDN博客

3. OneForAll

项目链接:GitHub - shmilylty/OneForAll: OneForAll是一款功能强大的子域收集工具

特点:支持多线程、多模块、结果去重

使用示例:

python3 oneforall.py --target domain.com run

更多详细教程:OneForAll工具:安装指南、使用方法及常见问题解决(超全)-CSDN博客

4. httpx

用途:快速验证子域名存活并获取响应头

环境:python3.10+

脚本链接:Httpx子域名扫描官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘

备用链接:Httpx子域名扫描官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘

使用教程:

1.编辑文件夹里面的文本文档,和前面的子域名配置字典一样

2.python3 +python脚本+-d 域名 + -w 字典 +-t 线程

配置参数;

python3 subdomain_enum.py -h                                                        
usage: subdomain_enum.py [-h] -d DOMAIN -w WORDLIST [-t THREADS]

options:
-h, --help            show this help message and exit
-d DOMAIN, --domain DOMAIN
-w WORDLIST, --wordlist WORDLIST
-t THREADS, --threads THREADS 

-d指定域名  -w 指定字典  -t指定线程 


例如:

python3 subdomain_enum.py -d baidu.com -w /home/kali/Desktop/httpx/subdomains.txt -t 500

9.总结

目前我们可以使用的手段

1.whois查询

2.ip地址基础信息

3.子域名扫描

4.备案查询

5.被动信息搜集

6.主动信息搜集

7.ip端口服务查询

8.三方自动化工具检索指纹资产

9.其他自动化子域名扫描工具的使用

针对CDN的搜集由于作者实在肝不下去了,想了解的铁子们可以期待下篇的帖子,如有不懂的可私信留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长歌不高冷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值