Xray漏洞扫描器实战指南:从安装配置到高级应用

📅 2026/7/7 15:20:14 👁️ 阅读次数 📝 编程学习
Xray漏洞扫描器实战指南:从安装配置到高级应用

1. 项目概述:为什么你需要一个像Xray这样的漏洞扫描器

在网络安全这个行当里混了十几年,我见过太多因为一个不起眼的小漏洞而引发的“血案”。无论是刚上线的业务系统,还是运行多年的老平台,安全测试从来都不是一个可选项,而是必选项。对于安全工程师、渗透测试人员,甚至是负责运维的开发同学来说,手里没几件趁手的自动化工具,单靠人工去“瞪眼”找漏洞,效率低不说,还容易遗漏。今天要聊的Xray,就是近年来在圈内口碑迅速崛起的一款国产Web漏洞扫描工具,由长亭科技出品。它不像一些老牌工具那样庞大复杂,而是以高性能、易用性和灵活的主动/被动双模式扫描著称,特别适合用来做日常的安全巡检、渗透测试辅助和漏洞验证。

简单来说,Xray能帮你自动化地发现Web应用中的常见安全漏洞,比如SQL注入、XSS跨站脚本、命令执行、SSRF服务器端请求伪造等等。它的核心价值在于:把专业的安全检测能力,封装成了一个命令行工具,让你用几条命令就能启动一次深度的漏洞扫描。无论是想快速评估一个对外服务的安全性,还是在测试环境里验证修复是否彻底,Xray都能派上用场。接下来,我会从一个实际使用者的角度,带你从零开始,完成Xray的安装、基础配置到核心功能上手的全过程,并分享一些我踩过坑才总结出来的实战经验。

2. 环境准备与安装部署

安装Xray本身并不复杂,但它对运行环境有一些基本要求,并且根据你的操作系统,步骤上略有差异。我们先从准备工作开始。

2.1 系统要求与依赖检查

Xray是一个用Go语言编写的高性能工具,官方提供了Windows、macOS和Linux多个平台的预编译二进制文件。这意味着你通常不需要安装额外的编译环境或复杂的依赖。

核心要求:

  • 操作系统:64位的 Windows 7/8/10/11, macOS 10.12+, 或主流的Linux发行版(如Ubuntu 16.04+, CentOS 7+等)。
  • 处理器架构:amd64 (x86_64)。目前官方未提供ARM架构(如苹果M系列芯片、树莓派)的预编译版本,在ARM设备上运行可能需要自行从源码编译,这对新手不友好,建议优先使用x86_64环境。
  • 网络:工具本身需要从GitHub下载,运行时如果需要检测漏洞,必然要对目标发起网络请求或监听流量,因此稳定的网络连接是基础。
  • 权限:在Linux/macOS系统下,可能需要执行chmod +x命令为下载的二进制文件添加可执行权限。

注意:虽然Xray是绿色软件,解压即用,但我强烈建议你不要把它放在系统关键目录(如Windows的C:\Windows\System32或Linux的/usr/bin)下。最好创建一个独立的工具目录,例如D:\SecurityTools\~/tools/,专门存放Xray这类安全工具,方便管理和更新,也避免误操作影响系统。

2.2 分平台安装步骤详解

官方唯一的下载地址是GitHub发布页面。这里以Windows和Linux为例,macOS与Linux步骤类似。

2.2.1 Windows平台安装

对于Windows用户来说,这是最直观的方式。

  1. 访问发布页面:打开浏览器,访问https://github.com/chaitin/xray/releases。你会看到一系列发布版本,通常选择最新的稳定版(Stable Release),标签名类似xray_windows_amd64.exe.zip
  2. 下载与解压:点击对应的.zip文件进行下载。下载完成后,右键点击压缩包,选择“全部解压缩...”或使用解压软件(如7-Zip、Bandizip)解压到一个你准备好的目录,比如D:\SecurityTools\xray\
  3. 验证运行:解压后,目录里应该只有一个主要的可执行文件xray_windows_amd64.exe。为了后续使用方便,我建议你将其重命名为简单的xray.exe。然后,在这个目录下打开命令提示符(CMD)或PowerShell。按住Shift键并在文件夹空白处右键,选择“在此处打开Powershell窗口”。输入命令.\xray.exe version并回车。如果安装成功,你会看到类似1.9.10这样的版本号信息输出。

2.2.2 Linux平台安装

在Linux上,我们通常通过命令行完成所有操作,效率更高。

  1. 下载与解压:打开终端,使用wgetcurl命令下载。首先,进入你打算安装的目录,例如家目录下的tools文件夹:cd ~ && mkdir -p tools && cd tools。然后执行下载命令(请将链接中的版本号替换为最新的):
    wget https://github.com/chaitin/xray/releases/download/1.9.10/xray_linux_amd64.zip
    如果系统没有wget,可以使用curl -L -o xray_linux_amd64.zip [同样的URL]
  2. 解压与授权:下载的是一个zip包,使用unzip命令解压:unzip xray_linux_amd64.zip。如果系统提示未安装unzip,请先运行sudo apt install unzip(Debian/Ubuntu) 或sudo yum install unzip(CentOS/RHEL) 进行安装。解压后,你会得到一个名为xray_linux_amd64的文件。为其添加可执行权限:chmod +x xray_linux_amd64。同样,可以重命名为xray方便使用:mv xray_linux_amd64 xray
  3. 验证与全局调用(可选):运行./xray version检查版本。为了能在任何目录下直接输入xray运行,可以将其移动到系统PATH包含的目录,例如/usr/local/bin/sudo mv xray /usr/local/bin/。之后,直接输入xray version即可验证。

2.2.3 关于杀毒软件的误报这是一个非常常见且重要的问题。由于漏洞扫描工具的行为特征(例如,发送构造的payload、尝试注入等)与某些恶意软件类似,Windows Defender 或其他第三方杀毒软件(如360、火绒)很可能将Xray的二进制文件识别为病毒或危险工具并直接删除或隔离。我亲身经历过好几次刚下载完,一眨眼文件就没了的情况。

解决方案:

  • 添加信任/排除:这是最推荐的方法。在你解压Xray的目录(如D:\SecurityTools\xray\)上,右键点击,选择杀毒软件的“信任此文件”或“添加到排除列表”选项。具体路径因杀软而异,通常在设置或防护中心里能找到“信任区”或“排除项”。
  • 临时关闭实时防护(不推荐):仅在安装和初次测试时临时关闭,完成后务必立即开启。这只是一种应急手段。
  • 从源码编译(高级):如果你有Go环境,可以克隆源码库自行编译,这样生成的二进制文件被误报的概率会低一些,但过程较复杂。

2.3 初始化与配置文件生成

安装好可执行文件只是第一步。Xray的强大功能很大程度上依赖于其配置文件config.yaml。这个文件不是必须的,因为Xray有内置的默认配置。但当你需要定制化扫描行为时,它就至关重要。

让Xray生成一个默认的配置文件非常简单。在你存放xray可执行文件的目录下,打开终端或命令行,运行任何一条需要读取配置的命令即可,例如最简单的帮助命令:

./xray webscan --help

或者直接运行一个空的扫描命令:

./xray webscan --url http://example.com

(这里example.com只是一个示例,命令会因目标无效而快速失败,但我们的目的达到了)

运行后,Xray会在当前目录下自动生成一个名为config.yaml的文件。这个文件包含了所有可配置项的默认值,结构清晰,注释详细。有了这个文件,我们后续的深度配置就有了基础。

3. 核心功能解析与配置实战

Xray的核心在于其两种扫描模式:主动扫描和被动扫描。理解它们的区别和适用场景,是高效使用这款工具的关键。

3.1 主动扫描模式:主动出击,全面体检

主动扫描是传统漏洞扫描器的典型工作方式。你给它一个目标(URL),它会像一个自动化的渗透测试员一样,主动地对目标进行爬取(发现页面和参数),然后对每一个发现点发动各种漏洞检测Payload。

3.1.1 基础命令与报告生成最常用的主动扫描命令是针对单个URL:

./xray webscan --url http://vuln-web.demo/ --html-output active_report.html
  • webscan:指定进行Web漏洞扫描。
  • --url:指定要扫描的目标地址。
  • --html-output:指定输出的HTML报告文件名。Xray的报告非常直观,会按风险等级(高危、中危、低危、信息)分类,并详细展示漏洞URL、类型、请求/响应包和修复建议。

如果你想批量扫描多个站点,可以预先将URL列表(每行一个)保存到一个文本文件,比如targets.txt,然后使用:

./xray webscan --urls-file targets.txt --html-output batch_report.html

3.1.2 深度配置:config.yaml 调优默认配置适用于一般场景,但对于复杂目标或特定需求,调整config.yaml能极大提升扫描效率和精度。打开生成的config.yaml,我们关注几个核心部分:

  • 爬虫配置 (crawler):控制Xray如何发现目标站点上的页面。

    crawler: max_depth: 5 # 从起始URL开始,最多爬取5层链接。对于大型网站,可以适当调低(如3)以避免爬取过深。 max_pages: 1000 # 最多爬取1000个页面。防止在无限链接的站点上失控。 allow_subdomains: false # 是否爬取子域名。默认false,只爬当前域名。如果需要测试整个主域,设为true。 exclude: - "*.jpg" # 排除所有jpg图片,节省资源。 - "*.css" - "/logout" # 排除注销链接,避免爬虫导致登录状态失效。 - "/admin/delete" # 排除危险的管理员操作页面,防止误操作。

    实操心得:对于需要登录后才能访问的系统(后台管理、用户中心),主动扫描的爬虫往往无能为力,因为它没有登录态的Cookie。这时,被动扫描模式或结合Burp Suite等工具导入流量才是更佳选择。

  • 扫描器配置 (scanner):控制漏洞检测引擎的行为。

    scanner: max_parallel: 30 # 并发请求数。提高此值可以加快扫描速度,但会给目标服务器带来更大压力,也可能触发WAF(Web应用防火墙)的CC攻击防护。内网测试可以调高(如50),扫描公网业务建议保持默认或调低(如10-15)。 timeout: 15 # 单个请求超时时间(秒)。对于响应慢的站点,可以适当增加。 retry: 1 # 请求失败重试次数。网络不稳定时可设为2。 follow_redirects: true # 是否跟随重定向。通常保持true,以检测重定向链上的漏洞。 headers: # 可以自定义全局请求头,例如添加一个User-Agent来模拟浏览器。 User-Agent: Mozilla/5.0 (X11; Linux x86_64) ... Chrome/120.0.0.0

    避坑指南max_parallel是双刃剑。我曾在一个客户的生产环境扫描时,因为并发开到50,直接导致其负载均衡器报警,差点被当成攻击。务必在授权测试范围内,并选择业务低峰期进行扫描。

  • 插件配置 (plugins):决定启用哪些漏洞检测模块。Xray内置了丰富的POC(漏洞概念验证)。

    plugins: enabled: sqldet, xss, cmd-injection, ssrf, dirscan, brute-force, ... # 或者使用排除法,禁用某些插件 # disabled: baseline, xstream

    默认情况下,所有可用插件都是开启的。如果你明确知道目标系统是某种特定技术栈(比如只有Java),可以禁用一些无关的插件(如针对PHP的thinkphp系列漏洞检测),以减少无效请求和扫描时间。但作为全面评估,首次扫描建议全开。

3.2 被动扫描模式:监听流量,精准打击

被动扫描是Xray的一大特色,也是我认为它最“聪明”的工作模式。它不主动发出任何请求,而是作为一个中间人代理(MITM),监听并分析流经它的HTTP/HTTPS流量,从中发现漏洞。

3.2.1 工作原理与优势想象一下,你把Xray设置成一个代理服务器。你的浏览器(或任何HTTP客户端)的所有请求都先发给Xray,Xray检查这个请求和后续的响应,看看里面有没有漏洞迹象,检查完毕后再把请求原样转发给目标网站,最后把网站的响应再传回给你的浏览器。流量路径:浏览器 -> Xray -> 目标网站 -> Xray -> 浏览器

这种模式的巨大优势在于:

  1. 无侵入,低风险:不对目标进行爬虫和盲目的漏洞轰炸,服务器压力极小,几乎不会触发WAF或风控。
  2. 场景真实:只检测你实际访问和操作过的功能点,比如需要复杂步骤才能到达的订单提交页面、需要特定Cookie的API接口。这大大减少了误报和无效扫描。
  3. 支持登录态:因为你是在浏览器里正常登录的,所以Xray能拿到带有登录会话(Cookie、Token)的请求,从而可以扫描那些需要认证的敏感功能。

3.2.2 启动与配置被动扫描启动一个基础的被动扫描监听服务非常简单:

./xray webscan --listen 127.0.0.1:7777 --html-output passive_report.html
  • --listen 127.0.0.1:7777:让Xray在本地回环地址的7777端口上启动一个代理监听服务。
  • --html-output:同样指定报告输出文件。

执行命令后,终端会显示[INFO] listening on 127.0.0.1:7777,表示代理服务已经启动成功。

3.2.3 浏览器代理设置现在,你需要配置浏览器,让它将所有流量都通过Xray这个代理发送。以Chrome浏览器为例(Firefox设置类似):

  1. 打开Chrome的设置 -> 高级 -> 系统 -> 打开计算机的代理设置(Windows)或直接搜索“代理设置”。
  2. 在手动代理设置中,填入地址127.0.0.1和端口7777
  3. 重要:确保“对于以下列开头的地址不使用代理服务器”这个列表中不包含127.0.0.1localhost。否则,你对本地服务的访问将不经过Xray。
  4. 保存设置。

配置完成后,你在浏览器里的所有访问(除了本地地址)都会经过Xray代理。此时,你可以正常登录目标系统,浏览各个页面,进行各种操作。Xray会在后台安静地分析所有请求和响应。当你测试完毕,回到终端按Ctrl+C停止Xray,它就会生成一份包含所有在流量中发现的漏洞的HTML报告。

3.2.4 进阶:与Burp Suite联动对于专业的安全测试人员,Burp Suite是标配。Xray可以与Burp完美联动,形成更强大的工作流。思路是:让流量先经过Burp(方便我们手动测试、改包、重放),再经过Xray(进行自动化漏洞检测)。

配置步骤:

  1. 启动Xray被动扫描:如上所述,./xray webscan --listen 127.0.0.1:7777
  2. 配置Burp Suite上游代理
    • 打开Burp Suite,进入User options->Connections->Upstream Proxy Servers
    • 点击Add,添加一条规则。
    • Destination host:可以留空(表示所有流量)或填写你的目标域名。
    • Proxy host127.0.0.1
    • Proxy port7777(即Xray监听的端口)
    • 勾选Support HTTP/2
  3. 配置浏览器代理指向Burp:将浏览器的代理设置为Burp Suite默认的监听端口(通常是127.0.0.1:8080)。

此时的流量路径变为:浏览器 -> Burp Suite (8080) -> Xray (7777) -> 目标网站这样,你既可以利用Burp进行手动、深入的测试,又能让Xray在后台自动化地查漏补缺,两者报告可以相互印证,效率倍增。

4. 高级功能与生态集成

掌握了主动和被动扫描,你已经能解决80%的问题。接下来看看如何通过自定义POC和联动其他工具,让Xray发挥120%的威力。

4.1 自定义POC的加载与编写

Xray内置的POC库虽然强大,但安全漏洞日新月异,特别是针对一些自研框架、特定版本组件的0day或Nday漏洞,内置POC可能无法覆盖。这时,自定义POC功能就至关重要。

4.1.1 社区版自定义POC加载方法需要注意的是,Xray社区版和高级版在POC加载方式上略有区别。社区版不支持通过--poc参数在命令行直接指定自定义POC文件。正确的方法是通过修改config.yaml配置文件来实现。

  1. 准备POC文件:首先,你需要有自己的POC文件。POC是YAML格式的,你可以从互联网上的安全社区(如先知、Seebug)获取,或者根据公开的漏洞详情自己编写。假设你有一个检测某OA系统漏洞的POC,保存为oa_system_rce.yml,放在./my_pocs/目录下。
  2. 修改配置文件:打开config.yaml,找到phantasm配置段(这是Xray的POC引擎)。修改include_poc部分:
    phantasm: # 包含的POC(支持内置POC名称+自定义文件/目录) include_poc: - "*" # 加载所有内置POC - "./my_pocs/*.yml" # 加载自定义目录下的所有yml文件 # - "./my_pocs/oa_system_rce.yml" # 也可以指定单个文件 # 排除的POC(可选) exclude_poc: []
  3. 启动扫描:修改保存后,无论是主动还是被动扫描,Xray都会自动加载内置POC和你自定义的POC。启动命令无需额外参数:./xray webscan --url http://target.com --html-output report.html

4.1.2 编写一个简单的POC了解POC结构有助于你理解和修改别人的POC。一个最简单的POC包含以下几个部分:

name: poc-example-test rules: - method: GET path: /api/test expression: | response.status == 200 && response.body.bcontains(b\"test_keyword\") detail: author: your_name links: - https://example.com/vuln
  • name: POC的唯一标识。
  • rules: 检测规则。这里定义了一个规则:发送GET请求到/api/test,如果响应状态码是200且响应体包含test_keyword这个字符串,则认为匹配成功(存在漏洞迹象)。
  • detail: 漏洞详情,如作者、参考链接。

实操心得:自定义POC的调试是个细致活。建议先用--json-output参数输出JSON格式的报告,里面会包含每个POC执行的详细请求和响应,方便你判断规则是否写对了。另外,切勿在未授权的情况下使用自定义POC扫描任何非自有资产,这不仅是法律问题,也可能因为POC编写不严谨而对目标造成意外影响。

4.2 与Rad联动:高效资产发现

Xray擅长漏洞检测,但在资产发现(爬取网站目录、链接)方面,虽然内置了爬虫,有时可能不够深入或快速。长亭科技的另一款开源工具Rad,正是一个专注于Web目录快速爬取的工具。两者联动,可以实现“Rad发现资产,Xray检测漏洞”的自动化流水线。

4.2.1 Rad的安装与使用Rad的安装与Xray类似,从GitHub发布页下载对应平台的二进制文件即可。解压后得到一个rad可执行文件。

Rad的基本使用方式是:

./rad -t http://target.com -text-output urls.txt
  • -t: 指定目标。
  • -text-output: 将爬取到的所有URL输出到文本文件。

4.2.2 与Xray被动扫描联动联动的精髓在于,让Rad爬取到的每一个URL,都自动流经Xray的被动扫描代理进行漏洞检测。

  1. 首先启动Xray被动扫描监听
    ./xray webscan --listen 127.0.0.1:7777 --html-output rad_xray_report.html
  2. 然后使用Rad,并指定Xray作为其HTTP代理
    ./rad -t http://target.com -http-proxy http://127.0.0.1:7777

此时的工作流是:Rad开始爬取target.com,它发出的每一个请求都会先发送到127.0.0.1:7777(即Xray代理)。Xray接收到请求后,一方面将其转发给目标网站以获取响应(供Rad继续分析链接),另一方面会记录这个请求和响应,并进行漏洞检测。Rad爬取结束后,Xray会生成一份包含所有在Rad爬取过程中发现的漏洞的报告。

这种组合拳非常高效,特别适合在对一个陌生目标进行初步、快速的安全评估时使用。Rad能快速摸清网站的接口和目录结构,而Xray则同步完成安全检测。

5. 实战问题排查与性能调优

工具用得好,不仅要会基本操作,更要能解决实际运行中遇到的问题,并根据环境调整到最佳状态。

5.1 常见错误与解决方案

以下是我在长期使用中总结的一些典型问题:

问题现象可能原因解决方案
运行./xray version提示“权限被拒绝”或“无法执行”文件没有可执行权限(Linux/macOS)。在终端执行chmod +x xray
启动扫描后立即退出,无任何输出1. 杀毒软件删除了文件。
2. 命令行参数格式错误。
1. 检查文件是否存在,在杀软中添加信任。
2. 仔细检查命令,例如--url后面必须跟一个完整的URL。
被动扫描启动成功,但浏览器无法上网浏览器代理设置错误,可能将本地地址也代理了。检查浏览器代理设置,确保127.0.0.1localhost在“不使用代理”的列表中。
扫描速度非常慢,或大量请求超时1. 目标服务器响应慢。
2.config.yamlscanner.max_parallel并发数设置过高,被目标限流。
3. 网络延迟高。
1. 增加scanner.timeout(如30秒)。
2.显著降低scanner.max_parallel(如改为5-10),这是最常见原因。
3. 考虑在离目标更近的网络环境运行。
报告中没有发现漏洞,但手动测试存在1. 漏洞对应的检测插件未启用。
2. POC规则不够精确,或漏洞需要特定条件触发。
3. 扫描深度或范围不够。
1. 检查config.yaml中的plugins配置,确保相关插件已启用。
2. 对于复杂漏洞,被动扫描结合手动测试更有效。
3. 调整爬虫配置,或使用Rad扩大资产发现范围。
使用HTTPS目标时,被动扫描报证书错误Xray的代理默认使用自签名证书,浏览器不信任。需要将Xray的CA证书导入到系统的受信任根证书颁发机构。具体方法:首次用浏览器访问某个HTTPS网站时,Xray会提示你访问http://127.0.0.1:7777下载证书。下载后安装并信任该证书。此操作有安全风险,请仅在测试环境中进行,并测试完毕后及时移除证书。

5.2 性能调优与最佳实践

要让Xray跑得又快又稳,以下几点经验值得参考:

  1. 目标选择与拆分:不要动不动就用一个工具去扫整个主域名(如*.example.com)。这既不道德,效率也低。应该先通过子域名枚举、端口扫描等手段,确定具体的测试目标(如app.example.com,api.example.com),然后针对性地扫描。
  2. 配置是灵魂:不要永远用默认配置。扫描前,花5分钟根据目标特点调整config.yaml
    • 对内网系统:可以适当提高max_parallel(如30-50),减少timeout(如5秒)。
    • 对公网复杂应用:务必降低max_parallel(如5-10),增加timeout(如15-30秒),并在crawler.exclude中排除图片、静态资源等无关路径。
    • 针对API接口扫描:可以关闭或减少爬虫深度,更多依靠被动扫描或手动导入接口文档(如Swagger URL)进行扫描。
  3. 报告分析与验证:Xray的报告是起点,不是终点。对于它报出的中高危漏洞,务必进行手动验证。特别是SQL注入、命令执行这类漏洞,尝试用报告中的Payload去复现,确认其真实性和危害等级。自动化工具难免有误报,直接提交误报报告会严重影响你的专业信誉。
  4. 法律与授权红线:这是最重要的“最佳实践”。绝对不要在未获得明确书面授权的情况下,对任何不属于你或你未被允许测试的系统进行漏洞扫描。这不仅违法,还可能构成犯罪。即使是内部测试,也最好在隔离的测试环境进行,避免影响生产系统。

工具的安装和使用只是第一步,真正体现价值的是如何将它融入你的安全工作中,如何解读它的结果,以及如何用专业的态度去对待安全测试这件事。Xray是一个强大的助手,但它不能替代安全工程师的思考和判断。把它用好了,它能成为你发现风险、加固系统的千里眼和顺风耳。