公司动态
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的页面基础爬虫往往无能为力容易遗漏大量功能点。可能触发防御机制高频、规律的自动化请求容易被WAFWeb应用防火墙或风控系统识别并拦截导致扫描中断或结果不完整。“盲扫”带来的噪音由于不理解业务逻辑爬虫可能会触发一些无关的、甚至破坏性的操作例如误调用删除接口产生大量误报或对测试目标造成影响。而被动扫描则完美规避了上述问题。它的核心是“跟随你的操作”。你作为测试人员按照真实的业务流程去使用网站登录账户、浏览商品、添加购物车、提交订单、上传文件……你的每一个操作都是业务逻辑上合理、且被网站预期接受的。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将原始请求以及它自己生成的攻击请求转发给目标服务器。响应返回服务器响应先回到XrayXray再将其返回给浏览器。对于攻击请求的响应Xray只进行分析不会呈现给浏览器。结果输出发现的漏洞实时输出到命令行并最终生成HTML或JSON格式的详细报告。这个架构的关键在于浏览器和目标服务器都“认为”自己在直接通信而Xray在中间完成了所有“脏活”。接下来我们就从零开始搭建这个环境。3. 环境准备与Xray基础配置工欲善其事必先利其器。我们先搞定Xray的获取和基础运行。3.1 获取与运行XrayXray是一款跨平台工具支持Windows、macOS和Linux。访问其官方GitHub仓库的Release页面下载对应系统架构的最新版本。通常是一个压缩包解压后即可得到一个独立的可执行文件如xray_windows_amd64.exe或xray_linux_amd64。注意请务必从官方或可信渠道下载避免使用被篡改的版本引入安全风险。解压后打开终端Windows CMD/PowerShell, macOS Terminal, Linux Shell进入到Xray所在目录。首次运行任何命令例如./xray_darwin_amd64 versionXray会在当前目录自动生成一个默认的配置文件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.commitm: restriction: hostname_allowed: - “testphp.vulnweb.com“ # 仅允许扫描此域名避免误扫其他网站 hostname_disallowed: [ ] # 可以暂时清空黑名单但务必清楚自己在做什么为什么做域名限制法律合规避免触及未授权目标。提升效率只关注目标流量减少无关干扰和资源消耗。结果纯净报告里只包含目标站点的漏洞便于分析。接下来配置输出。在配置文件靠后的位置找到plugins部分可以配置各种输出器。我们可以在命令行指定但了解配置文件更有助于后续定制。更常见的做法是在启动命令中直接指定输出这样更灵活。4. 核心环节浏览器证书配置详解这是被动扫描HTTPS网站的基石也是新手最容易遇到问题的地方。原理前面提过让浏览器信任Xray自己签发的CA证书。4.1 生成CA证书在Xray所在目录下执行证书生成命令Windows:.\xray_windows_amd64.exe gencamacOS/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列表./xray webscan --basic-crawler http://target.com --json-output urls.json注意爬虫输出的是漏洞信息需要解析出URL。更专业的做法是使用rad这类专门的爬虫工具它能输出更纯净的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。配置浏览器浏览器代理指向Burp127.0.0.1:8080。这样你的所有浏览器流量先到Burp你可以用Burp进行拦截、修改、重放等操作。然后Burp将流量转发给XrayXray进行漏洞扫描后再发给目标服务器。返回的响应则逆向传递。你可以在Burp中精细控制每一个请求同时享受Xray的自动化漏洞检测能力。6.4 插件管理与自定义POCXray的强大之处在于其插件化架构和丰富的漏洞检测插件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联动失败流量未到达Xray1. Burp上游代理配置错误。2. Burp或Xray监听地址不是127.0.0.1。1. 确认Burp的Upstream Proxy规则正确且未启用其他过滤规则。2. 确保Burp监听器和Xray监听器都绑定在127.0.0.1避免回环地址问题。7.2 实战心得与避坑指南从“只读”操作开始在初步测试一个陌生网站时优先进行浏览、查看等“只读”操作避免触发修改、删除、下单等写操作防止对线上业务造成意外影响。在授权测试中也应在测试环境进行。善用“暂停”与“过滤”Xray在终端运行时可以按CtrlC停止。但在复杂测试中你可能只想扫描某个特定功能点。此时可以在浏览器插件中快速开关代理或者使用Xray配置文件中的path_disallowed临时过滤掉无关流量让扫描更聚焦。关注“漏报”与“误报”没有任何工具是完美的。Xray的被动扫描严重依赖于你的操作覆盖面。如果你没有测试到某个功能点那里的漏洞就不会被发现漏报。同时一些复杂的业务逻辑漏洞或需要多步交互的漏洞自动化工具也可能误判误报。工具只是辅助安全测试者的思维和经验才是核心。对Xray报出的每一个漏洞都应手动验证其真实性和危害程度。性能与资源考量长时间、高强度的被动扫描会产生大量日志和报告文件占用磁盘空间。建议定期清理旧的报告。同时对非常复杂的单页面应用SPA进行大量交互时可能会对Xray进程造成一定内存压力观察系统资源必要时重启Xray。保持工具更新安全工具和漏洞库更新频繁。定期关注Xray的GitHub仓库更新到新版本以获取最新的漏洞检测插件POC和性能改进。将Xray被动扫描模式融入你的日常安全测试工作流就像为你的浏览器装上了一双“安全之眼”。它不会替代你思考但能把你从重复、机械的初级漏洞检测中解放出来让你更专注于业务逻辑分析、漏洞深度利用和攻击链构建等更高价值的工作。从今天开始尝试用这种方式去审视你经常访问的网站或授权的测试目标你可能会惊讶于那些在你眼皮底下潜伏已久的漏洞。