一、Xray简介

  xray 是从长亭洞鉴核心引擎中提取出的社区版漏洞扫描神器,支持主动、被动多种扫描方式,自备盲打平台、可以灵活定义 POC,功能丰富,调用简单,支持 Windows、macOS、Linux 多种操作系统,可以满足广大安全从业者的自动化 Web 漏洞探测需求。

二、特色

  • 使用 go 语言编写,跨平台、纯异步、无阻塞,并发能力强,扫描速度杠杠的

  • 提供多种使用方式,调用姿势方便,输入输出非常标准化,极具可集成性

  • 使用 YAML 配置文件非常方便地定义 POC,可以快速扩展扫描能力

  • 全程使用无害 POC 进行探测,在确保能发现漏洞的基础上不会给业务带来严重影响,非常适用于企业内部安全建设

  • 命令行式的免费被动扫描工具,不多见

  • 自备盲打平台,可检测需要反连才能触发的漏洞,如:存储型 XSS、无回显的 SSRF、XXE、命令注入等

  • 更新速度快,用着不爽可以在 github 提需求,很快就能解决(我试过了,是真的)

三、使用人群

  • 白帽子。挖 SRC 必备,打开浏览器挂上代理,然后上网冲浪等漏洞就对了,还不够的话就把代理给你爸妈、给你妹子、给你家猫都挂上

  • 甲方安全建设者。工具在手,天下我有,细粒度配置,高精度扫描,可作为定期巡检、常规扫描的辅助神器

  • 乙方工具开发者。在编写渗透框架或者漏洞扫描框架时,作为扫描探针进行集成,简直是大平台中的小尖刀

四、基于代理的被动扫描

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

1、生成CA证书

  需要注意一下的是,很多时候还会扫到 HTTPS 站点,可能会因为有代理而导致无法访问,或者需要手动确认安全风险。这时候需要我们导入 xray 运行目录下的 ca.crt 证书,关于如何导入 CA 证书,请打开百度搜索 “安装CA证书”。

  在浏览器使用 https 协议通信的情况下,必须要得到客户端的信任,才能建立与客户端的通信。

  这里的突破口就是 ca 证书。只要自定义的 ca 证书得到了客户端的信任,xray 就能用该 ca 证书签发各种伪造的服务器证书,从而获取到通信内容。

【Windows】
.\xray_windows_amd64.exe genca

【Linux】
./xray_linux_amd64 genca

  运行命令之后,将在当前文件夹生成 ca.crt 和 ca.key 两个文件。

  本命令只需要第一次使用的时候运行即可,如果文件已经存在再次运行会报错,需要先删除本地的 ca.crt 和 ca.key 文件。

img

2、安装CA证书

(1)Firefox

  如果使用的是 FireFox 浏览器,它有自己的证书体系。

img

img

(2)其他

  如果使用的是 IE、Chrome、curl 等客户端,建议将 ca 证书安装在操作系统上,请根据不同的操作系统,选择参照下方的教程。

① Windows

  双击 ca.crt,然后按照下图的步骤操作。

imgimgimgimgimgimgimg

② Linux

  将 ca.crt 复制到 /usr/local/share/ca-certificates/,然后执行 update-ca-certificates

sudo cp ca.crt /usr/local/share/ca-certificates/xray.crt
sudo update-ca-certificates

img

③ MacOS

  双击 ca.crt,然后按照下图的步骤操作。

  右上角搜索 x-ray,可以看到一条记录,有一个红叉,被标记为不受信任的。

img

  然后双击这条记录,将 SSL 那一项改为始终信任,然后点击左上角关闭窗口,输入密码授权。

img

④ Android

  可以将 ca.crt 文件传送到手机上,然后打开

  或者参考下面的步骤,将手机配置代理之后,使用浏览器访问 http://xray/ 然后点击下载 ca 证书,然后再安装。

imgimg

⑤ IOS

  可以将 ca.crt 文件传送到手机上,然后点击打开打开。

  或者参考后续的步骤,将手机配置代理之后,使用浏览器访问 http://xray/ 然后点击下载 ca 证书,然后再安装。

img

  然后去设置首页,查看下载的描述文件。

img

  点击右上角安装,输入密码授权。

img

  点击通用设置-关于,在最后一项证书信任设置中,将 Insecure Root CA For X-Ray Scanner 一项的开关打开。

imgimgimg

3、启动代理

  在扫描之前,我们还需要做一些必要的设置

  第一次启动 xray 之后,当前目录会生成 config.yml 文件,选择文件编辑器打开,并按照下方说明修改。(这里我就不改了)

mitm:
...
restriction:
hostname_allowed: # 允许访问的 Hostname,支持格式如 t.com、*.t.com、1.1.1.1、1.1.1.1/24、1.1-4.1.1-8
- testphp.vulnweb.com

img

  因为我们的测试目标站就是 http://testphp.vulnweb.com,增加这个过滤之后,xray 将只会扫描该站的流量,避免扫描到非授权目标站点。

  • 设定漏洞扫描结果的输出,这里选择使用 html 文件输出,所以命令行后面要增加 --html-output xray-testphp.html
--text-output:输出到文本文件中
--json-output:输出到JSON文件中
--html-output:输出到HTML文件中

xray 配置文件中默认不允许扫描 gov 和 edu 等网站,如果想对这些网站进行授权测试,需要移除 hostname_disallowed 的相关配置才可以。严禁未授权的测试!否则后果自负。

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

img

【常见问题】

  • 如何退出?ctrl + c
  • 提示 file xray-testphp.html already exists,可以删除已经存在的报告文件,或者使用一个新的文件名,或者在文件名中加入 __timestamp____datetime__ 将自动替换为实际值。

4、配置代理

(1)Edge

  按照下图的步骤操作

imgimgimg

(2)Chrome

  Chrome 可以使用操作系统的代理配置,同时也可以使用插件控制,这里推荐使用插件,可以更加灵活的去配置代理。

  首先点击 Chrome Store

  然后点击同意相关的协议和权限申请弹框,这样就可以在 Chrome 浏览器的右上角看到一个圆形图标的插件了。

  新建情景模式,命名为 xray,然后 todo todo

img

  选择 xray 模式,这样 Chrome 就会使用 xray 作为代理了。

img

(3)Firefox

  不再赘述

(4)IOS

  按照下图的步骤操作

imgimgimg

(5)Android

  不再赘述

5、开始扫描

  使用浏览器访问自己的pikachu靶场,然后就可以看到 xray 界面开始输出漏洞信息

img

img

五、使用xray基础爬虫模式进行漏洞扫描

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

  • xray 的基础爬虫不能处理 js 渲染的页面,如果需要此功能,请参考 版本对比

1、启动爬虫

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

这可能是最简单最常用的一个功能,就是太长了,体验不太友好,建议常用的同学可以 alias xray="/path/xray webscan --basic-crawler"

  比如对pikachu靶场中的XSS进行扫描

img

img

2、登录后的网站扫描

  如果用的是代理模式,只要浏览器是登录状态,那么漏洞扫描收到的请求也都是登录状态的请求。但对于普通爬虫而言,就没有这么“自动化”了, 但是可以通过配置 Cookie 的方式实现登录后的扫描。

  打开配置文件,修改 http 配置部分的 Headers 项:

http:
headers:
Cookie: key=value

  上述配置将为所有请求(包括爬虫和漏洞扫描)增加一条 Cookie key=value

六、使用xray进行服务扫描

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

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

快速检测单个目标
./xray servicescan --target 127.0.0.1:8009

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

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

10.3.0.203:8009
127.0.0.1:8009

  也可以将结果输出到报告或json文件中

将检测结果输出到 html 报告中
./xray servicescan --target 127.0.0.1:8009 --html-output service.html
./xray servicescan --target-file 1.file --html-output service.html

将检测结果输出到 json 文件中
./xray servicescan --target 127.0.0.1:8099 --json-output 1.json
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
--html-output FILE output xray result to `FILE` in HTML format

  以 tomcat CVE-2020-1938 ajp 协议任意文件读取为例,命令行如下图。

img

七、高级用法

1、启用部分扫描插件

  使用 --plugins 参数可以选择仅启用部分扫描插件,多个插件之间可使用逗号分隔,如:

./xray webscan --plugins cmd_injection --url http://example.com/

  目前提供的插件列表如下:

[+] SQL 注入检测 (key: sqldet):支持报错注入、布尔注入和时间盲注等XSS 检测(key: xss)
[+] 支持扫描反射型、存储型 XSS命令/代码注入检测 (key: cmd_injection)
[+] 支持 shell 命令注入、PHP 代码执行、模板注入等目录枚举 (key: dirscan)
[+] 检测备份文件、临时文件、debug 页面、配置文件等10余类敏感路径和文件路径穿越检测 (key: path_traversal)
[+] 支持常见平台和编码XML 实体注入检测 (key: xxe)
[+] 支持有回显和反连平台检测POC 管理 (key: phantasm)
[+] 默认内置部分常用的 POC,用户可以根据需要自行构建 POC 并运行。可参考:POC 编写文档文件上传检测 (key: upload)
[+] 支持检测常见的后端服务器语言的上传漏洞弱口令检测 (key: brute_force)
[+] 支持检测 HTTP 基础认证和简易表单弱口令,内置常见用户名和密码字典JSONP 检测 (key: jsonp)
[+] 检测包含敏感信息可以被跨域读取的 jsonp 接口SSRF 检测 (key: ssrf)
[+] ssrf 检测模块,支持常见的绕过技术和反连平台检测基线检查 (key: baseline)
[+] 检测低 SSL 版本、缺失的或错误添加的 http 头等任意跳转检测 (key: redirect)
[+] 支持 HTML meta 跳转、30x 跳转等CRLF 注入 (key: crlf_injection)
[+] 检测 HTTP 头注入,支持 query、body 等位置的参数

2、只扫描一个URL

  xray 还提供了方便的只扫描一个 URL 的方式,如:

./xray webscan --url http://example.com/ --json-output out.json

3、配置文件

  xray 还提供了友好配置文件,可以方便地将常用的命令行参数写到配置文件中,避免了每次都要输入一大串参数的痛苦。

  xray 默认会读取运行目录下的 config.yaml 文件作为配置文件,也可以使用 --config 参数指定其他配置文件。

  关于命令行的详细配置可以参考 xray 官方文档

4、反连平台

  xray 在运行时会自动启动反连平台来辅助盲打扫描,可以在配置文件中修改反连平台的配置。目前支持 http 和 dns 两种反连机制,当服务端触发 payload 时 xray 会根据反连平台的状态判断漏洞是否存在。

dns 反连需要启用 root 权限监听 53 端口,并且将域名的 ns 记录指向反连平台的监听地址

5、自定义POC

  xray 支持用户使用 YAML 编写 POC。YAML 是JSON 的超集,也就是说我们甚至可以用 JSON 编写 POC,但这里还是建议大家使用 YAML 来编写,原因如下:

[+] YAML 格式的 “值” 无需使用双引号包裹,特殊字符无需转义
[+] YAML 格式使内容更加可读
[+] YAML 中可以使用注释

  我们可以编写以下的 yaml 来测试 tomcat put 上传任意文件漏洞:

name: poc-yaml-tomcat_put
rules:
- method: PUT
path: /hello.jsp
body: world
- method: GET
path: /hello.jsp
search: world

  这里还要感谢 phith0n 贡献的 xray PoC 生成器,虽然丑陋,但不失文雅。

  将 POC 保存到 YAML 文件后使用 --poc 参数可以方便地调用,如:

./xray webscan --plugins phantasm --poc /home/test/poc.yaml --url http://example.com/

八、使用场景

1、与BurpSuite联动

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

  首先 xray 建立起 webscan 的监听

img

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

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

img

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

img

  此时,请求已经通过了 Burp

img

img