Xray被动扫描实战:告别低效手动挖洞,实现自动化Web漏洞挖掘
1. 项目概述:从“手动挖洞”到“被动扫描”的效率革命
如果你和我一样,长期从事Web安全测试或漏洞挖掘,一定对“手动挖洞”的繁琐和低效深有体会。每天面对海量的页面、复杂的交互逻辑,手动测试每一个输入点、分析每一个请求响应,不仅耗时耗力,还极易因为疲劳而遗漏关键漏洞。这种模式,我们戏称为“人肉扫描器”,效率天花板极低。今天要聊的,就是如何彻底告别这种低效模式,利用Xray的被动扫描功能,实现“边刷网页边找漏洞”的自动化工作流。这不仅仅是工具的切换,更是一种工作思维的升级。
Xray作为一款优秀的社区版Web漏洞扫描器,其被动扫描模式(Passive Scanning)正是为解决这一痛点而生。它的核心思路是“流量镜像与分析”:你像往常一样使用浏览器浏览网站、点击链接、提交表单,而Xray在后台默默地充当一个“中间人”,捕获你所有的HTTP/HTTPS请求。它不会主动发送任何你没有触发的请求,而是对你真实产生的流量进行深度分析、参数变异和漏洞探测。这意味着,你的每一次点击、每一次输入,都可能触发Xray的扫描引擎,自动发现SQL注入、XSS、命令执行等各类漏洞。这相当于给你的日常浏览行为附加了一个24小时在线的“漏洞雷达”。
要实现这个“雷达”功能,最关键也最容易卡住新手的一步,就是浏览器证书配置。因为现代网站普遍采用HTTPS加密通信,Xray要作为中间人解密并分析流量,就必须得到浏览器(客户端)的信任。这就需要我们安装一个由Xray自己生成的“根证书”(CA Certificate)。一旦浏览器信任了这个证书,Xray就能用它来签发针对任何网站的“假”证书,从而在不被浏览器报警的情况下,解密你和目标服务器之间的所有加密通信。这个过程听起来有点“黑客”味道,但本质上是安全测试中的标准中间人(MITM)技术,是进行深度安全评估的合法且必要手段。接下来,我会从环境准备、证书配置、实战联动到深度调优,手把手带你搭建这套高效的工作流。
2. 核心思路与工作流设计:为什么是被动扫描?
在深入实操之前,我们有必要先厘清被动扫描(Passive Scanning)与主动扫描(Active Scanning)的本质区别,这决定了我们整个工作流的设计哲学。
2.1 被动扫描 vs. 主动扫描:定位与取舍
主动扫描,比如Xray自带的爬虫模式(--basic-crawler),其工作方式是模拟一个自动化爬虫,按照预设的规则(如从种子URL开始,提取链接,递归访问)去遍历整个网站。它的优点是速度快、覆盖面广,无需人工干预。但缺点同样明显:
- 无法处理复杂状态:对于需要登录、多步验证、依赖复杂JavaScript交互(如单页应用SPA)的页面,基础爬虫往往无能为力,容易遗漏大量功能点。
- 可能触发防御机制:高频、规律的自动化请求容易被WAF(Web应用防火墙)或风控系统识别并拦截,导致扫描中断或结果不完整。
- “盲扫”带来的噪音:由于不理解业务逻辑,爬虫可能会触发一些无关的、甚至破坏性的操作(例如,误调用删除接口),产生大量误报或对测试目标造成影响。
而被动扫描,则完美规避了上述问题。它的核心是“跟随你的操作”。你作为测试人员,按照真实的业务流程去使用网站:登录账户、浏览商品、添加购物车、提交订单、上传文件……你的每一个操作都是业务逻辑上合理、且被网站预期接受的。Xray在这个过程中,只是默默地记录和分析这些“合法”的请求。
这种模式的优势是决定性的:
- 高精度、低误报:扫描的请求全部源于真实用户操作,针对的都是真实存在的、有业务价值的参数点,发现的漏洞几乎都是真实可触发的。
- 覆盖复杂场景:无论交互多复杂的SPA,还是需要特定Cookie状态的API,只要你的浏览器能访问,Xray就能分析。
- 规避风控:请求间隔、频率完全由你的手动操作决定,与真人浏览无异,极难被WAF识别为扫描行为。
- 深度关联上下文:Xray可以分析请求之间的关联(如Session、CSRF Token),进行更智能的漏洞探测。
所以,被动扫描并非要取代主动扫描,而是将其定位为“深度测试”和“业务逻辑测试”的利器。一个高效的策略是:先用主动爬虫进行广度的、快速的资产发现和浅层漏洞筛查,再结合被动扫描,对核心业务功能、关键接口进行深度、精准的漏洞挖掘。
2.2 整体工作流架构
基于以上思路,我们设计的工作流如下图所示(概念描述):
- 测试人员:使用配置了代理的浏览器(如Chrome)进行正常业务操作。
- 代理层:浏览器将所有流量(HTTP/HTTPS)发送到Xray监听的本地代理端口(如
127.0.0.1:7777)。 - Xray核心引擎:
- MITM模块:接收浏览器流量。对于HTTPS,使用已安装的CA证书进行解密。
- 流量记录与解析:将解密后的明文请求记录下来。
- 漏洞检测引擎:对请求中的参数(GET/POST/Header/Cookie等)进行Payload变异,构造攻击请求,并发送给目标服务器。
- 结果分析:分析服务器响应,判断是否存在漏洞。
- 请求转发:Xray将原始请求(以及它自己生成的攻击请求)转发给目标服务器。
- 响应返回:服务器响应先回到Xray,Xray再将其返回给浏览器。对于攻击请求的响应,Xray只进行分析,不会呈现给浏览器。
- 结果输出:发现的漏洞实时输出到命令行,并最终生成HTML或JSON格式的详细报告。
这个架构的关键在于,浏览器和目标服务器都“认为”自己在直接通信,而Xray在中间完成了所有“脏活”。接下来,我们就从零开始,搭建这个环境。
3. 环境准备与Xray基础配置
工欲善其事,必先利其器。我们先搞定Xray的获取和基础运行。
3.1 获取与运行Xray
Xray是一款跨平台工具,支持Windows、macOS和Linux。访问其官方GitHub仓库的Release页面,下载对应系统架构的最新版本。通常是一个压缩包,解压后即可得到一个独立的可执行文件(如xray_windows_amd64.exe或xray_linux_amd64)。
注意:请务必从官方或可信渠道下载,避免使用被篡改的版本,引入安全风险。
解压后,打开终端(Windows CMD/PowerShell, macOS Terminal, Linux Shell),进入到Xray所在目录。首次运行任何命令(例如./xray_darwin_amd64 version),Xray会在当前目录自动生成一个默认的配置文件config.yml。这个文件包含了所有的扫描策略、插件启用状态、MITM设置等,是我们进行精细控制的核心。
3.2 理解并修改关键配置
直接编辑config.yml文件。对于被动扫描,我们最需要关注的是mitm(中间人攻击)配置段和输出配置。
mitm: restriction: hostname_allowed: [] # 允许扫描的Hostname,为空表示允许所有 hostname_disallowed: # 禁止扫描的Hostname(黑名单) - “*.gov.cn“ - “*.edu.cn“ - “*.gov“ - “*.edu“ - “*.mil“ - “*.org.cn“重要安全警告:配置文件默认禁止扫描.gov,.edu等域名,这是出于法律和合规的严格要求。严禁在未获得明确书面授权的情况下,对任何非你所属或未授权的系统进行扫描测试!否则将构成违法行为,后果自负。我们所有的测试都应在自己搭建的靶场(如DVWA、WebGoat)或明确获得授权的范围内进行。
为了测试,我们可以将靶场地址加入hostname_allowed。例如,使用一个经典的漏洞练习平台testphp.vulnweb.com:
mitm: restriction: hostname_allowed: - “testphp.vulnweb.com“ # 仅允许扫描此域名,避免误扫其他网站 hostname_disallowed: [ ] # 可以暂时清空黑名单,但务必清楚自己在做什么为什么做域名限制?
- 法律合规:避免触及未授权目标。
- 提升效率:只关注目标流量,减少无关干扰和资源消耗。
- 结果纯净:报告里只包含目标站点的漏洞,便于分析。
接下来配置输出。在配置文件靠后的位置,找到plugins部分,可以配置各种输出器。我们可以在命令行指定,但了解配置文件更有助于后续定制。更常见的做法是在启动命令中直接指定输出,这样更灵活。
4. 核心环节:浏览器证书配置详解
这是被动扫描HTTPS网站的基石,也是新手最容易遇到问题的地方。原理前面提过:让浏览器信任Xray自己签发的CA证书。
4.1 生成CA证书
在Xray所在目录下执行证书生成命令:
- Windows:
.\xray_windows_amd64.exe genca - macOS/Linux:
./xray_darwin_amd64 genca或./xray_linux_amd64 genca
运行成功后,当前目录会生成两个文件:ca.crt(证书文件)和ca.key(私钥文件)。请妥善保管ca.key,它代表了你这个CA的根权限,一旦泄露,攻击者可以用它来签发任意网站的伪造证书进行中间人攻击。
实操心得:建议将生成的
ca.crt和ca.key备份到安全的离线位置。每次在新环境部署时,可以直接拷贝使用,无需重复生成。重复运行genca命令会因文件已存在而报错。
4.2 在操作系统中安装CA证书
要让浏览器信任,需要将ca.crt安装到系统的信任根证书存储区。不同系统步骤不同。
macOS:
- 双击
ca.crt文件,会弹出“钥匙串访问”应用。 - 在钥匙串列表中,找到“登录”或“系统”钥匙串。建议安装在“登录”钥匙串,仅影响当前用户。
- 找到刚刚导入的证书(名称通常是
xray或类似),它前面会有一个红色的 “X” 标记,表示不受信任。 - 双击该证书,展开“信任”选项。
- 将“使用此证书时”设置为“始终信任”。
- 关闭窗口,系统会要求你输入密码以确认更改。
Windows:
- 双击
ca.crt文件,点击“安装证书”。 - 选择“当前用户”或“本地计算机”(需要管理员权限),点击“下一步”。
- 选择“将所有的证书都放入下列存储”,点击“浏览”。
- 选择“受信任的根证书颁发机构”,点击“确定”然后“下一步”。
- 完成导入。
Linux (Ubuntu/Debian):
sudo cp ca.crt /usr/local/share/ca-certificates/xray.crt sudo update-ca-certificates执行后,系统会提示已添加1个证书。
Firefox浏览器特殊处理:Firefox使用自己独立的证书存储,不依赖系统证书库。因此,即使系统安装了证书,Firefox也可能不认。
- 打开Firefox,进入
选项/设置->隐私与安全-> 滚动到底部点击查看证书。 - 在“证书管理器”窗口中,选择“证书颁发机构”选项卡。
- 点击“导入”,选择你的
ca.crt文件。 - 勾选“信任此CA以标识网站”,点击“确定”。
4.3 验证证书安装是否成功
安装完成后,最简单的验证方法是:启动Xray代理,然后用浏览器访问一个HTTPS网站(如https://example.com),如果浏览器没有显示证书警告,且Xray能接收到流量,说明配置成功。
一个更直接的验证方法是:在浏览器中访问http://xray/(是的,就是一个特殊的本地域名)。如果Xray的MITM代理正在运行,这个地址会返回一个简单的页面,通常可以用于下载证书或查看状态。能成功访问此页面,也说明代理和证书工作正常。
常见问题1:证书安装后,访问某些网站仍报不安全?这可能是因为该网站使用了证书钉扎(Certificate Pinning)技术。一些重要的App或网站(如银行、支付平台)会将自己的证书公钥硬编码在客户端,拒绝信任其他CA签发的证书,从而防止中间人攻击。对于这类目标,常规的MITM代理是无效的,需要更高级的绕过手段,这超出了基础被动扫描的范围。
常见问题2:手机端如何配置?移动端App测试也是常见场景。思路类似:
- 确保手机和运行Xray的电脑在同一局域网。
- 将
ca.crt文件发送到手机并安装(Android在设置-安全-加密与凭据中安装;iOS需要在描述文件中信任)。- 在手机Wi-Fi设置中,配置代理服务器为电脑的局域网IP和Xray监听的端口(如
192.168.1.100:7777)。- 此时手机的所有网络流量都会经过电脑上的Xray。特别注意:Android 7及以上版本,对于非系统应用,默认不再信任用户安装的CA证书,需要将证书导入系统分区或对App进行特定配置,过程较为复杂。
5. 实战联动:配置浏览器代理与启动扫描
证书搞定后,接下来就是打通流量通道。
5.1 启动Xray被动扫描监听
在终端中,使用以下命令启动Xray的Web漏洞扫描,并开启被动代理监听模式:
# Windows 示例 .\xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output report.html # macOS/Linux 示例 ./xray_linux_amd64 webscan --listen 127.0.0.1:7777 --html-output report.htmlwebscan: 指定进行Web漏洞扫描。--listen 127.0.0.1:7777: 在本地回环地址的7777端口启动一个HTTP代理服务器。127.0.0.1表示只接受本机的连接,更安全。如果你想让同一网络下的其他设备(如手机)也能连接,需要改为0.0.0.0:7777,但要注意防火墙设置。--html-output report.html: 将扫描结果实时输出到report.html文件。Xray支持多种输出格式,如--json-output report.json。
启动后,终端会显示类似[INFO] [core:default] webscan listening on 127.0.0.1:7777的信息,表示代理服务已就绪。
5.2 配置浏览器代理
现在需要让浏览器的流量走到Xray的代理端口。
方法一:使用系统代理(简单但不灵活)直接在操作系统网络设置中配置HTTP代理为127.0.0.1:7777。这样所有使用系统代理设置的应用程序(包括大部分浏览器)的流量都会经过Xray。缺点是会影响所有网络请求,上其他网站也会被代理和扫描。
方法二:使用浏览器插件(推荐)这是最灵活的方式,可以为每个浏览器或每个标签页单独设置代理。以Chrome为例,推荐使用SwitchyOmega插件。
- 在Chrome网上应用店安装
SwitchyOmega。 - 点击插件图标,选择“选项”。
- 新建一个情景模式,类型选择“代理服务器”,命名为“Xray”。
- 在代理协议中填写
HTTP,代理服务器填127.0.0.1,端口填7777。 - 保存后,在插件下拉菜单中切换到刚刚创建的“Xray”模式。
现在,只有在这个浏览器窗口或标签页中访问的网站,流量才会经过Xray。你可以随时切换回“直接连接”模式进行正常上网。
5.3 开始“边刷边扫”
所有配置完成后,工作流就运转起来了:
- 保持Xray在终端运行。
- 浏览器切换到配置好的代理模式(如SwitchyOmega的Xray情景)。
- 像正常用户一样,开始访问你的目标网站(例如
http://testphp.vulnweb.com)。 - 登录、点击菜单、提交表单、上传文件……进行各种业务操作。
- 此时,观察运行Xray的终端窗口。你会发现它开始输出日志:
[INFO] [http] received a request to ...表示收到了请求。[VULN] [sqldet] ...表示发现了SQL注入漏洞。[VULN] [xss] ...表示发现了XSS漏洞。 ……
- 同时,
report.html文件会实时更新。用浏览器打开这个报告文件,可以看到漏洞的详细信息,包括漏洞类型、请求包、响应包、风险等级等,非常直观。
6. 高级技巧与深度优化配置
基础流程跑通后,我们可以通过一些高级配置,让被动扫描更强大、更智能。
6.1 作用域(Scope)精准控制
在config.yml的mitm部分,restriction用于控制扫描范围。除了之前提到的hostname_allowed(白名单)和hostname_disallowed(黑名单),还有更精细的配置:
mitm: restriction: hostname_allowed: - “*.example.com“ # 支持通配符,匹配所有子域名 - “192.168.1.100“ # 支持IP地址 - “10.0.0.0/24“ # 支持CIDR格式的网段 # 还可以通过路径过滤 path_allowed: - “/api/*“ # 只扫描/api/下的路径 path_disallowed: - “*.js“ # 不扫描JS文件 - “*.css“ # 不扫描CSS文件 - “*.png“ # 不扫描图片精准的作用域设置能极大提升扫描效率和结果的针对性,避免在静态资源、第三方库上浪费时间和产生噪音。
6.2 利用爬虫与被动扫描结合
Xray的爬虫模式可以快速发现网站链接,我们可以将其作为被动扫描的“先锋”。先使用爬虫对目标进行快速遍历,收集URL,然后将这些URL导入到一个工具中,模拟访问以产生流量供被动扫描分析。
一种简单的结合方式是:
- 用Xray爬虫生成一个URL列表:
(注意:爬虫输出的是漏洞信息,需要解析出URL。更专业的做法是使用./xray webscan --basic-crawler http://target.com --json-output urls.jsonrad这类专门的爬虫工具,它能输出更纯净的URL列表)。 - 使用脚本工具(如
curl,python requests库)或专门的爬虫播放器,读取urls.json中的URL,并发起请求。同时,浏览器配置好Xray代理,让这些请求流量都经过Xray的被动扫描引擎。
这样,你就拥有了一个“半自动化”的流程:爬虫发现链接,脚本模拟访问产生流量,Xray分析流量找漏洞。
6.3 与Burp Suite联动
Burp Suite是另一个强大的Web安全测试平台,很多人习惯用它的Repeater、Intruder等工具进行手动测试。好消息是,Xray可以和Burp完美联动。
联动原理:将Burp Suite作为上游代理,Xray作为下游代理。即:浏览器 -> Burp -> Xray -> 目标服务器。
配置步骤:
- 配置Burp:打开Burp,进入
Proxy->Options。在Proxy Listeners部分,编辑或新增一个监听器,绑定一个端口(如8080),并将Redirect to host和Redirect to port设置为你的目标服务器(这步非必须,更通用的方法是使用上游代理)。 - 配置Burp的上游代理:在Burp的
User options->Connections->Upstream Proxy Servers中,添加一条规则。可以设置为对所有域名都使用上游代理,代理地址为127.0.0.1,端口为Xray监听的端口(如7777)。 - 启动Xray:以前述方式启动Xray,监听
127.0.0.1:7777。 - 配置浏览器:浏览器代理指向Burp(
127.0.0.1:8080)。
这样,你的所有浏览器流量先到Burp,你可以用Burp进行拦截、修改、重放等操作。然后Burp将流量转发给Xray,Xray进行漏洞扫描后,再发给目标服务器。返回的响应则逆向传递。你可以在Burp中精细控制每一个请求,同时享受Xray的自动化漏洞检测能力。
6.4 插件管理与自定义POC
Xray的强大之处在于其插件化架构和丰富的漏洞检测插件(POC)。在config.yml的plugins部分,你可以启用或禁用特定插件。
plugins: sqldet: # SQL注入检测 enabled: true # 可以自定义检测级别、速度等 xss: # 跨站脚本检测 enabled: true cmd_injection: # 命令注入检测 enabled: true dirscan: # 目录扫描 enabled: false # 在被动扫描中,通常关闭主动目录扫描插件如果你有特定的漏洞检测需求,Xray支持使用Go语言或YAML格式编写自定义POC。这需要一定的安全研究和编程能力,但能极大扩展扫描器的覆盖范围,针对性地检测一些0day或业务逻辑漏洞。社区也有许多贡献者分享的POC库,可以按需引入。
7. 常见问题排查与实战心得
在实际使用中,你肯定会遇到各种问题。这里汇总了一些典型场景和解决思路。
7.1 问题排查速查表
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| 浏览器访问HTTPS网站显示证书错误 | 1. CA证书未正确安装或未受信任。 2. Xray的MITM代理未运行。 3. 浏览器缓存了旧的不安全证书。 | 1. 重新检查证书安装步骤,确保在正确的证书存储区并设置为“信任”。 2. 确认Xray已以 --listen参数启动,且端口无误。3. 清除浏览器SSL状态缓存(Chrome: chrome://net-internals/#hsts)。 |
| Xray启动后终端无任何输出,浏览器无法上网 | 1. 端口被占用。 2. 防火墙阻止。 3. 代理配置错误。 | 1. 使用netstat -ano | findstr :7777(Win) 或lsof -i:7777(macOS/Linux) 查看端口占用,更换端口或结束占用进程。2. 检查系统防火墙和杀毒软件设置,放行Xray。 3. 确认浏览器代理地址和端口与Xray监听地址完全一致。 |
| Xray有请求日志,但无漏洞发现 | 1. 目标网站确实无漏洞(可能性低)。 2. 扫描插件被禁用。 3. 目标在作用域黑名单中。 4. 流量未经过关键参数(如只浏览了静态页)。 | 1. 检查config.yml中相关插件(如sqldet,xss)是否enabled: true。2. 检查 mitm.restriction配置,确保目标域名在允许范围内。3. 尝试在网站上进行包含输入输出的操作,如搜索、登录、提交评论。 |
| 扫描报告为空或未生成 | 1. 输出文件路径权限问题。 2. 命令行输出参数错误。 3. 确实未扫描到漏洞。 | 1. 检查当前目录是否有写入权限,尝试指定绝对路径如--html-output /tmp/report.html。2. 核对命令拼写,确保是 --html-output而非-htmloutput。3. 查看终端是否有 [VULN]日志,确认是否有漏洞发现。 |
| 与Burp联动失败,流量未到达Xray | 1. Burp上游代理配置错误。 2. Burp或Xray监听地址不是 127.0.0.1。 | 1. 确认Burp的Upstream Proxy规则正确,且未启用其他过滤规则。 2. 确保Burp监听器和Xray监听器都绑定在 127.0.0.1,避免回环地址问题。 |
7.2 实战心得与避坑指南
- 从“只读”操作开始:在初步测试一个陌生网站时,优先进行浏览、查看等“只读”操作,避免触发修改、删除、下单等写操作,防止对线上业务造成意外影响。在授权测试中,也应在测试环境进行。
- 善用“暂停”与“过滤”:Xray在终端运行时,可以按
Ctrl+C停止。但在复杂测试中,你可能只想扫描某个特定功能点。此时,可以在浏览器插件中快速开关代理,或者使用Xray配置文件中的path_disallowed临时过滤掉无关流量,让扫描更聚焦。 - 关注“漏报”与“误报”:没有任何工具是完美的。Xray的被动扫描严重依赖于你的操作覆盖面。如果你没有测试到某个功能点,那里的漏洞就不会被发现(漏报)。同时,一些复杂的业务逻辑漏洞或需要多步交互的漏洞,自动化工具也可能误判(误报)。工具只是辅助,安全测试者的思维和经验才是核心。对Xray报出的每一个漏洞,都应手动验证其真实性和危害程度。
- 性能与资源考量:长时间、高强度的被动扫描会产生大量日志和报告文件,占用磁盘空间。建议定期清理旧的报告。同时,对非常复杂的单页面应用(SPA)进行大量交互时,可能会对Xray进程造成一定内存压力,观察系统资源,必要时重启Xray。
- 保持工具更新:安全工具和漏洞库更新频繁。定期关注Xray的GitHub仓库,更新到新版本,以获取最新的漏洞检测插件(POC)和性能改进。
将Xray被动扫描模式融入你的日常安全测试工作流,就像为你的浏览器装上了一双“安全之眼”。它不会替代你思考,但能把你从重复、机械的初级漏洞检测中解放出来,让你更专注于业务逻辑分析、漏洞深度利用和攻击链构建等更高价值的工作。从今天开始,尝试用这种方式去审视你经常访问的网站或授权的测试目标,你可能会惊讶于那些在你眼皮底下潜伏已久的漏洞。
