网络安全之web信息打点

06-01 1544阅读

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:

      网络安全之web信息打点

      nmap扫描:

      网络安全之web信息打点

      超级ping:

      网络安全之web信息打点

      3.子域名查询扫描

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

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

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

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

      子域名收集方法论

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

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

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

        • 工具:dnsx, dnslookup

        • 证书透明度日志

          • 访问 crt.sh 或 censys.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— 资产绘测及实战化漏洞扫描工具

                网络安全之web信息打点网络安全之web信息打点

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

                nmap扫描

                例如;

                nmap -A www.baidu.com
                nmap -A -O -sV www.baidu.com
                nmap -A -O -sV 180.101.51.73
                goby扫描(推荐)

                网络安全之web信息打点

                网络安全之web信息打点

                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.等待脚本运行完毕输出控制台并同时保存同路径文本文档

                网络安全之web信息打点

                网络安全之web信息打点

                网络安全之web信息打点

                网络安全之web信息打点

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

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

                网络安全之web信息打点

                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配置

                网络安全之web信息打点

                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云盘

                网络安全之web信息打点

                使用教程:

                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
                

                网络安全之web信息打点

                9.总结

                目前我们可以使用的手段

                1.whois查询

                2.ip地址基础信息

                3.子域名扫描

                4.备案查询

                5.被动信息搜集

                6.主动信息搜集

                7.ip端口服务查询

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

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

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

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码