Xray简单使用教程
0X00下载
xray 为单文件二进制文件,无依赖,也无需安装,下载后直接使用。
下载地址为:
Github: https://github.com/chaitin/xray/releases (国外速度快)
网盘: https://yunpan.360.cn/surl_y3Gu6cugi8u (国内速度快)
注意: 不要直接 clone 仓库,xray 并不开源,仓库内不含源代码,直接下载构建的二进制文件即可。
xray 跨平台支持,请下载时选择需要的版本下载。
0X01版本选择
windows_amd64 Windows x64
windows_386 Windows x86
系统版本要求大于等于 Windows 7 或大于等于 Windows Server 2008 R2, 不支持 Windows XP、Windows 2003 等低版本系统。
对于 release 中的其他文件,说明如下:
sha256.txt 校验文件,内含个版本的 sha256 的哈希值,请下载后自行校验以防被劫持投毒。
Source Code Github 自动打包的,无意义,请忽略。
0X02运行
下载对应系统的版本后,来查看下 xray 的版本号。
以下载到 C:\Users\$User\Downloads 为例,右键解压,就可以得到 xray_windows_amd64.exe 文件了(有的解压软件还会创建一个 xray_windows_amd64.exe 的文件夹,不要和最终的可执行文件混淆了)。
使用桌面左下方的的搜索框,输入 PowerShell,点击 Windows PowerShell,进入命令终端。
然后 cd 到下载目录,运行 .\xray_windows_amd64.exe version 即可查看 xray 的版本号。
0X03基础命令
.\xray_windows_amd64.exe –h
通过-h命令发现xray命令有
GLOBAL OPTIONS
先来看一个界面中的这三个全局配置项。全局配置的意思是如果在这指定了,那么所有命令执行的时候都会生效。
--config 用于指定配置文件的位置,默认加载同目录的 config.yaml。关于配置文件请看下一节文档的内容
--log_level 用于指定全局的日志配置,默认为 info, 可以通过设置为 debug 来查看更详细的请求信息、运行时日志信息。
全局配置的使用时需要紧跟二进制程序,如:
.\xray_windows_amd64.exe --log_level debug --config 1.yaml webscan --url xxx
.\xray_windows_amd64.exe --log_level debug reverse
而下面这种方式是不生效的,使用时需要注意下:
.\xray_windows_amd64.exe webscan --log_level debug
commands
xray 的命令有 6 个,抛开 version 和 help 这两个信息展示型的命令,还有 webscan, reverse, genca, subdomain 四个。
reverse 命令用于启动单独的盲打平台服务,盲打平台用于处理没有回显或延迟触发的问题,如果你挖过存储型 XSS,一定对这个不陌生。这部分内容相对独立,单独用一节来介绍。
genca 用于快速生成一个根证书,主要用于被动代理扫描 HTTPS 流量时用到。
subdomain 是子域名扫描的命令,仅高级版才有。
webscan 是 xray 的重头戏。
subdomain子域名扫描
扫描 example.com,并将结果输出到 example.txt
.\xray_windows_amd64.exe subdomain --target example.com --text-output example.txt
扫描 example.com,并使用 console ui 交互式界面,同时记录结果到 example.txt
.\xray_windows_amd64.exe subdomain --target example.com --console-ui --text-output example.txt
webscan 扫描web漏洞
运行 .\xray_windows_amd64.exe webscan -h,可以看到
配置扫描插件
--plugins 配置本次扫描启用哪些插件, 不再使用配置文件中的配置
--plugins xss --plugins xss,sqldet,phantasm
--poc 配置本次扫描启用哪些 POC, 因为所有 POC 隶属于 phantasm 插件, 所以该参数其实是 phantasm 插件独有的配置。为了使用方便,该参数支持 Glob 表达式批量加载,
解析规则为用该参数值匹配内置的 poc 名字,如果有匹配到则启用;然后检查能否匹配本地文件,如果能匹配到,也加载。用起来是非常灵活的,如
只加载一个 POC, 精准匹配
--plugins phantasm --poc poc-yaml-thinkphp5-controller-rce
加载内置的所有带 `thinkphp` 的 POC
--plugins phantasm --poc "*thinkphp*"
加载本地 `/home/test/pocs/` 目录所有的 POC:
--plugins phantasm --poc "/home/test/pocs/*"
加载 `/home/test/pocs/` 下包含 thinkphp 的 POC
--plugins phantasm --poc "/home/test/pocs/*thinkphp*" ...
配置输入来源
中间的这四个是互斥的,意味着一次只能启用这5个的一个。
--listen 启动一个被动代理服务器作为输入,如 --listen 127.0.0.1:4444,然后配置浏览器或其他访问工具的 http 代理为 http://127.0.0.1:4444 就可以自动检测代理中的 HTTP 请求并进行漏洞扫描。
--basic-crawler 启用一个基础爬虫作为输入, 如 --basic-crawler http://example.com,就可抓取 http://example.com 的内容并以此内容进行漏洞扫描
--url 用于快速测试单个 url,这个参数不带爬虫,只对当前链接进行测试。默认为 GET 请求,配合下面的 --data 参数可以指定 body,同时变为 POST 请求。
--raw-request 用于加载一个原始的 HTTP 请求并用于扫描,原始请求类似上面代码框中的原始请求,如果你用过 sqlmap -r,那么这个参数应该也很容易上手。
配置输出
最后三个用于指定结果输出方式,这三种方式可以单独使用,也可以搭配使用。
--html-output 将结果输出为 html 报告, 报告样例
--webhook-output 将结果发送到一个地址
--json-output 将结果输出到一个 json 文件中
--webhook-output和--json-output 输出是 json 格式的结构化数据,数据格式参照: 漏洞格式。
你可以在--json-output和--html-otput参数中使用变量__timestamp__和__datetime__,这样文件名中对应位置会自动替换为时间戳或日期时间,避免输出到同一文件时报错。如--html-output report-__datetime__.html将使用report-2019_11_01-10_03_26.html作为报告文件名。
联合使用
将上面说的一些结合起来使用,就可以满足多种场景下的使用需求了。下面的例子都是可以正常运行的,作用不言而喻。
下面是一些例子
./xray_darwin_amd64 webscan --plugins xss --listen 127.0.0.1:1111 --html-output 1.html
./xray_darwin_amd64 --log_level debug webscan --plugins xss,cmd_injection --basic-crawler http://example.com --json-output 1.json
./xray_darwin_amd64 webscan --url http://example.com --data "x=y" --html-output 2.html --json-output 1.json
./xray_darwin_amd64 webscan --url http://example.com/ --webhook-output http://host:port/path