Burp Suite与Xray联动:构建自动化被动扫描工作流 📅 2026/7/4 10:32:53 1. 项目概述与核心价值如果你是一名安全测试工程师或者渗透测试爱好者每天面对大量的Web应用还在手动重复着“抓包-改包-重放-观察”的枯燥流程那这篇文章就是为你准备的。我们今天要聊的是如何把Burp Suite和Xray这两款顶尖工具“撮合”到一起搭建一个7x24小时不间断运行的自动化被动扫描工作流。简单来说就是让Burp变成你的“眼睛”和“手”负责流量捕获和交互让Xray变成你的“大脑”和“武器库”负责深度漏洞检测。两者联动实现“流量经过即扫描”将你从重复劳动中解放出来把精力聚焦在更高级的漏洞挖掘和逻辑分析上。这个工作流的核心价值在于“自动化”和“被动”。自动化意味着你只需要完成一次性的配置后续的测试流量无论是手工测试、爬虫爬取还是自动化脚本产生的流量都能被自动送入扫描引擎进行分析。被动扫描则意味着它对业务是零侵入的不会主动发送大量攻击载荷去“轰炸”目标而是静静地分析经过它的每一个请求和响应从中寻找安全弱点。这种模式特别适合在测试环境、预发布环境甚至监控生产环境的影子流量在不影响业务的前提下持续发现潜在风险。接下来我将从设计思路到每一步的实操细节完整拆解这个工作流的搭建过程。2. 联动架构设计与核心思路拆解2.1 为什么是Burp Suite Xray在安全工具生态中Burp Suite是公认的Web安全测试“瑞士军刀”其代理拦截、重放、爬虫和Intruder模块无可替代。但它社区版和专业版的主动扫描器能力有差异且深度漏洞检测并非其唯一强项。Xray则是一款专注于漏洞检测的引擎以其强大的POC库、深入的漏洞检测逻辑和较低的误报率著称尤其擅长识别逻辑漏洞、新型组件漏洞等。将它们联动的思路本质上是“优势互补”。Burp Suite擅长流量获取和用户交互模拟比如处理复杂的登录状态、JavaScript渲染而Xray擅长基于流量进行深度漏洞分析。我们设计的架构是将Burp Suite设置为上游代理所有浏览器或自动化工具的流量先经过Burp然后在Burp中配置一个指向Xray的下游代理让Burp把捕获到的流量镜像一份发送给Xray进行分析。这样你在Burp里进行的任何手工测试、爬虫爬取其产生的请求和响应都会被Xray同步分析。2.2 工作流核心组件与数据流整个工作流涉及三个核心组件测试客户端浏览器/爬虫脚本、Burp Suite、Xray。数据流向是这样的客户端发出HTTP/HTTPS请求。请求首先到达Burp Suite代理例如127.0.0.1:8080。Burp对其进行拦截、修改、记录。Burp根据配置将这份流量或经过处理的流量转发给真正的目标服务器并接收响应。与此同时Burp会将请求和响应的副本通过其配置的上游SOCKS代理或Project-level 流量转发功能发送到Xray监听的端口例如127.0.0.1:7777。Xray接收到流量后启动其被动扫描引擎根据内置的规则库对流量进行深度分析识别潜在的漏洞。Xray将扫描结果生成报告如HTML、JSON或通过Webhook通知到指定平台如钉钉、Slack、企业微信。这里的关键在于Burp到Xray的流量传递是“被动”的。Xray不会主动发起任何请求它只分析Burp送给它的“食材”。这种设计保证了扫描的隐蔽性和对目标服务的友好性。2.3 工具选型与版本考量Burp Suite推荐使用Professional版本。社区版Community功能受限尤其缺乏“Project-level”等高级配置选项可能无法完美实现流量镜像到指定代理。专业版提供了更灵活的流量控制能力。如果暂时使用社区版可以尝试通过“User options” - “Connections” - “Upstream Proxy Servers”进行配置但稳定性和完整性可能不及专业版。Xray选择其高级版或社区版。高级版拥有更全的POC库和漏洞检测插件。务必从官方渠道下载确保规则库最新。Xray支持多种运行模式我们这里主要使用其webscan模式的--listen参数使其作为一个被动扫描服务器运行。操作系统Windows, macOS, Linux均可。本文演示以macOS/Linux命令行环境为主Windows用户只需注意路径格式的差异将./xray替换为xray.exe。注意工具的合规使用是底线。所有操作必须在你自己拥有完全控制权的资产如公司内网测试环境、自己搭建的靶场、获得明确书面授权的系统上进行。未经授权对任何系统进行测试均属违法行为。3. 环境准备与工具配置详解3.1 Burp Suite的安装与基础代理设置首先确保你的Burp Suite已安装并可以正常运行。启动Burp进行初始配置启动Burp创建一个临时项目或打开已有项目。进入Proxy-Options标签页。这里默认会有一个监听器Listener地址通常是127.0.0.1:8080。确保它是Running状态。这个端口就是你的浏览器或系统代理需要配置的地址。为了拦截HTTPS流量你需要将Burp的CA证书安装到受信任的根证书颁发机构。在浏览器中访问http://burpsuite或127.0.0.1:8080点击“CA Certificate”下载证书文件然后根据你的操作系统将其导入到“受信任的根证书颁发机构”存储中。这是后续扫描HTTPS站点的前提。3.2 Xray的部署与启动监听Xray是一个二进制文件无需安装解压即用。从官方渠道下载对应你操作系统的最新版Xray压缩包解压到一个你熟悉的目录例如~/tools/xray/。打开终端或命令提示符进入该目录。启动Xray的被动扫描监听模式。这是最关键的一步命令./xray webscan --listen 127.0.0.1:7777 --html-output xray-report.htmlwebscan指定运行Web漏洞扫描模式。--listen 127.0.0.1:7777让Xray在本地7777端口启动一个HTTP代理服务器等待接收流量。这个端口号你可以自定义只要不和系统已有端口冲突即可。--html-output xray-report.html指定扫描结果的输出文件为HTML格式。你也可以使用--json-output report.json输出JSON格式以便集成到其他系统。执行命令后终端会显示Xray的Logo和版本信息并停留在等待状态类似[INFO] [webscan:listen] webscan listening on 127.0.0.1:7777。这表明Xray已经就绪正在7777端口等待Burp Suite送来流量。3.3 配置Burp Suite将流量转发至Xray现在需要告诉Burp把捕获到的流量复制一份发给Xray。在Burp Suite Professional中最推荐的方式是使用“Project-level”的流量转发规则。在Burp顶部菜单栏进入Project-Project options。在左侧找到“Miscellaneous”选项。在右侧面板中找到“Out-of-Scope Requests”部分但我们需要的是其下方的“Live passive crawl from proxy”和“Live audit from proxy”的配置区域。不过更直接的方法是配置上游SOCKS代理。更通用的方法是配置上游SOCKS代理这适用于社区版和专业版。进入User options-Connections-Upstream Proxy Servers。点击“Add”添加一条规则。Destination host这里可以配置规则生效的目标。如果你想将所有流量都镜像给Xray可以留空或填*。更常见的做法是只扫描特定目标例如填写*.test.com这样只有对test.com及其子域的请求才会被转发。Proxy host填写127.0.0.1。Proxy port填写Xray监听的端口我们之前设置的是7777。Proxy type选择SOCKS。这里是个关键点Xray的--listen模式本质上是一个HTTP代理服务但Burp的“Upstream Proxy”对HTTP代理的支持在某些场景下可能有问题。而Xray同样兼容SOCKS5协议。将类型选为SOCKS兼容性更好。勾选“Override User Options”以确保此规则生效。配置完成后Burp Suite对目标主机如*.test.com的所有请求除了正常发往目标服务器外还会通过SOCKS5协议发送一份到127.0.0.1:7777即Xray。3.4 浏览器代理配置与测试最后一步配置你的浏览器使其流量经过Burp。安装浏览器代理切换插件如SwitchyOmega(Chrome/Firefox)。配置一个情景模式代理协议为HTTP代理服务器为127.0.0.1端口为8080即Burp的监听端口。开启该情景模式。此时在浏览器中访问任何一个HTTP网站如http://testphp.vulnweb.com你应该能在Burp的Proxy-Intercept和HTTP history中看到请求记录。同时观察运行Xray的终端窗口。如果配置正确你会看到Xray开始输出日志例如[INFO] [http_client] received request: GET / HTTP/1.1这证明流量已经成功从Burp送达Xray。至此基础联动环境已经搭建完成。你的浏览器流量路径为浏览器 - Burp (8080) - 目标服务器 Xray (7777)。4. 核心联动配置与高级技巧4.1 精准控制扫描范围作用域Scope配置无差别的全流量扫描会产生大量噪音浪费资源。我们必须精确控制哪些流量需要送给Xray分析。Burp Suite的作用域Scope功能是实现这一点的利器。在Burp中定义作用域在Target-Scope标签页你可以通过两种方式添加目标Add from site map从已有的站点地图中勾选。Add manually手动输入支持通配符。例如https://*.example.com表示扫描所有example.com的子域^https?://www\.example\.com(/.*)?使用正则表达式匹配更灵活。添加后确保“Include in scope”被选中。将作用域与上游代理规则绑定回到User options-Connections-Upstream Proxy Servers的规则编辑界面。在“Destination host”中你可以直接引用在Scope中定义的目标。更精细的做法是在这里也填写与Scope匹配的规则例如*.example.com。关键技巧你可以创建多条上游代理规则。例如规则1: Destination host*.vuln-target.com, Proxy127.0.0.1:7777(转发给Xray)规则2: Destination host*.google.com, Proxy空或直连(不转发避免扫描无关流量)这样只有针对vuln-target.com的流量才会被镜像到Xray其他流量正常通过极大提升了扫描效率。4.2 处理登录与会话Session问题很多漏洞如越权、信息泄露的检测依赖于已登录的用户会话。如何让Xray也能使用有效的会话进行测试在Burp中管理会话首先你需要用浏览器通过Burp代理完成一次完整的手工登录流程。在Burp的Proxy-HTTP history中找到登录请求通常是POST请求右键点击选择“Send to Repeater”。在Repeater中重放该请求确认能获得登录后的响应如包含Set-Cookie头或跳转。然后进入Project-Sessions-Session Handling Rules。创建一个新规则。在“Rule Actions”中添加“Run a macro”。创建一个宏Macro录制从访问登录页面到提交登录表单的完整请求序列。配置该宏在检测到会话无效时如响应包含“login”关键字自动执行。这样Burp能自动保持会话有效性。让Xray共享会话Xray作为被动扫描器它分析的是Burp送给它的“请求包”。如果Burp送给Xray的请求包中已经包含了有效的Cookie或Authorization头那么Xray在基于该请求进行漏洞检测时自然就拥有了相同的会话上下文。因此核心在于确保Burp捕获到的请求是已认证的。只要你在浏览器中保持登录状态并且Burp配置正确能处理HTTPS、不丢弃Cookie那么它转发给Xray的请求副本就会包含认证信息。无需为Xray单独配置会话。验证方法在Xray的终端日志中观察它收到的请求头是否包含Cookie: sessionidxxx之类的字段。如果有说明会话传递成功。4.3 优化扫描策略与性能调优默认配置可能不适合所有场景需要进行调优。Xray扫描策略配置Xray支持通过配置文件 (config.yaml) 来定义扫描策略。你可以创建一个配置文件指定要启用或禁用的插件、设置扫描速度、定义自定义POC等。例如创建一个my_config.yaml文件plugins: sqldet: # SQL注入检测插件 enabled: true # 可以设置更详细的参数如检测级别 xss: # XSS检测插件 enabled: true dirscan: # 目录扫描插件 enabled: false # 在被动扫描中目录扫描意义不大可以关闭启动Xray时加载配置./xray webscan --listen 127.0.0.1:7777 --config my_config.yaml --html-output report.htmlBurp流量过滤在Burp的Proxy-Options-Intercept Client Requests中可以设置规则过滤掉不需要拦截和转发的请求如图片、CSS、JS等静态资源。这能减少Burp和Xray的处理负担。同样在Target-Scope中设置好作用域是最根本的过滤。性能与资源考量内存与CPUXray扫描会消耗一定资源。对于大型站点建议在性能较好的机器上运行并监控系统资源。可以在Xray启动命令中加入--max-parallelism 5来限制并发扫描任务数防止把目标服务器或自己机器打挂。网络带宽如果测试环境网络较慢可以适当降低扫描速度或在非业务高峰时段运行。5. 自动化工作流集成与实战演示5.1 结合爬虫进行深度覆盖单纯依靠手工浏览的流量覆盖是有限的。我们可以利用Burp自带的爬虫Scanner或第三方工具如katanagospider来产生初始流量然后由Xray进行深度分析。使用Burp Scanner进行主动爬取在Burp的Target站点地图中右键点击你的目标域名选择“Actively scan this host”。Burp会启动爬虫自动探索网站链接、表单并发送探测请求。关键点来了这些由Burp Scanner主动发起的请求同样会经过Burp的代理链。如果你配置了上游代理指向Xray那么这些爬虫产生的流量也会被自动镜像给Xray进行漏洞扫描。这样你就实现了一个“主动爬取 被动扫描”的混合模式。Burp负责发现页面和入口点Xray负责对每一个发现的入口点进行漏洞检测。集成外部爬虫你也可以使用命令行爬虫并将其代理设置为Burp (127.0.0.1:8080)。例如使用katanakatana -u https://target.com -p http://127.0.0.1:8080 -o urls.txt运行此命令时katana的所有请求都会经过Burp进而被镜像到Xray。你可以将爬虫命令写成脚本定时执行实现自动化资产发现与漏洞扫描的联动。5.2 将扫描结果集成到CI/CD或通知系统自动化工作流的最后一步是结果处理。我们不可能一直盯着Xray的终端或报告文件。Xray的Webhook输出Xray支持将扫描结果通过Webhook实时推送。这需要你启动Xray时使用--webhook-output参数并提供一个接收结果的URL端点。例如你可以使用n8n,Dify或自己编写一个简单的Flask/Django服务来接收Webhook数据。Xray发送的Webhook数据是结构化的JSON包含了漏洞详情、风险等级、请求响应信息等。你的接收服务可以解析这些数据然后发送钉钉、企业微信、Slack消息或者存入数据库、生成JIRA工单。示例启动Xray并启用Webhook./xray webscan --listen 127.0.0.1:7777 --webhook-output http://your-server.com:8000/webhook --html-output report.html你需要提前在http://your-server.com:8000/webhook部署好一个能够处理POST JSON请求的服务。定时任务与自动化脚本将整个流程脚本化。一个简单的Shell脚本可能包含以下步骤#!/bin/bash # 1. 启动Xray后台进程 nohup ./xray webscan --listen 127.0.0.1:7777 --html-output /reports/scan-$(date %Y%m%d-%H%M%S).html xray.log 21 XRAY_PID$! echo “Xray started with PID: $XRAY_PID” # 2. (可选) 启动爬虫其代理指向Burp # katana -u $TARGET -p http://127.0.0.1:8080 -o /tmp/urls.txt # 3. 提示用户开始手工测试或自动测试 echo “请配置浏览器代理为127.0.0.1:8080并开始浏览目标站点或运行自动化测试。” echo “按任意键结束扫描并生成报告...” read -n 1 # 4. 停止Xray kill $XRAY_PID echo “扫描结束报告已生成。”你可以结合cron定时任务在夜间自动启动扫描第二天早上查看报告。5.3 一个完整的实战演练扫描一个测试靶场假设我们有一个本地测试靶场http://vuln-app.local。启动Xraycd ~/tools/xray ./xray webscan --listen 127.0.0.1:7777 --html-output vuln-app-scan.html配置Burp打开Burp确保代理监听器127.0.0.1:8080开启。在Target-Scope中添加http://vuln-app.local。在User options-Connections-Upstream Proxy Servers中添加规则Destination host:vuln-app.localProxy host:127.0.0.1Proxy port:7777Proxy type:SOCKS配置浏览器将浏览器代理设置为127.0.0.1:8080。安装并信任Burp的CA证书。执行测试在浏览器中访问http://vuln-app.local。随意点击链接提交表单比如登录、搜索。同时在Burp的Dashboard或Scanner中对目标发起一次“Active Scan”。观察结果观察Xray终端会看到不断有[INFO] [http_client] received request的日志。一段时间后停止测试。在Xray终端按CtrlC停止它会自动完成报告生成。用浏览器打开生成的vuln-app-scan.html文件你就能看到Xray基于你所有操作流量所发现的潜在漏洞列表每个漏洞都有详细的请求响应信息和风险等级。6. 常见问题排查与优化心得6.1 联动失败Xray收不到流量这是最常见的问题。请按以下顺序排查检查Xray是否在监听运行netstat -an | grep 7777(Linux/macOS) 或netstat -ano | findstr 7777(Windows)查看7777端口是否有进程在监听。确认Xray启动命令无误且没有报错退出。检查Burp上游代理规则规则是否启用确保规则前的复选框是勾选状态。目标主机匹配检查“Destination host”是否准确匹配了你正在访问的域名。比如你访问的是192.168.1.100但规则里写的是*.example.com则不会匹配。可以暂时设置为*进行测试。代理类型尝试在SOCKS和HTTP之间切换。大部分情况下SOCKS更可靠。检查Burp作用域Scope如果Target Scope中没有包含当前访问的URLBurp默认可能不会处理该流量取决于“Live passive crawl/audit”设置。确保目标在Scope内或者关闭Scope的过滤影响。检查浏览器代理确认浏览器流量确实走到了Burp查看Burp的HTTP history是否有记录。6.2 扫描结果漏报或误报率高漏报会话问题确保测试的流量是已认证状态。尝试在浏览器中手工验证一个需要权限的漏洞点看Xray是否能报告。流量覆盖不全被动扫描完全依赖于收到的流量。如果一个深层次的API接口或功能点你的浏览和爬虫没有触发Xray就无从扫描。需要结合主动爬虫、API文档遍历等方式补充流量。Xray插件未启用检查Xray配置文件中对应的漏洞检测插件是否被启用。误报理解漏洞原理仔细阅读Xray报告中的“漏洞详情”和“请求/响应”信息。很多误报源于应用自定义的响应机制被规则误匹配。需要人工研判。调整插件敏感度部分Xray插件可能有敏感度参数可以调整查阅官方文档。使用排除规则对于已知的误报点可以在Burp中将其标记为“Out of scope”或者研究Xray是否支持针对特定URL路径或参数名添加扫描白名单。6.3 性能瓶颈与稳定性扫描速度慢目标响应慢这会影响整个流程。考虑在非高峰时段扫描。Xray并发数使用--max-parallelism参数降低并发虽然会延长总时间但能降低对目标的压力和自己机器的负载。Burp内存设置如果扫描大型应用Burp可能内存不足。可以在启动Burp的脚本中增加JVM内存参数如-Xmx4G。Xray进程意外退出检查终端输出的错误信息。可能是遇到了无法处理的畸形数据包导致崩溃。确保使用的是最新稳定版Xray。考虑使用nohup或systemd等服务管理工具来守护进程并配置日志轮转便于排查。6.4 我的几点实操心得分阶段扫描不要一上来就对整个主站进行全量扫描。先配置好Scope针对登录后的用户中心、管理后台等关键功能区域进行重点扫描。然后再逐步扩大范围。善用Burp的“Live Passive Audit”在Burp的Dashboard或Scanner设置中有一个“Live passive audit from proxy”选项。开启后Burp自身也会对经过代理的流量进行被动审计。你可以让Burp和Xray同时进行被动扫描两者规则库不同可以互补。但要注意这会增加系统负载。报告是起点不是终点自动化扫描生成的报告一定要经过人工复核。尤其是中高危漏洞必须手工验证其真实性和可利用性。自动化工具是提高效率的帮手不能完全替代安全工程师的判断。环境隔离建议在虚拟机或独立的测试机器上运行这套工作流。避免因配置错误导致本地生产环境流量被意外扫描或泄露。搭建Burp Suite与Xray的联动工作流就像为你的安全测试流程安装了一个“自动驾驶”系统。它不能替代你“驾驶”即深入的手工测试和逻辑分析但能替你完成那些重复、枯燥的“看路”任务让你能更专注于复杂的路况和目的地。这个流程一旦跑通你可以将其固化下来应用于日常的SRC漏洞挖掘、红蓝对抗中的资产梳理、甚至内部系统的常态化安全监测中持续为你的安全能力赋能。