xray config.yaml 介绍
config.yaml
文件,该文件中的配置项可以直接左右引擎在运行时的状态。通过调整配置中的各种参数,可以满足不同场景下的需求。
在修改某项配置时,请务必理解该项的含义后再修改,否则可能会导致非预期的情况。
漏洞扫描用的代理:proxy
http
, https
和 socks5
三种格式,如:http://user:password@127.0.0.1:1111
多代理配置
proxy_rule
字段来配置。需要注意的是,proxy
配置将优先于本配置。*
,则代表可以匹配所有。所以一定要将 *
放在最后面,上面没有匹配到的域名都将使用这个配置。proxy
的配置。servers
中配置了多个代理服务器,设置权重可以均衡负载,比如权重是 3:7
,则代表每 10 个请求,有 3 个选择 server1,有 7 个选择 server2。要注意的是,这里是 round bin 算法,前 3 个一定发往 server1,后面 7 个一定发往 server2,然后继续循环,不是每个请求都是基于权重随机的。限制发包速度:max_qps
其他配置项
enabled
即为是否启用插件, 其它的配置如果有,则是当前插件的一些特殊配置。鉴于配置文件本身已经有很多注释,这里不做赘述,仅对几个比较特殊的配置展开说明下。
xss
ie_feature
如果此项为 true,则会将一些只能在 IE 环境下复现的漏洞爆出来,小白请不要开。主要包括 expression xss、hidden tag xss、utf-7 和 content type sniffing 导致的 xss (参考链接 中的 3. json
)。include_cookie
如果此项为 true, 则会检查是否存在输入源在 cookie 中的 xssdirscan
depth
深度限制dictionary
配置目录字典, 需要是绝对路径, 配置后将与内置字典合并depth
是探测深度, 默认为 1, 即只在 URL 深度为 0, 和深度为 1 时运行该插件(前提是启用了该插件)定义 http://example.com/,深度为 0,定义 http://example.com/a/, 深度为 1。 在这种配置下,dirscan 将对http://example.com/ 和 http://example.com/a/ 做两次扫描,如果存在 http://example.com/a/example.zip 那么就能将其扫描出来。sqldet
dangerously_use_comment_in_sql
允许检查注入的时候使用注释phantasm
exclude_poc
用于去除加载哪些 poc。一个常见的 case 是如果发现某些 poc 误报比较多,想暂时禁用掉(并反馈给 xray),那么就可以在这一个配置中加上 poc 的名字,比如:include_poc
是用于加载本地的 poc 的配置,最好指定绝对路径,且同样支持 glob 语法。一个稍微复杂的情况是将这两个搭配起来使用,比如:/home/poc/
目录下所有符合 *good-poc*
这个pattern 的poc,同时去掉同样目录下的 poc-fake-good-poc
poc_tags
是用于对内置的POC进行打标签,poc-yaml-test
为poc的name,["HW", "ST"]
为该POC的标签。使用示例如下:
./xray ws --tags ST,HW
这个时候,xray将会加载带有ST标签的POC。注:—tags可以与—level,—poc同时使用xstream
xstream
模块中,有一个特殊选项:full
一般情况下xml
请求是通过POST
方法的Body
发送,但特殊情况下可能会通过普通的某个参数发送。由于这种情况需要发送大量的数据包,所以默认关闭。如果你确定要使用这种测试方法,可以设置full
参数为true
XStream
模块的PoC
和对应CVE
不符,这是正常情况。XStream
历史上有很多的CVE
漏洞,我们的检测逻辑是当某一个版本存在多个CVE
漏洞时,只要能够检测到其中一个漏洞就会输出当前版本存在的所有漏洞由于我们使用反连来确认XStream
漏洞,所以该模块几乎不会产生误报代理启用密码保护
auth
中的配置。xray 支持给代理配置基础认证的密码,当设置好 auth
中的 username
和 password
后,使用代理时浏览器会弹框要求输出用户名密码,输入成功后代理才可正常使用。限制允许使用该代理的 IP
allow_ip_range
项可以限制哪些 IP 可以使用该代理。支持单个 IP 和 CIDR 格式的地址,如:限制访问的端口、路径、Query Key等
port_disallowed: [80,443,90-92]
这样的内容,这样xray的被动代理就不会再对80,443,90,91,92这五个端口的请求进行扫描query_key_allowed: ["id"]
的情况下:情况 | 例子 | xray状态 |
---|---|---|
请求不含任何的 query key | https://docs.xray.cool/ | 扫描会正常进行 |
请求存在一个 query key 且是id | https://docs.xray.cool/?id=1 | 扫描会正常进行 |
请求存在一个 query key 但不是id | https://docs.xray.cool/?page=2 | xray将不会扫描 |
请求存在多个 query key 且包含id | https://docs.xray.cool/?page=2&id=1 | xray将不会扫描 |
query_key_disallowed: ["id"]
的情况下:情况 | 例子 | xray状态 |
---|---|---|
请求不含任何的 query key | https://docs.xray.cool/ | 扫描会正常进行 |
请求存在一个 query key 且是id | https://docs.xray.cool/?id=1 | xray将不会扫描 |
请求存在一个 query key 但不是id | https://docs.xray.cool/?page=2 | 扫描会正常进行 |
请求存在多个 query key 且包含id | https://docs.xray.cool/?page=2&id=1 | xray将不会扫描 |
队列长度配置
max_length
。xray 将每 10s 打印一下当前任务队列长度,一旦堆积的数量达到 max_length
,代理将会 “卡住”,新请求无法通过,等待队列中的请求被处理后再继续生效。默认配置的 10000 表示最多允许堆积 10000 个请求。如果发现队列长度经常变满,可能是扫描速度太慢,可以尝试减少请求超时的时间和增加最大并发请求数,详见 http
配置章节。如果 max_length
设置的过大,会造成 xray 内存占用过大,甚至可能会造成内存不足 OOM 进程崩溃。比如我们假设一个 http 请求加响应为 20kb,那 3000 个请求理论上内存占用至少为 60Mb,实际场景下可能会比理论值还要大很多。更多信息可以参见扫描速度。代理请求头配置: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
,后端实际收到的请求将会是代理的代理:upstream_proxy
http
部分的配置。127.0.0.1:1111
,upstream_proxy
为 http://127.0.0.1:8080
, 那么浏览器设置代理为 http://127.0.0.1:1111
,整体数据流如下:场景分析
http://192.168.1.2:xxx/xxx
,xray 会受到这样的“反连”回来的请求,并将漏洞结果展示出来。${port}
是一个预定义的宏,在运行时将被替换为实际监听的端口, 当然你也可以使用这种方式固定监听的端口:reverse
命令,可以启动反连平台作为一个远程服务运行,给多个客户端使用。db_file_path
和 token
,前者用于存储数据,后者用于服务端和客户端通信的秘钥。一个示例的服务端配置是:管理界面
/cland/
。功能包括尝试一下!
host.docker.internal
作为 http_base_url 的 hostDNS 相关
dig random.domain.com
就可以让 dns 请求到反连平台,否则需要 dig random.domain.com @reverse-server-ip
指定 dns 服务器才可以。本配置项是指有没有配置 ns 服务器为反连平台的地址,用于提示扫描器内部 payload 的选择。config.yaml
中添加如下配置即可禁用更新检查: