当前位置:网站首页>Xray安装使用
Xray安装使用
2022-07-16 13:17:00 【七六九】
1.下载并解压
根据自己系统环境下载相应版本;
https://github.com/chaitin/xray/releases
下载完成后解压
我这里使用的是windows版

2.xray简易架构
xray中最主要的是他的简单框架组成,整体来看,扫描器这类工具大致由三部分组成,来源处理、漏洞检测、结果输出。而如何使用好xray就在于漏洞检测功能的选择配置,因为这一部分是引擎的核心功能,用于处理前面来源处理部分产生的标准化的请求。用户可以针对性的启用插件,配置扫描插件的参数,配置 HTTP 相关参数等。在使用 xray 的过程中只要谨记这三个部分,所有的命令行用法就看起来很简单了。
基本语法就是三个主要参数: 【xray 选择漏洞检测类型 来源地址 结果输出】
3. 基本使用
3.1 代理模式
代理模式下的基本架构为,扫描器作为中间人,首先原样转发流量,并返回服务器响应给浏览器等客户端,通讯两端都认为自己直接与对方对话,同时记录该流量,然后修改参数并重新发送请求进行扫描。

生成ca证书
打开cmd,切换到xary所在目录
输入生成证书命令:
xray_windows_amd64.exe genca

该目录下看到产生的证书
将生成的 ca 证书导入到需要代理的设备即可,这样就可以方便代理 https 的流量了
启用代理
第一次启动 xray 之后,当前目录会生成 config.yml 配置文件,选择文件编辑器打开,并按照下方说明修改。定位搜索到如下内容,将* 改为 testphp.vulnweb.com,这是AWVS的官方靶场,方便检测漏扫能力。
# 配置解释见 https://chaitin.github.io/xray/#/configration/mitm
mitm:
...
restriction:
hostname_allowed: # 允许访问的 Hostname
- 'testphp.vulnweb.com' # 表示允许所有的域名和 path
...
监听本地的7777端口,并设置漏洞报告的输出的文件名为:testphp.html
.\xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output testphp.html
配置代理
SwitchyOmega 插件很方便添加各种代理,将xray的代理添加进来,然后浏览器开启 xray 代理即可:
开始扫描
使用刚刚设置过代理的浏览器访问:http://testphp.vulnweb.com
然后就可以看到 xray 界面开始输出漏洞信息,在用户和网站交互的时候,期间的连接 xray 都会进行安全检查,然后生成对应的漏洞报告:
下面是几个快速链接,可以点击用于体验更多的漏洞类型的扫描
http://testphp.vulnweb.com/listproducts.php?cat=1
http://testphp.vulnweb.com/artists.php?artist=2
http://testphp.vulnweb.com/redir.php?r=http://www.w3.org
可以在上面设置的输出格式里面看到对应的漏洞检测结果报告:
3.2 爬虫模式
爬虫模式是模拟人工去点击网页的链接,然后去分析扫描,和代理模式不同的是,爬虫不需要人工的介入,访问速度要快很多,但是也有一些缺点需要注意。
xray 的基础爬虫不能处理 js 渲染的页面
需要首先人工配置登录 cookie,必需的 http 头等,如果登录失败,也不容易发现问题
.\xray_windows_amd64.exe webscan --basic-crawler http://testphp.vulnweb.com/ --html-output xray-crawler-testphp.html
效果一般,配合rad效果更好,(自己学习)
3.3 服务扫描
Xray最常见的是web扫描,对服务扫描会逐渐开发它的检测能力,目前参数配置目前比较简单,输入仅仅支持两种方式:
1.快速检测单个目标
.\xray_windows_amd64.exe servicescan --target 127.0.0.1:8009
2.批量检查的 test.file 中的目标, 一行一个目标,带端口(servicescan简写为ss)
.\xray_windows_amd64.exe ss --target-file test.file
其中 test.file 的格式为一个行一个 service,如
10.3.0.203:8009
127.0.0.1:8009
报告的输出仅支持json、webhook和html文件三种,不支持text。
总的语法:
.\xray_windows_amd64.exe ss --target 127.0.0.1:8009 –json-output test.json
如果想扫edu.cn的就要把这里的去掉。

4. 配置
命令详解
查看 -h 基本上应该都很容易理解了
使用 .\xray_windows_amd64.exe –h 命令可以查看参数帮助。
GLOBAL OPTIONS:
全局配置 如果在这指定了,那么所有命令执行的时候都会生效
# 用于指定配置文件的位置,默认加载同目录的 config.yaml
--config FILE Load configuration from FILE
# 用于指定全局的日志配置,默认为info, 可以设置为debug查看更详细的信息
--log_level value Log level, choices are debug, info, warn, error, fatal
--help, -h show help
COMMANDS
subdomain
扫描 example.com,并将结果输出到 example.txt
.\xray_windows_amd64.exe subdomain --target example.com --text-output example.txtCopyErrorCopied
扫描 example.com,并使用 console ui 交互式界面,同时记录结果到 example.txt
.\xray_windows_amd64.exe --target example.com --console-ui --text-output example.txt
webscan
.\xray_windows_amd64.exe webscan -h

扫描插件
plugins: 指定要运行的插件,使用,分隔
--plugins xss
--plugins xss,sqldet,phantasm
poc:配置本次扫描启用哪些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*"
输入来源
--listen: 启动一个被动代理服务器作为输入,如 --listen 127.0.0.1:7777
--basic-crawler: 启用一个基础爬虫作为输入, 如 --basic-crawler http://example.com
--url-file: 批量从文件中读取URL
--url: 用于快速测试单个URL,不带爬虫,默认为GET请求
--data:指定 data,同时变为POST请求
--raw-request: 加载一个原始的 HTTP 请求并用于扫描,类似于sqlmap -r
输出格式
--json-output: 将结果输出到一个 json 文件中,输出是JSON格式的结构化数据
--html-output: 将结果输出为 html 报告
--webhook-output: 将结果发送到一个地址,输出是JSON格式的结构化数据,需要自己搭建一个Web服务器,接收到xray发送的漏洞信息
在
--json-output和--html-otput参数中使用变量__timestamp__和__datetime__,这样文件名中对应位置会自动替换为时间戳或日期时间,避免输出到同一文件时报错。如--html-output report-__datetime__.html将使用report-2019_11_01-10_03_26.html作为报告文件名。
组合使用
将上面说的一些结合起来使用,就可以满足多种场景下的使用需求了:
# 使用xss模块 启用1111端口的代理服务器进行web漏洞扫描,输出漏洞报告到1.html中
.\xray_windows_amd64.exe webscan --plugins xss --listen 127.0.0.1:1111 --html-output 1.html
# 将日志级别设置为debug 然后使用xss和命令执行插件 使用内置的爬虫来扫描,输出漏洞报告到1.json中
.\xray_windows_amd64.exe --log_level debug webscan --plugins xss,cmd_injection --basic-crawler http://example.com --json-output 1.json
# 对目标资产进行POST方式漏洞检测,data为 x=y 并输出漏洞报告到1.json中
.\xray_windows_amd64.exe webscan --url http://example.com --data "x=y" --html-output 2.html --json-output 1.json
# 对目标资产进行单个URL检测,报告输出到指定的接受服务器中
.\xray_windows_amd64.exe webscan --url http://example.com/ --webhook-output http://host:port/path
配置文件
插件配置
在具体插件配置之前,plugins 部分有个顶级配置项为 max_parallel, 表示插件的并发度。举个例子,如果需要处理 3 个请求,此时启用了三个插件 sqldet, xss, cmd_injection, 当设置 max_parallel 为 1 时,处理过程为:
sqldet, xss, cmd_injection 同时处理 request1
sqldet, xss, cmd_injection 同时处理 request2
sqldet, xss, cmd_injection 同时处理 request3
当 max_parallel 设置为 3 时,处理过程为:
sqldet,xss,cmd_injection 同时并发(3并发)处理 request1, request2, request3
理论上时间会算缩短3倍,但这个值并非越大越好,高并发意味着同一时间发包数量大幅增加,这可能会影响远程 server 的运行和xray 对漏洞的判断,需要按需设置。
对于其他配置项,一个插件是一个配置单元,每个单元的基本格式为:
pluginName:
enabled: true/false
otherConfigrations: xxx
enabled 即为是否启用插件,所以这里只说明部分插件的特殊配置就可以了
xss
ie_feature如果此项为 true,则会将一些只能在IE环境下复现的漏洞爆出来,小白请不要开。include_cookie如果此项为 true, 则会检查是否存在输入源在 cookie 中的 xss
baseline

cmd_injection
detect_blind_injection是否使用盲打来检查命令注入
dirscan
dictionary 配置目录字典, 需要是绝对路径dictionary Web字典的路径
sqldet
error_based_detection启用报错注入检测boolean_based_detection启用布尔盲注检测time_based_detection启用时间盲注检测
下面两个选项很危险,开启之后可以增加检测率,但是有破坏数据库数据的可能性,请务必了解工作原理之后再开启dangerously_use_comment_in_sql允许检查注入的时候使用注释dangerously_use_or_in_sql允许检查注入的时候使用 or
brute_force
detect_default_password检测默认密码detect_unsafe_login_method检测不安全的登录方法username_dictionary弱口令用户名字典, 需要绝对路径password_dictionary弱口令密码字典, 需要绝对路径
如果没有配置将使用内置字典,约 Top8 用户名和 Top80 密码。配置后将做字典合并,即用户字典的与内置的做合并并去重。
phantasm
depth探测深度, 默认为1, 即只在URL深度为0, 和深度为1时运行该插件(前提是启用了该插件)poc定义默认启用哪些POC。支持写内置POC名字和本地文件的绝对路径,如:
phantasm:
poc:
- poc-yaml-activemq-cve-2016-3088
- /Users/test/1.yml
这样方便自己添加自己的POC了
被动代理配置
抓取HTTPS流量
需要生成ca证书,然后 用户手动导入证书即可
代理启用密码保护

xray 支持给代理配置基础认证的密码,当设置好 auth 中的 username 和 password 后,使用代理时浏览器会弹框要求输出用户名密码,输入成功后代理才可正常使用。
设置代理的IP白名单
配置中的 allow_ip_range 项可以限制哪些 IP 可以使用该代理。支持单个 IP 和 CIDR 格式的地址,如:
allow_ip_range: ["127.0.0.1","192.168.1.1/24"]
留空则允许所有地址访问,如果来源 IP 没有在配置的地址内,使用者则会报Proxy Failed的错误。
限制漏洞扫描的范围
在 mitm 的配置中的 restrction 项指示本次漏洞的 URI 限制。
hostname_allowed 表示只扫描哪些域和路径。比如 *.example.com 只扫描 example.com 的子域
hostname_disallowed 表示不扫描哪些域和路径。比如 t.example.com 表示不扫描 t.example.com
两个都配置的情况下会取交集,这两个配置常用于想要过滤代理中的某些域,或者只想扫描某个域的请求时。
两项配置都支持 path 过滤,如果输入的中有 /, 那么 / 后面的表达式就是 path 的过滤。可以对照如下例子理解:
- 'example.com/test' # 表示允许 example.com/test 这一个路径
- "example.com/admin*" # 表示允许 example.com 下的 /admin 开头的所有 path
注意: 这里的 hostname_allowed和 hostname_disallowed 均
不支持端口号,如果加上将导致限制失效!
队列长度配置
queue:
max_length: 10000

代理请求头配置
proxy_header:
via: "" #如果不为空,proxy 将添加类似 Via: 1.1 $some-value-$random 的 http 头
x_forwarded: false # 是否添加 X-Forwarded-{For,Host,Proto,Url} 四个 http 头
如果开启 proxy_header,代理会添加 via 头和 X-Forwarded-* 系列头。如果在请求中就已经存在了同名的 HTTP 头,那么将会追加在后面。
比如 curl http://127.0.0.1:1234 -H "Via: test" -H "X-Forwarded-For: 1.2.3.4" -v,后端实际收到的请求将会是
GET / HTTP/1.1
Host: 127.0.0.1:1234
User-Agent: curl/7.54.0
Accept: */*
Via: test, 1.1 xray-1fe7f9e5241b2b150f32
X-Forwarded-For: 1.2.3.4, 127.0.0.1
X-Forwarded-Host: 127.0.0.1:1234
X-Forwarded-Proto: http
X-Forwarded-Url: http://127.0.0.1:1234/
Accept-Encoding: gzip
代理的代理
假如启动 xray 时配置的 listen 为 127.0.0.1:1111,upstream_proxy 为 http://127.0.0.1:8080, 那么浏览器设置代理为 http://127.0.0.1:1111,整体数据流如下:
该配置仅影响代理本身,不会影响插件在漏洞探测时的发包行为
盲打平台配置
这里知识点比较多,反向盲打平台很多,如果大家对xray的这个功能感兴趣建议参考xray的官方文档,这里就不细写了
地址:反连平台配置
HTTP配置
对于 web 扫描来说,http 协议的交互是整个过程检测过程的核心。因此这里的配置将影响到引擎进行 http 发包时的行为。
漏洞扫描用的代理 proxy
配置该项后漏洞扫描发送请求时将使用代理发送,支持 http, https 和 socks5 三种格式,如:
http://127.0.0.1:1111
https://127.0.0.1:1111
socks5://127.0.0.1:1080
基础爬虫配置
基础爬虫的配置项对应于 basic-crawler 部分,默认的配置如下,用法参照文件中的注释
basic_crawler:
max_depth: 0 # 爬虫最大深度, 0 为无限制
max_count_of_links: 0 # 本次扫描总共爬取的最大连接数, 0 为无限制
allow_visit_parent_path: false # 是否允许访问父目录, 如果扫描目标为 example.com/a/, 如果该项为 false, 那么就不会爬取 example.com/ 这级目录的内容
restriction: # 和 mitm 中的写法一致, 有个点需要注意的是如果当前目标为 example.com 那么会自动添加 example.com 到 includes 中。
includes: []
excludes:
- '*google*'
子域名配置(只在高级版中有)
测试了这个子域名功能,可以用,但是不是很强大,不如自己采集多方面接口的域名要全,感兴趣可以参考官方文档。
检查更新配置
xray 内置了一个简单的更新检查机制,会在每次启动的时候检查有无新的版本发布,如果有更新将在界面上显示最新的 release notes。 如不需要该机制,可以通过下列方法禁用:
在 config.yaml 中添加如下配置即可禁用更新检查:
update:
check: false
5.进阶
使用 Burp 与 xray 进行联动
在实际测试过程中,除了被动扫描,也时常需要手工测试。这里使用 Burp 的原生功能与 xray 建立起一个多层代理,让流量从 Burp 转发到 xray 中。
首先 xray 建立起 webscan 的监听
.\xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output bp.html
进入 Burp 后,打开 User options 标签页,然后找到 Upstream Proxy Servers 设置。
点击 Add 添加上游代理以及作用域,Destination host处可以使用*匹配多个任意字符串,?匹配单一任意字符串,而上游代理的地址则填写 xray 的监听地址。

接下来 BP 正常抓包,与此同时 BP 也会将我们截取到的一些流量包发到 xray 中进行漏洞检测
xray 与 AWVS 联动
awvs 的爬虫很好用,支持表单分析和单页应用的爬取,xray 的扫描能力比较强,速度也更快。awvs 和 xray 搭配使用则是如虎添翼。
首先 xray 建立起 webscan 的监听
如果你的AWVS不是安装在物理机上话,那么你的xray应该填写你AWVS可以访问的地址
以 AWVS 13 为例,登入管理页后,点击 Targets, 然后点击 Add Target 添加扫描目标:
下滑到HTTP部分,填写Proxy Server为对应的xray代理,
最后扫描类型选择 仅爬取:

此时 AWVS 的爬虫会把请求都转发给 xray 检测漏洞了,此时awvs.html里面就躺好了漏洞:
Django调用xray
因为 xray 的新版本支持webhook这样很方便我们写代码调用,首先 xray 监听本地的7777端口,然后监听的流量进行漏洞检测,将漏洞信息同时通过webhook的方式传输到http://127.0.0.1:8000/scan/xray/
.\xray_windows_amd64.exe webscan --listen 192.168.31.53:7777 --webhook-output http://127.0.0.1:8000/scan/xray/
http://127.0.0.1:8000/scan/xray/这个是用 Django 写的接口,下面是这个接口简单的实现代码:
import json
from django.shortcuts import render
from django.views.generic.base import View
from django.views.decorators.csrf import csrf_exempt
class WebHook(View):
@csrf_exempt
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
def post(self, request):
vul_data = json.loads(request.body)
if 'detail' in str(request.body):
print('漏洞插件:', vul_data['plugin'])
print('漏洞位置:', vul_data['target']['url'])
print('漏洞分类:', vul_data['vuln_class'])
return render(request, 'test.html', {
})
因为Django安全机制问题,xray post提交请求到Django必须填写CSRF Token才可以,解决方法就是手动关掉这个类的CSRF检测@csrf_exempt
参考资料
边栏推荐
- 10个第一、2个第二,达摩院NLP团队在SemEval 2022的夺冠之旅
- 【SQL注入】order by 注入:联合盲注、报错、堆叠注入
- Flink1.7 from installation to experience
- 今日睡眠质量记录85分
- 守护线程及应用场景
- 26 top open source projects, 87 open tasks, Alibaba programming summer 2022 student registration channel opened
- 2022 P gas cylinder filling examination questions and simulation examination
- Basic operation of queue
- Digital pyramid (PTA)
- Robotics XM430-W350 云台电机使用记录
猜你喜欢
随机推荐
老板想要的简单方案 vs. 程序员理解的需求 | 漫画
LeetCode每日一题(947. Most Stones Removed with Same Row or Column)
原生fetch请求简单封装
【Renesas RA6M4开发板之I2C读取BMP180气压温度】
Boost create folder
Data visualization: plotting sine and cosine curves with Matplotlib
Quick completion guide of manipulator (zero five): resources related to manipulator
[CVPR2019] On Stabilizing Generative Adversarial Training with Noise
【实战】快来和我一起开发一个在线 Web 代码编辑器
【Leetcode】232. 用栈实现队列
(pytorch进阶之路五)RNN/LSTM/LSTMP/GRU
06.01 binary tree storage
If an element is above another element, clicking on the above element will trigger the following element event operation
树莓派利用OpenCV的图像跟踪、人脸识别等
2022 P gas cylinder filling examination questions and simulation examination
Enter a URL and explain the whole process
守护线程及应用场景
Introduction to replacement technology of SAP ABAP CDs view view
进程【详细总结】
Stream流使用









