Ywc

Xray扫描器

Word count: 2.5k / Reading time: 11 min
2020/04/25 Share

下载

官方文档:
https://xray.cool/xray/#/tutorial/prepare

Github: https://github.com/chaitin/xray/releases (国外速度快)
网盘: https://yunpan.360.cn/surl_y3Gu6cugi8u (国内速度快)

下载最新版本,文件夹下有各个系统对应的版本
我这里是mac,运行xray_darwin_amd64即可

基本使用

代理模式

生成CA证书

1
2
# 生成CA证书
./xray_darwin_amd64 genca

然后在当前文件夹就会生成 ca.crtca.key 两个文件

将生成的ca证书导入到需要代理的设备即可,这样就可以方便代理https的流量了

双击 ca.crt安装到操作系统中去

mac下点击后,会显示证书不被信任

Xray扫描器

找到xray证书,双击证书,选择总是信任,输入管理员密码即可。

教程:https://xray.cool/xray/#/tutorial/webscan_proxy (windows下)

启动代理

第一次启动 xray 之后,当前目录会生成 config.yaml 配置文件,选择文件编辑器打开,并按照下方说明修改。

定位搜索到如下内容,将* 改为 testphp.vulnweb.com,这是AWVS的官方靶场,方便检测漏扫能力。增加这个过滤之后,xray 将只会扫描该站的流量,避免扫描到非授权目标站点。

1
2
3
4
5
6
mitm:
...
restriction:
includes: # 允许扫描的域,此处无协议
- 'testphp.vulnweb.com' # 表示允许所有的域名和 path
...

配置解释详见:https://xray.cool/xray/#/configration/mitm

运行Xray扫描器,监听本地的7777端口,并设置漏洞报告的输出的文件名为:xray-testphp.html

1
./xray webscan --listen 127.0.0.1:7777 --html-output xray-testphp.html

配置代理

Chrome下的SwitchyOmega插件很方便添加各种代理,将xray的代理添加进来,然后浏览器开启xray代理即可。

详情见:https://xray.cool/xray/#/tutorial/webscan_proxy

开始扫描

使用刚刚设置过代理的Chrome浏览器访问:http://testphp.vulnweb.com

然后就可以看到 xray 界面开始输出漏洞信息,在用户和网站交互的时候,期间的链接xray都会进行安全检查,然后生成对应的漏洞报告:

下面是几个快速链接,可以点击用于体验更多的漏洞类型的扫描

可以在上面设置的输出格式里面看到对应的漏洞检测结果报告:

Xray扫描器

爬虫模式

爬虫模式是模拟人工去点击网页的链接,然后去分析扫描,和代理模式不同的是,爬虫不需要人工的介入,访问速度要快很多,但是也有一些缺点需要注意。

  • xray 的基础爬虫不能处理 js渲染的页面
  • 需要首先人工配置登录 cookie,必需的 http 头等,如果登录失败,也不容易发现问题

启动爬虫:

1
./xray_darwin_amd64 webscan --basic-crawler http://testphp.vulnweb.com/ --html-output xray-crawler-testphp.html

在这个模式下,相当于主动扫描模式,自主分析页面的链接,然后自动探测是否有漏洞。

服务扫描

xray 中最常见的是 web 扫描,但是 xray 将会逐渐开放服务扫描的相关能力,目前主要是服务扫描相关的 poc。老版本升级的用户请注意配置文件需要加入服务扫描的相关 poc 名字,目前只有一个 tomcat-cve-2020-1938 ajp 协议任意文件检测 poc。

参数配置目前比较简单,输入支持两种方式,例如:

1
2
3
4
5
快速检测单个目标
./xray_darwin_amd64 servicescan --target 127.0.0.1:8009

批量检查的`1.file `中的目标, 一行一个目标,带端口
./xray_darwin_amd64 servicescan --target-file 1.file

其中 1.file的格式为一个行一个 service,如

1
2
10.3.0.203:8009
127.0.0.1:8009

也可以将结果输出到报告或json文件中,支持多种格式

1
2
3
4
5
6
# 将检测结果输出到 html 报告中
./xray_darwin_amd64 servicescan --target 127.0.0.1:8009 --html-output service.html
./xray_darwin_amd64 servicescan --target-file 1.file --html-output service.html

## 将检测结果输出到 json 文件中
./xray_darwin_amd64 servicescan --target 127.0.0.1:8099 --json-output 1.json

完整的servicescan用法可以使用下面命令查看:

1
2
3
4
5
6
7
8
9
10
11
12
13
./xray_darwin_amd64 servicescan --help
NAME:
servicescan - Run a service scan task

USAGE:
servicescan [command options] [arguments...]

OPTIONS:
--target value specify the target, for example: host:8009
--target-file value load targets from a local file, one target a line
--json-output FILE output xray results to FILE in json format
--webhook-output value post xray result to url in json format
--html-output FILE output xray result to FILE in HTML format

官网上有tomcat CVE-2020-1938 ajp 协议任意文件读取的例子

配置

命令详解

查看 -h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
./xray_darwin_amd64 -h


USAGE:
[global options] command [command options] [arguments...]

COMMANDS:
webscan Run a webscan task
servicescan Run a service scan task
poclint lint yaml poc
reverse Run a standalone reverse server
genca Generate CA certificate and key
upgrade check new version and upgrade self if any updates found
version Show version info
help, h Shows a list of commands or help for one command

GLOBAL OPTIONS:
--config FILE Load configuration from FILE
--log_level value Log level, choices are debug, info, warn, error, fatal
--help, -h show help

GLOBAL OPTIONS

即全局配置 如果在这指定了,那么所有命令执行的时候都会生效

1
2
3
4
5
6
# 用于指定配置文件的位置,默认加载同目录的 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

全局配置的使用时需要紧跟二进制程序,如:

1
2
3
4
5
# 正确的用法
./xray_darwin_amd64 --log_level debug --config my.yaml webscan --url xxx

# 错误的用法 全局配置没有紧跟二进制程序
./xray_darwin_amd64 webscan --log_level debug --config my.yaml --url xxx

COMMANDS

命令 说明
webscan xray核心功能,用来发现探测Web漏洞
servicescan 服务扫描功能 用来探测服务漏洞
poclint 检测poc是否符合规范
reverse 启动单独的盲打平台服务
genca 用于快速生成一个根证书,主要用于被动代理扫描HTTPS流量时用到
upgrade 检查新版本并自动升级
version 版本信息
help 显示命令列表或一个命令的帮助
subdomain 子域名扫描 高级版本才有的命令

subdomain

扫描 example.com,并将结果输出到 example.txt

1
./xray_darwin_amd64  subdomain --target example.com --text-output example.txtCopyErrorCopied

扫描 example.com,并使用 console ui 交互式界面,同时记录结果到 example.txt

1
./xray  subdomain --target example.com --console-ui --text-output example.txt

webscan

运行 ./xray_darwin_amd64 -h,可以看到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

Version: 0.21.8/92b968e0/COMMUNITY

NAME:
webscan - Run a webscan task

USAGE:
webscan [command options] [arguments...]

OPTIONS:
--plugins value specify the plugins to run, separated by ','
--poc value specify the poc to run, separated by ','

--listen value use proxy resource collector, value is proxy addr
--basic-crawler value use a basic spider to crawl the target and scan the results
--url-file value read urls from a local file and scan these urls
--url value scan a **single** url
--data value data string to be sent through POST (e.g. 'username=admin')
--raw-request FILE load http raw request from a FILE

--json-output FILE output xray results to FILE in json format
--html-output FILE output xray result to FILE in HTML format
--webhook-output value post xray result to url in json format
扫描插件
  • --plugins: 指定要运行的插件,使用,分隔

    1
    2
    --plugins xss
    --plugins xss,sqldet,phantasm
  • --poc:配置本次扫描启用哪些POC,使用,分隔

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 只加载一个 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发送的漏洞信息
1
在--json-output和--html-otput参数中使用变量__timestamp__和__datetime__,这样文件名中对应位置会自动替换为时间戳或日期时间,避免输出到同一文件时报错。如--html-output report-__datetime__.html将使用report-2019_11_01-10_03_26.html作为报告文件名。
组合使用

将上面说的一些结合起来使用,就可以满足多种场景下的使用需求了:

1
2
3
4
5
6
7
8
9
10
11
# 使用xss模块 启用1111端口的代理服务器进行web漏洞扫描,输出漏洞报告到1.html中
./xray_darwin_amd64 webscan --plugins xss --listen 127.0.0.1:1111 --html-output 1.html

# 将日志级别设置为debug 然后使用xss和命令执行插件 使用内置的爬虫来扫描,输出漏洞报告到1.json中
./xray_darwin_amd64 --log_level debug webscan --plugins xss,cmd_injection --basic-crawler http://example.com --json-output 1.json

# 对目标资产进行POST方式漏洞检测,data为 x=y 并输出漏洞报告到1.json中
./xray_darwin_amd64 webscan --url http://example.com --data "x=y" --html-output 2.html --json-output 1.json

# 对目标资产进行单个URL检测,路灯报告输出到指定的接受服务器中
./xray_darwin_amd64 webscan --url http://example.com/ --webhook-output http://host:port/path

交互命令行

交互式的命令行提供命令自动补全提示,直接运行 xray 而不加任何参数即可启动交互式命令行。

配置文件

引擎初次运行时,会在当前目录内生成一个 config.yaml 文件。通过调整配置中的各种参数,可以满足不同场景下的需求。

插件配置

被动代理配置

盲打平台配置

HTTP配置

基础爬虫配置

子域名配置

检查更新配置

Reference

https://xray.cool/xray/#/

https://www.sqlsec.com/2020/04/xray.html#toc-heading-21

CATALOG
  1. 1. 下载
  2. 2. 基本使用
    1. 2.1. 代理模式
      1. 2.1.1. 生成CA证书
      2. 2.1.2. 启动代理
      3. 2.1.3. 配置代理
      4. 2.1.4. 开始扫描
    2. 2.2. 爬虫模式
    3. 2.3. 服务扫描
  3. 3. 配置
    1. 3.1. 命令详解
      1. 3.1.1. GLOBAL OPTIONS
      2. 3.1.2. COMMANDS
        1. 3.1.2.1. subdomain
        2. 3.1.2.2. webscan
          1. 3.1.2.2.1. 扫描插件
          2. 3.1.2.2.2. 输入来源
        3. 3.1.2.3. 输出格式
          1. 3.1.2.3.1. 组合使用
      3. 3.1.3. 交互命令行
    2. 3.2. 配置文件
      1. 3.2.1. 插件配置
      2. 3.2.2. 被动代理配置
      3. 3.2.3. 盲打平台配置
      4. 3.2.4. HTTP配置
      5. 3.2.5. 基础爬虫配置
      6. 3.2.6. 子域名配置
      7. 3.2.7. 检查更新配置
  4. 4. Reference