凌晨三点,小王还在办公室加班。屏幕上密密麻麻地显示着几十个子域名,他正一个个手动输入到浏览器中检查。作为一名安全测试工程师,他深知信息收集的重要性,但面对动辄上百个子域名的大型目标,纯手工作业让他苦不堪言。
"要是能把这些重复性工作自动化就好了..."小王揉了揉酸涩的双眼,心想。
确实,在Web安全测试中,信息收集往往占据了30%-50%的工作量。传统的手动方式存在以下痛点:
重复性操作多,效率低下 容易遗漏重要信息 难以标准化和规模化 无法及时发现资产变化
那么,如何才能高效地完成信息收集工作呢?
V浪将为您详细介绍一套基于Python和Bash的自动化解决方案。通过这套工具,您可以:
在1小时内完成传统需要1-2天的信息收集工作 自动化发现99%以上的目标资产 标准化输出便于后续分析 支持持续监控,及时发现新增资产
让我们开始动手,把繁琐的信息收集工作交给自动化工具来完成吧。
方案原理
多源数据整合
通过多个工具(Sublist3r、Amass、Subfinder等)并行收集子域名 结合被动和主动扫描方式 对收集结果进行去重和验证
第一层:基础信息收集(子域名、端口) 第二层:服务识别(HTTP探测、截图) 第三层:深度扫描(目录扫描、漏洞探测) 第四层:特定资源分析(JavaScript文件、API端点)
每个功能独立封装成单独的脚本 通过主控脚本统一调度 支持按需调用特定模块
建立信息收集结果的关联 自动提取潜在的敏感信息 生成结构化的输出报告
准备工作
在开始之前,我们需要准备以下环境和工具:
操作系统:建议使用基于Linux的系统,如Kali Linux或Parrot OS 必备工具:
子域名收集:Sublist3r、assetfinder、amass、subfinder 端口扫描:nmap HTTP服务探测:httprobe 网页截图:gowitness或aquatone 目录扫描:dirsearch、ffuf 漏洞扫描:nikto、nuclei JavaScript分析:getJS 历史资产:waybackurls、gau 子域名接管检测:subjack
工具安装
# 安装基础工具
apt update
apt install -y nmap python3-pip
pip3 install sublist3r
# 安装Go语言工具
go install github.com/tomnomnom/assetfinder@latest
go install github.com/OWASP/Amass/v3/...@latest
go install github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
go install github.com/tomnomnom/httprobe@latest
go install github.com/sensepost/gowitness@latest
自动化脚本详解
1. 子域名收集脚本
#!/bin/bash
# subdomain_enum.sh - 子域名枚举脚本
domain=$1
if [ -z "$domain" ]; then
echo "Usage: ./subdomain_enum.sh <domain>"
exit 1
fi
echo "[*] 开始收集 $domain 的子域名..."
# 创建输出目录
mkdir -p recon/$domain
cd recon/$domain || exit
# 使用Sublist3r
echo "[*] 运行 Sublist3r..."
sublist3r -d $domain -o sublist3r.txt
# 使用Assetfinder
echo "[*] 运行 Assetfinder..."
assetfinder --subs-only $domain > assetfinder.txt
# 使用Amass
echo "[*] 运行 Amass..."
amass enum -passive -d $domain -o amass.txt
# 使用Subfinder
echo "[*] 运行 Subfinder..."
subfinder -d $domain -o subfinder.txt
# 合并结果并去重
cat *.txt | sort -u > all_subdomains.txt
echo "[*] 发现 $(wc -l all_subdomains.txt | awk '{print $1}') 个唯一子域名。"
2. 端口扫描脚本
#!/bin/bash
# port_scan.sh - 端口扫描脚本
domain=$1
if [ -z "$domain" ]; then
echo "Usage: ./port_scan.sh <domain>"
exit 1
fi
echo "[*] 开始对 $domain 进行端口扫描..."
cd recon/$domain || exit
# 扫描常见Web端口
nmap -iL all_subdomains.txt -p 80,443,8080,8443 -T4 -oA nmap_scan
echo "[*] 端口扫描完成。"
3. HTTP服务探测和截图脚本
#!/bin/bash
# http_probe.sh - HTTP服务探测和截图脚本
domain=$1
if [ -z "$domain" ]; then
echo "Usage: ./http_probe.sh <domain>"
exit 1
fi
echo "[*] 探测存活的HTTP服务..."
cd recon/$domain || exit
# 探测HTTP服务
cat all_subdomains.txt | httprobe > live_subdomains.txt
echo "[*] 发现 $(wc -l live_subdomains.txt | awk '{print $1}') 个存活的子域名。"
# 网页截图
echo "[*] 使用gowitness进行截图..."
gowitness file -s live_subdomains.txt -d screenshots
echo "[*] 截图已保存到 recon/$domain/screenshots"
4. 目录扫描脚本
#!/bin/bash
# dir_bruteforce.sh - 目录扫描脚本
domain=$1
wordlist="/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt"
if [ -z "$domain" ]; then
echo "Usage: ./dir_bruteforce.sh <domain>"
exit 1
fi
if [ ! -f "$wordlist" ]; then
echo "找不到字典文件:$wordlist"
exit 1
fi
echo "[*] 开始对 $domain 进行目录扫描..."
cd recon/$domain || exit
mkdir -p dirsearch_results
while read -r url; do
echo "[*] 扫描 $url"
dirsearch -u "$url" -w "$wordlist" -e php,html,js,txt -t 50
--plain-text-report="dirsearch_results/$(echo $url | sed 's/[:/]/_/g').txt"
done < live_subdomains.txt
echo "[*] 目录扫描完成。"
5. 漏洞扫描脚本
#!/bin/bash
# vuln_scan.sh - 漏洞扫描脚本
domain=$1
nuclei_templates="/path/to/nuclei-templates/"
if [ -z "$domain" ]; then
echo "Usage: ./vuln_scan.sh <domain>"
exit 1
fi
echo "[*] 开始对 $domain 进行漏洞扫描..."
cd recon/$domain || exit
# 使用nuclei进行漏洞扫描
nuclei -l live_subdomains.txt -t "$nuclei_templates" -o nuclei_results.txt
echo "[*] 漏洞扫描完成。"
6. JavaScript文件收集和分析脚本
#!/bin/bash
# js_collection.sh - JavaScript文件收集脚本
domain=$1
if [ -z "$domain" ]; then
echo "Usage: ./js_collection.sh <domain>"
exit 1
fi
echo "[*] 收集 $domain 的JavaScript文件..."
cd recon/$domain || exit
mkdir -p javascript_files
# 收集JS文件
while read -r url; do
getJS --url "$url" >> javascript_files/js_files.txt
done < live_subdomains.txt
echo "[*] 下载JavaScript文件..."
cd javascript_files || exit
wget -q -i js_files.txt
echo "[*] JavaScript文件收集完成。"
JavaScript分析脚本:
#!/usr/bin/env python3
# js_analyzer.py - JavaScript文件分析脚本
import re
import glob
def find_secrets(file_content):
patterns = {
'API Key': r'(?i)(api_key|apiKey|apikey)["']?s*[:=]s*["']?([a-zA-Z0-9-]{20,})["']?',
'AWS Access Key': r'AKIA[0-9A-Z]{16}',
'Password': r'(?i)(password|passwd|pwd)["']?s*[:=]s*["']?([^"'s]+)["']?'
}
secrets = {}
for name, pattern in patterns.items():
matches = re.findall(pattern, file_content)
if matches:
secrets[name] = matches
return secrets
def main():
js_files = glob.glob('*.js')
for js_file in js_files:
with open(js_file, 'r', encoding='utf-8', errors='ignore') as f:
content = f.read()
secrets = find_secrets(content)
if secrets:
print(f'[*] 在 {js_file} 中发现潜在敏感信息:')
for key, values in secrets.items():
for value in values:
print(f' {key}: {value}')
if __name__ == '__main__':
main()
7. API和端点发现脚本
#!/bin/bash
# endpoint_discovery.sh - API和端点发现脚本
domain=$1
if [ -z "$domain" ]; then
echo "Usage: ./endpoint_discovery.sh <domain>"
exit 1
fi
echo "[*] 收集 $domain 的端点信息..."
cd recon/$domain || exit
# 使用waybackurls和gau收集URL
cat all_subdomains.txt | waybackurls > waybackurls.txt
cat all_subdomains.txt | gau >> waybackurls.txt
sort -u waybackurls.txt -o waybackurls.txt
# 提取带参数的URL
echo "[*] 提取参数..."
cat waybackurls.txt | grep "=" | qsreplace -a > params.txt
echo "[*] 端点和参数已保存。"
8. 子域名接管检测脚本
#!/bin/bash
# subdomain_takeover.sh - 子域名接管检测脚本
domain=$1
fingerprints="/path/to/fingerprints.json"
if [ -z "$domain" ]; then
echo "Usage: ./subdomain_takeover.sh <domain>"
exit 1
fi
echo "[*] 检查 $domain 的子域名接管风险..."
cd recon/$domain || exit
# 使用subjack检测
subjack -w all_subdomains.txt -t 100 -timeout 30 -ssl
-c "$fingerprints" -v -o subjack_results.txt
echo "[*] 子域名接管检测完成。"
主自动化脚本
#!/bin/bash
# subdomain_enum.sh - 子域名枚举脚本
domain=$1
if [ -z "$domain" ]; then
echo "Usage: ./subdomain_enum.sh <domain>"
exit 1
fi
echo "[*] 开始收集 $domain 的子域名..."
# 创建输出目录
mkdir -p recon/$domain
cd recon/$domain || exit
# 使用Sublist3r
echo "[*] 运行 Sublist3r..."
sublist3r -d $domain -o sublist3r.txt
# 使用Assetfinder
echo "[*] 运行 Assetfinder..."
assetfinder --subs-only $domain > assetfinder.txt
# 使用Amass
echo "[*] 运行 Amass..."
amass enum -passive -d $domain -o amass.txt
# 使用Subfinder
echo "[*] 运行 Subfinder..."
subfinder -d $domain -o subfinder.txt
# 合并结果并去重
cat *.txt | sort -u > all_subdomains.txt
echo "[*] 发现 $(wc -l all_subdomains.txt | awk '{print $1}') 个唯一子域名。"
0
使用方法
将所有脚本放在同一目录下 给所有脚本添加执行权限:
#!/bin/bash
# subdomain_enum.sh - 子域名枚举脚本
domain=$1
if [ -z "$domain" ]; then
echo "Usage: ./subdomain_enum.sh <domain>"
exit 1
fi
echo "[*] 开始收集 $domain 的子域名..."
# 创建输出目录
mkdir -p recon/$domain
cd recon/$domain || exit
# 使用Sublist3r
echo "[*] 运行 Sublist3r..."
sublist3r -d $domain -o sublist3r.txt
# 使用Assetfinder
echo "[*] 运行 Assetfinder..."
assetfinder --subs-only $domain > assetfinder.txt
# 使用Amass
echo "[*] 运行 Amass..."
amass enum -passive -d $domain -o amass.txt
# 使用Subfinder
echo "[*] 运行 Subfinder..."
subfinder -d $domain -o subfinder.txt
# 合并结果并去重
cat *.txt | sort -u > all_subdomains.txt
echo "[*] 发现 $(wc -l all_subdomains.txt | awk '{print $1}') 个唯一子域名。"
1
运行主脚本:
#!/bin/bash
# subdomain_enum.sh - 子域名枚举脚本
domain=$1
if [ -z "$domain" ]; then
echo "Usage: ./subdomain_enum.sh <domain>"
exit 1
fi
echo "[*] 开始收集 $domain 的子域名..."
# 创建输出目录
mkdir -p recon/$domain
cd recon/$domain || exit
# 使用Sublist3r
echo "[*] 运行 Sublist3r..."
sublist3r -d $domain -o sublist3r.txt
# 使用Assetfinder
echo "[*] 运行 Assetfinder..."
assetfinder --subs-only $domain > assetfinder.txt
# 使用Amass
echo "[*] 运行 Amass..."
amass enum -passive -d $domain -o amass.txt
# 使用Subfinder
echo "[*] 运行 Subfinder..."
subfinder -d $domain -o subfinder.txt
# 合并结果并去重
cat *.txt | sort -u > all_subdomains.txt
echo "[*] 发现 $(wc -l all_subdomains.txt | awk '{print $1}') 个唯一子域名。"
2
注意事项
在使用前请确保已安装所有必要的工具 根据目标网站的规模调整扫描参数 注意扫描速率,避免对目标造成影响 确保在授权范围内使用工具 定期更新工具和脚本以获得更好的效果
输出结果
脚本执行完成后,将在recon目录下生成以下结构:
#!/bin/bash
# subdomain_enum.sh - 子域名枚举脚本
domain=$1
if [ -z "$domain" ]; then
echo "Usage: ./subdomain_enum.sh <domain>"
exit 1
fi
echo "[*] 开始收集 $domain 的子域名..."
# 创建输出目录
mkdir -p recon/$domain
cd recon/$domain || exit
# 使用Sublist3r
echo "[*] 运行 Sublist3r..."
sublist3r -d $domain -o sublist3r.txt
# 使用Assetfinder
echo "[*] 运行 Assetfinder..."
assetfinder --subs-only $domain > assetfinder.txt
# 使用Amass
echo "[*] 运行 Amass..."
amass enum -passive -d $domain -o amass.txt
# 使用Subfinder
echo "[*] 运行 Subfinder..."
subfinder -d $domain -o subfinder.txt
# 合并结果并去重
cat *.txt | sort -u > all_subdomains.txt
echo "[*] 发现 $(wc -l all_subdomains.txt | awk '{print $1}') 个唯一子域名。"
3
通过这套自动化工具,我们可以快速、高效地完成以下工作:
全面的子域名收集 端口扫描 HTTP服务探测 目录扫描 漏洞扫描 JavaScript文件分析 API端点发现 子域名接管检测
这些信息为后续的渗透测试提供了良好的基础。建议根据实际需求对脚本进行调整和优化,以适应不同的测试场景。
结语
自动化信息收集不仅能提高工作效率,还能保证信息收集的完整性和准确性。通过这套脚本,我们可以快速对目标进行全面的信息收集,为后续的渗透测试工作打下坚实的基础。希望这篇文章能对大家的安全测试工作有所帮助。
我是V浪,我们明天再见!
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...