网络安全之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.子域名查询扫描
子域名收集的核心价值
-
扩大攻击面:发现未授权或被遗忘的子域名
-
权限提升:通过子域名渗透到主站
-
信息泄露:暴露测试环境、API 接口等敏感资产
-
安全评估:完善企业资产清单
子域名收集方法论
被动收集(不直接访问目标)
-
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— 资产绘测及实战化漏洞扫描工具
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的搜集由于作者实在肝不下去了,想了解的铁子们可以期待下篇的帖子,如有不懂的可私信留言
-
-
-
-
-