一文掌握Xray用法


1 工具简介

xray 是长亭科技开发的一款功能强大的安全评估工具,由多名经验丰富的一线安全从业者呕心打造而成,主要特性有:

  • 跨平台:使用Go语言开发,支持Windows、Linux和Mac主流平台,包括arm架构。
  • 检测速度快:发包速度快; 漏洞检测算法效率高。
  • 支持范围广:大至 OWASP Top 10 通用漏洞检测,小至各种 CMS 框架 POC,均支持。
  • 高级可定制:通过修改配置文件可以定制化功能。

目前支持的漏洞检测类型包括:

  • XSS漏洞检测 (key: xss)
  • SQL 注入检测 (key: sqldet)
  • 命令/代码注入检测 (key: cmd-injection)
  • 目录枚举 (key: dirscan)
  • 路径穿越检测 (key: path-traversal)
  • XML 实体注入检测 (key: xxe)
  • 文件上传检测 (key: upload)
  • 弱口令检测 (key: brute-force)
  • jsonp 检测 (key: jsonp)
  • ssrf 检测 (key: ssrf)
  • 基线检查 (key: baseline)
  • 任意跳转检测 (key: redirect)
  • CRLF 注入 (key: crlf-injection)
  • Struts2 系列漏洞检测 (高级版,key: struts)
  • Thinkphp系列漏洞检测 (高级版,key: thinkphp)
  • XStream 系列漏洞检测 (key: xstream)
  • POC 框架 (key: phantasm)

其中 POC 框架默认内置 Github 上贡献的 poc,用户也可以根据需要自行构建 poc 并运行。xray 不开源,社区版免费使用,高级版需要付费使用。

官方网站https://docs.xray.cool

1.1 下载地址

官方GitHub仓库下载
官方安全社区下载

1.2 版本对比

能力\版本社区版高级版商业版(洞鉴)
SQL注入检测
命令注入检测
代码注入检测
反射型XSS检测
目录枚举
文件上传检测
XXE检测
SSRF检测
CSRF检测
基线检查
任意跳转检测
jsonp检测
CRLF注入检测
XStream系列检测
log4j2-rce的检测
Web表单弱口令
http基础认证弱口令
主机扫描/主机指纹识别
模拟浏览器爬虫扫描
Web基础爬虫
代理扫描
自定义yaml插件
反连平台
四种报告输出
子域名收集
shiro反序列化漏洞检测
ThinkPHP系列检测
fastjson系列检测
Struts2系列检测
DOM型XSS检测
weblogic系列检测
主机服务弱口令
指纹识别
日志扫描
word等渗透测试报告输出
POC漏洞检测使用社区poc或自行编写使用社区poc或自行编写官方维护编写
更新频率不定期不定期日常+应急更新
产品形态软件软件软件+硬件+云

2. 简易架构

扫描工具大致都是由三部分组成:目标输入漏洞检测结果输出

2.1 目标输入

xray定义了5个入口(扫描方式),分别是:

  1. HTTP 被动代理
  2. 简易爬虫
  3. 单个 URL
  4. URL列表的文件
  5. 单个原始 HTTP 请求文件

2.2 结果输出

工具运行时的状态信息和漏洞扫描结果输出:

  1. Stdout (屏幕输出, 默认开启)
  2. JSON 文件输出
  3. HTML 报告输出
  4. Webhook 输出

3. 命令行参数说明

用法:
    [全局选项] 命令 [命令选项] [参数]

命令:
   webscan, ws        运行Web扫描任务
   servicescan, ss    运行服务扫描任务
   subdomain, sd      运行子域名枚举任务
   poclint, pl, lint  检查poc格式
   burp-gamma, btg    将burp历史代理记录的导出文件转换为POC格式
   transform          转换v1版本poc为v2版本
   reverse            以独立的反连平台服务运行
   convert            将结果从json转换为html或从html转换为json
   genca              生成CA证书和密钥文件
   upgrade            检查更新并自动升级
   version            显示版本
   x                  一个启用所有插件的命令。可以在配置文件中自定义新命令或修改由命令启用的插件。
   help, h            显示命令列表或一个命令的帮助

全局选项:
   --config FILE      加载配置文件(默认值:“config.yaml”)
   --log-level value  日志级别,可选择调试、信息、警告、错误、致命
   --help, -h         显示帮助信息

4. 使用方法

xray的扫描方式分为被动扫描主动扫描服务扫描

4.1 被动扫描(Passive scanning)

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

首次使用时运行:.\xray_windows_amd64.exe genca生成证书,直接运行.\xray_windows_amd64.exe同样也会生产证书。然后安装生成的ca.crt证书即可扫描使用HTTPS协议的web服务。
常用命令有:

  • 监听本地7777端口,按日期生成html报告:xray_windows_amd64.exe ws --listen 127.0.0.1:7777 --ho __datetime__.html
  • 开放7777端口,所有人均可使用:xray_windows_amd64.exe ws --listen 0.0.0.0:7777 --ho __datetime__.html

4.2 主动扫描

主动扫描常用命令有:

  • 扫描单个Url:xray_windows_amd64.exe ws -u http://dvwa.com
  • 扫描URL列表的文件:xray_windows_amd64.exe ws --uf url.txt
  • 简单爬虫扫描: xray_windows_amd64.exe ws --basic http://dvwa.com --ho test.html
  • 浏览器爬虫扫描(需要下载rad): xray_windows_amd64.exe ws --browser http://dvwa.com
  • 扫描单个原始HTTP请求文件: xray_windows_amd64.exe ws --rr url.txt
  • 扫描单个原始HTTPS请求文件: xray_windows_amd64.exe ws --rr url.txt --fs
  • 扫描Burp导出的HTTP请求文件: xray_windows_amd64.exe ws --bf file
  • 使用指定Poc扫描: xray_windows_amd64.exe ws -p poc1.yml,poc2.yml -u http://dvwa.com
  • 使用x命令:xray_windows_amd64.exe x -t 192.168.0.1/16,x命令默认启用了所有的插件,包括存活探测、端口扫描、指纹识别等。

主动扫描通常做不登录扫描,如需做登录扫描需要使用原始HTTP请求文件或修改配置文件,并添加有效Cookie。

4.3 服务扫描

目前仅支持CVE-2020-1938和CVE-2023-21839/21931/21979

  • 扫描单个目标: xray_windows_amd64.exe ss -t 192.168.1.94:80
  • 批量扫描: xray_windows_amd64.exe ss --tf serv.txt

5. 配置文件

首次运行会自动生成配置文件和证书,配置文件内有详细的注释,包括一下部分:

  • 全局HTTP发包配置
  • 插件配置
  • 反连平台配置
  • 被动代理配置
  • 基础爬虫配置
  • 子域名扫描配置

6. 高级用法

6.1 Burp+Xray联动

将自动扫描和手工测试互补,弥补单一工具的不足。有两种方式:

  1. Burp做一级代理,Xray做二级代理。经过Burp Proxy组件的流量都会转发到Xray进行被动扫描

    配置方法是在Burp的Proxy组件配置Upstream proxy servers指向Xray:
  2. Xray做一级代理,Burp做二级代理。流量先经过Xray,再经过Burp Proxy组件,可以拦截Xray的流量进行修改。

    配置方法是修改Xray配置文件中全局HTTP发包proxy字段指向Burp Proxy监听地址:

第一种方式可以将Burp插件的流量也转发到Xray,第二种方式可以查看Xray的Payload并进行优化后手工测试,通常调试Xray Poc时可以使用第二种方式。

6.2 Awvs+Xray联动

AWVS的爬虫很强大,支持表单分析和单页应用的爬取,Xray 的扫描能力比较强,速度也更快,二者结合如虎添翼。

在AWVS创建扫描任务时,添加Xray代理地址即可:

6.3 其它工具联动

其它支持代理模式的工具同样可以和Xray被动扫描进行联动,比如dirsearchdirmapsqlmap等工具,具体根据自己需求配置。

6.4 反连平台

默认配置未启用反连平台(DnsLog),因此无法扫描出依赖反连平台的漏洞:

  • SSRF
  • XXE盲注
  • 无回显命令注入
  • 一些反序列化漏洞,如fastjson、Log4j2等

Xray支持2种部署方式:

  • 独立部署
  • 非独立部署

6.4.1 独立部署

需要将xray放置于存在公网IP (或目标可访问的内网)的服务器上,选择此方式部署可供团队使用。

反连平台配置文件示例:

需要配置的项:

  • 反连平台数据库文件位置
  • 设置token,客户端交互和web端登录使用
  • 启用http方法,也可同时启用dns方法
  • 设置监听IP和端口等信息

反连平台启动命令:./ xray_linux_amd64 reverse
Web地址:http://8.130.41.223:8777/cland
扫描器配置文件示例:

需要配置的项:

  • 设置token,需要和反连平台配置文件中的一致,扫描器获取反连结果时使用
  • 启用反连平台客户端
  • 设置http基本地址,启用dns方法时同样需要设置dns服务器地址

主动扫描命令:xray_windows_amd64.exe --config client_config.yaml ws -u http://xxx
其它命令类似

6.4.2 非独立部署

使用非独立部署需要被测目标可以访问Xray所在地址。
该方式已知bug:在添加了DNS后,被动代理模式会出现无法扫描的BUG。
配置文件示例:

需要配置的项:

  • 反连平台数据库文件位置
  • 启用http方法
  • 设置监听IP和端口

扫描命令: xray_windows_amd64.exe ws --listen 127.0.0.1:7777

6.5 Webhook

Webhook是一种应用程序间进行实时通信的方法。Webhook允许一个系统向另一个系统发送信息,通常用来发送通知。如:

  • 邮件通知
  • 短信通知
  • 企业微信群通知
  • 钉钉群通知

官方提供了:https://github.com/chaitin/xray/tree/master/webhook仓库但是没有代码实现,需要自行编程实现。

使用命令:xray_windows_amd64.exe ws -u http://dvwa.com --wo http://127.0.0.1:5000

  • http://127.0.0.1:5000为webhook监听地址
  • Xray会发送如下数据到webhook监听地址

企业微信webhook示例代码:

from flask import Flask, request, jsonify
import requests
from datetime import datetime

app = Flask(__name__)

key = ""  # 填写你的企业微信群webhook key

def wxwork_notify(message):
    url = f"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={key}"
    headers = {'Content-Type': 'application/json'}
    payload = {
        "msgtype": "text",
        "text": {
            "content": message
        }
    }
    response = requests.post(url, json=payload, headers=headers)
    return response.text

@app.route('/', methods=['POST'])
def xray_webhook():
    data = request.json
    # 构造消息内容
    try:
        create_time = data['data']['create_time']
        create_time = datetime.fromtimestamp(create_time/1000).strftime('%Y-%m-%d %H:%M:%S')
    except:
        return jsonify({"status": "failed", "message": "Not Vuln Data"}),400
    try:
        message = f"Xray 漏洞扫描通知\n" \
                f"漏洞类型:{str(data['type'])}\n" \
                f"漏洞地址:{str(data['data']['detail']['addr'])}\n" \
                f"漏洞参数:{str(data['data']['detail']['extra']['param'])}\n" \
                f"Payload:{str(data['data']['detail']['payload'])}\n" \
                f"扫描插件:{str(data['data']['plugin'])}\n" \
                f"发现时间:{create_time}"
    except:
        return jsonify({"status": "failed", "message": "Not Vuln Data"}),400
    
    # 调用企业微信群通知webhook
    res = wxwork_notify(message)
    print(res)
    return jsonify({"status": "success", "message": "Data received"})

if __name__ == '__main__':
    app.run()

使用示例:

7. 自定义Poc

7.1 为什么编写Poc

Poc的内容主要影响的就是扫描的效果,其影响效果可以简单的看作:漏报、误报、危害。

  • 减少漏报
  • 降低误报
  • 降低危害



7.2 Xray Poc的结构

Xray Poc分三个部分:Poc名称、Poc脚本、信息。

信息部分还有其它字段:

7.3 编写Poc

目前官方提供了大量漏洞类型模板,编写更方便。可参考一下资料编写:

8. FAQ

对于异步HTTP请求类型的漏洞暂时无法通过Yaml Poc实现,如CVE-2024-23897。

声明:Hack All Sec的博客|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 一文掌握Xray用法


Hacker perspective for security