当前位置: 博客首页>> 网络安全 >> 阅读正文

xray安装与使用

作者: 分类: 网络安全 发布于: 2024-06-20 18:01:28 浏览:1,317 评论(0)


介绍

xray 是一款功能强大的安全评估工具,支持主动扫描和被动扫描。详细文档请移步官方文档

xray 支持扫描的类型包括:

名称 Key 说明
XSS漏洞检测 xss 利用语义分析的方式检测XSS漏洞
SQL 注入检测 sqldet 支持报错注入、布尔注入和时间盲注等
命令/代码注入检测 cmd-injection 支持 shell 命令注入、PHP 代码执行、模板注入等
目录枚举 dirscan 检测备份文件、临时文件、debug 页面、配置文件等10余类敏感路径和文件
路径穿越检测 path-traversal 支持常见平台和编码
XML 实体注入检测 xxe 支持有回显和反连平台检测
poc 管理 phantasm 默认内置部分常用的 poc,用户可以根据需要自行构建 poc 并运行。文档:POC
文件上传检测 upload 支持常见的后端语言
弱口令检测 brute-force 社区版支持检测 HTTP 基础认证和简易表单弱口令,内置常见用户名和密码字典
jsonp 检测 jsonp 检测包含敏感信息可以被跨域读取的 jsonp 接口
ssrf 检测 ssrf ssrf 检测模块,支持常见的绕过技术和反连平台检测
基线检查 baseline 检测低 SSL 版本、缺失的或错误添加的 http 头等
任意跳转检测 redirect 支持 HTML meta 跳转、30x 跳转等
CRLF 注入 crlf-injection 检测 HTTP 头注入,支持 query、body 等位置的参数
XStream漏洞检测 xstream 检测XStream系列漏洞
Struts2 系列漏洞检测 struts 检测目标网站是否存在Struts2系列漏洞,包括s2-016、s2-032、s2-045、s2-059、s2-061等常见漏洞
Thinkphp系列漏洞检测 thinkphp 检测ThinkPHP开发的网站的相关漏洞
shiro反序列化漏洞检测 shiro 检测Shiro反序列化漏洞
fastjson系列检测 fastjson 检测fastjson系列漏洞

下载地址

请下载的时候选择最新的版本下载。

注意: 不要直接 clone 仓库,xray 并不开源,仓库内不含源代码,直接下载构建的二进制文件即可。

xray 跨平台支持,请下载时选择需要的版本下载。

  • windows: 系统版本要求大于等于 Windows 7 或大于等于 Windows Server 2008 R2, 不支持 Windows XP、Windows 2003 等低版本系统。
    • windows_amd64 Windows x64
    • windows_386 Windows x86
  • MacOS:
    • darwin_amd64 MacOS intel系列
    • darwin_arm64 MacOS m系列
  • Linux: 要求内核版本大于等于 2.6.23。不支持 CentOS 5, 因为内核太旧了 (2.6.18)。
    • linux_amd64 Linux x64
    • linux_arm64 Linux x64
    • linux_386 Linux x86

对于 release 中的其他文件,说明如下:

  • sha256.txt 校验文件,内含个版本的 sha256 的哈希值,请下载后自行校验以防被劫持投毒。
  • Source Code Github 自动打包的,无意义,请忽略。

快速使用,以windows为例

以下载到 D:\Program Files\xray 为例,右键解压,就可以得到 xray_windows_amd64.exe 文件了(有的解压软件还会创建一个 xray_windows_amd64.exe 的文件夹,不要和最终的可执行文件混淆了)。使用shell工具如windows自带的Windows PowerShell进入命令终端,然后cdD:\Program Files\xray目录, 运行 .\xray_windows_amd64.exe version 即可查看 xray 的版本号,如图:

image20240620100447050.png

1、使用基础爬虫爬取并对爬虫爬取的链接进行漏洞扫描

.\xray_windows_amd64.exe webscan --basic-crawler http://testphp.vulnweb.com/ --html-output xray-crawler-testphp.html

1、webscan 表示执行的是web扫描

2、--basic-crawler 表示 使用基本的spider对目标进行爬网并扫描请求 后面接要扫描的web url地址

3、--html-output 表示 扫描结果使用html格式输出 后面跟输出的html文件名,默认地址是当前执行文件夹

2、使用 HTTP 代理进行被动扫描

代理模式下的基本架构为,扫描器作为中间人,首先原样转发流量,并返回服务器响应给浏览器等客户端,通讯两端都认为自己直接与对方对话,同时记录该流量,然后修改参数并重新发送请求进行扫描。

.\xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output xray-testphp.html

--listen 表示监听,后面跟监听的ip与端口

代理扫描https协议需要安装ca证书以获取信任。证书安装步骤:

1、获取证书

运行 .\xray_windows_amd64.exe genca,运行命令之后,将在当前文件夹生成 ca.crtca.key 两个文件。

2、安装证书

双击 ca.crt安装即可,最后弹出导入成功即安装成功了

3、只扫描单个url,不使用爬虫

.\xray_windows_amd64.exe webscan --url http://testphp.vulnweb.com?a=b --html-output single-url.html

--url 表示本次只扫描单个地址, 后面跟url地址

4、手动指定运行的插件

默认情况下,将会启用所有内置插件,可以使用下列命令指定本次扫描启用的插件

.\xray_windows_amd64.exe webscan --plugins cmd-injection,sqldet --url http://testphp.vulnweb.com --html-output output.html
.\xray_windows_amd64.exe webscan --plugins cmd-injection,sqldet --listen 127.0.0.1:7777 --html-output output.html

5、指定输出文件的格式

指定将本次扫描的漏洞信息输出到某个文件中:

.\xray_windows_amd64.exe webscan --url http://testphp.vulnweb.com?a=b --json-output result.json --html-output report.html

可使用jsonhtml格式输出

6、配置文件

配置文件在当前目录的config.yaml文件里, 里面有对应的中文解释

version: 4.0

parallel: 30                      # 漏洞探测的 worker 数量,可以简单理解为同时有 30 个 POC 在运行

# 全局 http 发包配置
# 更多解释见 https://docs.xray.cool/#/configration/http
http:
  proxy: ""                             # 漏洞扫描时使用的代理,如: http://127.0.0.1:8080。 如需设置多个代理,请使用 proxy_rule 或自行创建上层代理
  proxy_rule: []                        # 漏洞扫描使用多个代理的配置规则, 具体请参照文档
  dial_timeout: 5                       # 建立 tcp 连接的超时时间
  read_timeout: 10                      # 读取 http 响应的超时时间,不可太小,否则会影响到 sql 时间盲注的判断
  max_conns_per_host: 50                # 同一 host 最大允许的连接数,可以根据目标主机性能适当增大
  enable_http2: false                   # 是否启用 http2, 开启可以提升部分网站的速度,但目前不稳定有崩溃的风险
  fail_retries: 0                       # 请求失败的重试次数,0 则不重试
  max_redirect: 5                       # 单个请求最大允许的跳转数
  max_resp_body_size: 2097152           # 最大允许的响应大小, 默认 2M
  max_qps: 500                          # 每秒最大请求数
  allow_methods:                        # 允许的请求方法
  - HEAD
  - GET
  - POST
  - PUT
  - PATCH
  - DELETE
  - OPTIONS
  - CONNECT
  - TRACE
  - MOVE
  - PROPFIND
  headers:
    User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0
    # Cookie: key=value

# 漏洞探测的插件配置
# 更多解释见 https://docs.xray.cool/#/configration/plugins
plugins:
  baseline:
    enabled: true
    detect_cors_header_config: true     # 检查 cors 相关配置
    detect_server_error_page: true      # 检查服务器错误信息
    detect_phpinfo: true                # 检查响应是否包含phpinfo
    detect_system_path_leak: false      # 检查响应是否包含系统路径泄露
    detect_outdated_ssl_version: false  # 检查 ssl 版本问题
    detect_http_header_config: false    # 检查 http 安全相关 header 是否配置
    detect_cookie_httponly: false       # 检查 set-cookie 时是否设置 http only
    detect_china_id_card_number: false  # 检查响应是否存在身份证号
    detect_china_phone_number: false    # 检查响应是否存在电话号码
    detect_china_bank_card: false       # 检查响应是否存在银行卡号
    detect_private_ip: false            # 检查响应是否包含内网 ip
  brute-force:
    enabled: true
    username_dictionary: ""             # 自定义用户名字典, 为空将使用内置 TOP10, 配置后将与内置字典**合并**
    password_dictionary: ""             # 自定义密码字典,为空将使用内置 TOP100, 配置后将与内置字典**合并**
  cmd-injection:
    enabled: true
  crlf-injection:
    enabled: true
  dirscan:
    enabled: true
    depth: 1                            # 检测深度,定义 http://t.com/a/ 深度为 1, http://t.com/a 深度为 0
    dictionary: ""                      # 自定义检测字典, 配置后将与内置字典**合并**
    exclude_dir: []                     # 想要排除的内部的扫描category,例如["sensitive/crossdomain","system/key"]
  fastjson:
    enabled: true
  jsonp:
    enabled: true
  path-traversal:
    enabled: true
  phantasm:                             # poc 插件
    enabled: true
    depth: 1
    auto_load_poc: false                # 除内置 poc 外,额外自动加载当前目录以 "poc-" 为文件名前缀的POC文件,等同于在 include_poc 中增加 "./poc-*"
    exclude_poc: []                     # 排除哪些 poc, 支持 glob 语法, 如: "/home/poc/*thinkphp*" 或 "poc-yaml-weblogic*"
    include_poc: []                     # 只使用哪些内置 poc 以及 额外加载哪些本地 poc, 支持 glob 语法, 如:"*weblogic*" 或 "/home/poc/*"
                                        # 也可使用 --poc 仅运行 指定的内置或本地 poc,进行测试。
                                        # 例如,可使用如下命令,仅运行当前目录下的 poc 且 不运行内置 poc 进行测试:
                                        # webscan -poc ./poc-* -url http://example.com
    poc_tags:                           # 为POC添加tag, 然后就可以使用--tags来选择启动哪些POC。poc-yaml-test为poc的name,[]中的内容为该POC对应的标签
      poc-yaml-test: ["HW", "ST"]
      poc-yaml-test-1: ["ST"]                       
  redirect:
    enabled: true
  shiro:
    enabled: true
    cookie_name: rememberMe             # 默认使用哪个 shiro cookie name
    aes_key: []                         # 自定义 shiro key,配置后将与内置 116 key 做合并
    aes_key_file:                       # 自定义存储 shiro key 的文件路径,配置后将自动加载文件中的key
  sqldet:
    enabled: true
    boolean_based_detection: true       # 是否检测布尔盲注
    error_based_detection: true         # 是否检测报错注入
    time_based_detection: true          # 是否检测时间盲注
    use_comment_in_payload: false       # 在 payload 中使用 or, 慎用!可能导致删库!
    detect_sqli_in_cookie: true         # 是否检查在 cookie 中的注入
  ssrf:
    enabled: true
  struts:
    enabled: true
  thinkphp:
    enabled: true
    detect_thinkphp_sqli: true          # 检查 thinkphp 特定语法的 sqli 注入漏洞
  upload:
    enabled: true
  xss:
    enabled: true
    detect_xss_in_cookie: true          # 是否探测入口点在 cookie 中的 xss
    ie_feature: false                   # 是否扫描仅能在 ie 下利用的 xss
  xxe:
    enabled: true

# 反连平台配置,更多解释见 https://docs.xray.cool/#/configration/reverse
# 注意: 默认配置为禁用反连平台,这是无法扫描出依赖反连平台的漏洞,这些漏洞包括 fastjson,ssrf 以及 poc 中依赖反连的情况等
reverse:
  db_file_path: ""                      # 反连平台数据库文件位置, 这是一个 KV 数据库
  token: ""                             # 反连平台认证的 Token, 独立部署时不能为空
  http:
    enabled: false
    listen_ip: 0.0.0.0 
    listen_port: ""
    ip_header: ""                       # 在哪个 http header 中取 ip,为空代表从 REMOTE_ADDR 中取
  dns:
    enabled: false
    listen_ip: 0.0.0.0 
    domain: ""                          # DNS 域名配置
    is_domain_name_server: false        # 是否修改了域名的 ns 为反连平台,如果是,那 nslookup 等就不需要指定 dns 了
    resolve:                            # DNS 静态解析规则
    - type: A                           # A, AAAA, TXT 三种
      record: localhost
      value: 127.0.0.1
      ttl: 60
  client:
    remote_server: false                # 是否是独立的远程 server,如果是要在下面配置好远程的服务端地址
    http_base_url: ""                   # 默认将根据 ListenIP 和 ListenPort 生成,该地址是存在漏洞的目标反连回来的地址, 当反连平台前面有反代、绑定域名、端口映射时需要自行配置
    dns_server_ip: ""                   # 和 http_base_url 类似,实际用来访问 dns 服务器的地址

# 被动代理配置
# 更多解释见 https://docs.xray.cool/#/configration/mitm
mitm:
  ca_cert: ./ca.crt                     # CA 根证书路径
  ca_key: ./ca.key                      # CA 私钥路径
  basic_auth:                           # 基础认证的用户名密码
    username: ""
    password: ""
  allow_ip_range: []                    # 允许的 ip,可以是 ip 或者 cidr 字符串
  restriction:                          # 代理能够访问的资源限制, 以下各项为空表示不限制
    hostname_allowed: []                # 允许访问的 Hostname,支持格式如 t.com、*.t.com、1.1.1.1、1.1.1.1/24、1.1-4.1.1-8
    hostname_disallowed:                # 不允许访问的 Hostname,支持格式如 t.com、*.t.com、1.1.1.1、1.1.1.1/24、1.1-4.1.1-8
    - '*google*'
    - '*github*'
    - '*.gov.cn'
    - '*.edu.cn'
    - '*chaitin*'
    - '*.xray.cool'
    port_allowed: []                    # 允许访问的端口, 支持的格式如: 80、80-85
    port_disallowed: []                 # 不允许访问的端口, 支持的格式如: 80、80-85
    path_allowed: []                    # 允许访问的路径,支持的格式如: test、*test*
    path_disallowed: []                 # 不允许访问的路径, 支持的格式如: test、*test*
    query_key_allowed: []               # 允许访问的 Query Key,支持的格式如: test、*test*
    query_key_disallowed: []            # 不允许访问的 Query Key, 支持的格式如: test、*test*
    fragment_allowed: []                # 允许访问的 Fragment, 支持的格式如: test、*test*
    fragment_disallowed: []             # 不允许访问的 Fragment, 支持的格式如: test、*test*
    post_key_allowed: []                # 允许访问的 Post Body 中的参数, 支持的格式如: test、*test*
    post_key_disallowed: []             # 不允许访问的 Post Body 中的参数, 支持的格式如: test、*test*
  queue:
    max_length: 3000                    # 队列长度限制, 也可以理解为最大允许多少等待扫描的请求, 请根据内存大小自行调整
  proxy_header:
    via: ""                             # 是否为代理自动添加 Via 头
    x_forwarded: false                  # 是否为代理自动添加 X-Forwarded-{For,Host,Proto,Url} 四个 http 头
  upstream_proxy: ""                    # 为 mitm 本身配置独立的代理

# 基础爬虫配置
# 更多解释见 https://docs.xray.cool/#/configration/basic-crawler
basic-crawler:
  max_depth: 0                          # 最大爬取深度, 0 为无限制
  max_count_of_links: 0                 # 本次爬取收集的最大链接数, 0 为无限制
  allow_visit_parent_path: false        # 是否允许爬取父目录, 如果扫描目标为 t.com/a/且该项为 false, 那么就不会爬取 t.com/ 这级的内容
  restriction:                          # 爬虫的允许爬取的资源限制, 为空表示不限制。爬虫会自动添加扫描目标到 Hostname_allowed。
    hostname_allowed: []                # 允许访问的 Hostname,支持格式如 t.com、*.t.com、1.1.1.1、1.1.1.1/24、1.1-4.1.1-8
    hostname_disallowed:                # 不允许访问的 Hostname,支持格式如 t.com、*.t.com、1.1.1.1、1.1.1.1/24、1.1-4.1.1-8
    - '*google*'
    - '*github*'
    - '*.gov.cn'
    - '*.edu.cn'
    - '*chaitin*'
    - '*.xray.cool'
    port_allowed: []                    # 允许访问的端口, 支持的格式如: 80、80-85
    port_disallowed: []                 # 不允许访问的端口, 支持的格式如: 80、80-85
    path_allowed: []                    # 允许访问的路径,支持的格式如: test、*test*
    path_disallowed: []                 # 不允许访问的路径, 支持的格式如: test、*test*
    query_key_allowed: []               # 允许访问的 Query Key,支持的格式如: test、*test*
    query_key_disallowed: []            # 不允许访问的 Query Key, 支持的格式如: test、*test*
    fragment_allowed: []                # 允许访问的 Fragment, 支持的格式如: test、*test*
    fragment_disallowed: []             # 不允许访问的 Fragment, 支持的格式如: test、*test*
    post_key_allowed: []                # 允许访问的 Post Body 中的参数, 支持的格式如: test、*test*
    post_key_disallowed: []             # 不允许访问的 Post Body 中的参数, 支持的格式如: test、*test*
  basic_auth:                           # 基础认证信息
    username: ""
    password: ""

# 子域名扫描配置,配置解释见 https://docs.xray.cool/#/configration/subdomain
# 注意:该功能仅限高级版用户使用
subdomain:
  max_parallel: 500                     # 子域名探测的并发度
  allow_recursion: false                # 是否允许递归探测, 开启后,扫描完一级域名后,会自动将一级的每个域名作为新的目标
  max_recursion_depth: 3                # 最大允许的递归深度, 3 表示 3 级子域名 仅当 allow_recursion 开启时才有意义
  web_only: false                       # 结果中仅显示有 web 应用的, 没有 web 应用的将被丢弃
  ip_only: false                        # 结果中仅展示解析出 IP 的,没有解析成功的将被丢弃
  servers:                              # 子域名扫描过程中使用的 DNS Server
  - 8.8.8.8
  - 8.8.4.4
  - 223.5.5.5
  - 223.6.6.6
  - 114.114.114.114
  sources:
    brute:
      enabled: true
      main_dict: ""                     # 一级大字典路径,为空将使用内置的 TOP 30000 字典
      sub_dict: ""                      # 其他级小字典路径,为空将使用内置过的 TOP 100 字典
    httpfinder:
      enabled: true                     # 使用 http 的一些方式来抓取子域名,包括 js, 配置文件,http header 等等
    dnsfinder:
      enabled: true                     # 使用 dns 的一些错误配置来找寻子域名,如区域传送(zone transfer)
    certspotter:                        # 下面的通过 api 获取的了
      enabled: true
    crt:
      enabled: true
    hackertarget:
      enabled: true
    qianxun:
      enabled: true
    rapiddns:
      enabled: true
    sublist3r:
      enabled: true
    threatminer:
      enabled: true
    virusTotal:
      enabled: true
    alienvault:
      enabled: true
    bufferover:
      enabled: true
    fofa:
      enabled: false
      email: ""
      key: ""
    ip138:
      enabled: true
    myssl:
      enabled: true
    riskiq:
      enabled: false
      user: ""
      key: ""
    quake:
      enabled: false
      key: ""
    baidu:
      enabled: true
      page_limit: 12
    yahoo:
      enabled: true
      page_limit: 12
    sogou:
      enabled: true
      page_limit: 12
    google:
      enabled: true
      page_limit: 12
    bing:
      enabled: true
      page_limit: 12
    ask:
      enabled: true
      page_limit: 12

使用burp进行联动

在实际测试过程中,除了被动扫描,也时常需要手工测试。这里使用 Burp 的原生功能与 xray 建立起一个多层代理,让流量从 Burp 转发到 xray 中。

首先 xray 建立起 webscan 的监听

 .\xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output proxy.html

进入 Burp 后,打开 User options 标签页,然后找到 Upstream Proxy Servers 设置。

点击 Add 添加上游代理以及作用域,Destination host处可以使用*匹配多个任意字符串,?匹配单一任意字符串,而上游代理的地址则填写 xray 的监听地址。

image20240620110511049.png

接下来,在浏览器端使用 Burp 的代理地址

image20240620105843784.png

此时,请求已经通过了 Burp

image20240620110442504.png

转发到了 xray 中

image20240620110557256.png

至此,联动成功。

       

转载时请注明出处及相应链接。

本文永久链接: http://www.baigei.com/articles/xway-install