原理
本方案的核心原理是利用资产采集工具批量获取目标域名或 IP,通过爬虫工具(Rad)将流量转发至 Burp Suite,再经由 Burp 的被动扫描插件将数据包透传给 Xray 进行漏洞检测。通过 Python 脚本实现资产清洗与批量执行,达到自动化批量扫描的目的。
本文介绍了一种基于 Fofa、Rad、Burp 和 Xray 的自动化漏洞扫描流程。首先利用 Fofa 采集目标资产,通过 Python 脚本清洗 URL 格式;其次配置 Burp Suite 作为代理,设置被动扫描插件及流量转发端口;最后结合 Xray 被动扫描器,使用 Python 脚本批量调用 Rad 爬虫进行自动化探测。该方案实现了从资产发现到漏洞检测的全链路自动化,适用于安全测试场景下的效率提升。

本方案的核心原理是利用资产采集工具批量获取目标域名或 IP,通过爬虫工具(Rad)将流量转发至 Burp Suite,再经由 Burp 的被动扫描插件将数据包透传给 Xray 进行漏洞检测。通过 Python 脚本实现资产清洗与批量执行,达到自动化批量扫描的目的。
使用 Fofa 采集目标资产。以教育类域名(edu)为例,可根据实际需求调整查询语句。采集结果通常为 IP 列表。
Rad 爬虫需要标准的 URL 格式(http:// 或 https://)。原始采集数据往往缺少协议头,需进行批量处理。
以下脚本用于读取包含 IP 的文件,并为每一行添加 http:// 前缀:
import os
def add_protocol(input_file, output_file):
with open(input_file, 'r', encoding='utf-8') as f_in:
lines = f_in.readlines()
processed_lines = []
for line in lines:
ip = line.strip()
if ip and not ip.startswith('http'):
# 默认添加 http,实际可根据情况判断是否加 https
processed_lines.append(f'http://{ip}\n')
else:
processed_lines.append(line)
with open(output_file, 'w', encoding='utf-8') as f_out:
f_out.writelines(processed_lines)
if __name__ == '__main__':
add_protocol('assets.txt', 'assets_cleaned.txt')
运行脚本后,生成的 assets_cleaned.txt 文件可直接放入 Rad 工作目录供后续调用。
为了配合 Rad 和 Xray 的联动,需要对 Burp Suite 进行如下配置:
8080(与 Rad 响应端口一致)。7777 端口,用于接收 Burp 转发的数据包给 Xray。0.0.0.0,端口 7777。修改 Xray 的配置文件 config.yaml,启用被动扫描模式并指定监听端口。
# config.yaml 片段
mode: passive
listen: 7777
# 注意:部分版本默认不扫描 edu 域名,需根据规则调整
rules:
- name: scan_edu
matchers:
- type: regex
expression: \.edu$
启动 Xray 服务:
xray server -c config.yaml
由于命令行无法直接循环输入大量 URL,需编写 Python 脚本批量调用 Rad 命令。
import subprocess
import time
def run_rad_scan(url_list_file, thread_num=5):
with open(url_list_file, 'r', encoding='utf-8') as f:
urls = [line.strip() for line in f if line.strip()]
print(f"Total URLs: {len(urls)}, Threads: {thread_num}")
for url in urls:
try:
# 假设 rad 命令结构,实际路径请根据安装位置调整
cmd = f"rad -u {url} --proxy http://127.0.0.1:8080"
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
if result.returncode != 0:
print(f"Error scanning {url}: {result.stderr}")
else:
print(f"Scanned {url}")
# 控制频率,避免被封禁
time.sleep(1)
except Exception as e:
print(f"Exception occurred: {e}")
if __name__ == '__main__':
# 第 28 行对应资产文件名,第 30 行对应线程数
run_rad_scan('assets_cleaned.txt', thread_num=5)
脚本运行后,Rad 会依次访问每个 URL,流量经过 Burp 代理,最终由 Xray 进行被动分析。扫描结果可在 Xray 的控制台或日志文件中查看。
config.yaml 中的匹配规则。
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online