xray & rad

0x01 rad

1.0 简介

rad,全名 Radium,名字来源于放射性元素——镭, 从一个URL开始,辐射到一整个站点空间

一款专为安全扫描而生的浏览器爬虫

下载地址
https://github.com/chaitin/rad/releases

1.1 使用

本工具需要提前装好新版本的 chrome,否则将无法使用

基本使用

rad -t http://example.com

需要手动登录的情况

rad -t http://example.com -wait-login

执行以上命令会自动禁用无头浏览模式,开启一个浏览器供手动登录。 在登录完毕后在命令行界面点击回车键继续爬取。

将爬取基本结果导出为文件

rad -t http://example.com -text-output result.txt

以上命令会将爬取到的URL输出到result.txt中 格式为 Method URL 例:GET http://example.com

导出完整请求

rad -t http://example.com -full-text-output result.txt

导出完整请求为JSON

rad -t http://example.com -json result.json

效果图

1.2 参数配置

rad首次运行后会自动在当前目录生成rad_config.yml配置文件

enable-image-display: false                  # 启用图片显示,适用于需要验证码登录的情况,启用wait-login自动开启
load-wait: 2 # 页面加载完毕后的等待时间,单位秒,网速不佳时可尝试调大该值
exec-path: "" # 启动chrome的路径,为空会自动在默认路径寻找
disable-headless: false # 禁用无头模式
request-config: # 请求头配置
user-agent: "" # 请求user-agent配置
headers: # 请求header配置
- key: "" # header的key
value: "" # header的value
cookies: # 请求cookie配置
- name: "" # cookie的name
value: "" # cookie的value
restrictions-on-urls: # 对爬取的URL的一些限制项
disallowed-suffix: [] # 不允许的文件后缀
disallowed-keywords-in-path-and-query: [] # 不允许的URL关键字
disallowed-domain: [] # 不允许的域名
disallowed-urls: [] # 不允许的URL(正则)
allowed-domains: [] # 允许的域名,起始目标会被自动加入其中
allowed-urls: [] # 允许的URL(正则)
restrictions-on-requests: # 对请求行为的一些限制项
max-concurrent: 10 # 最大页面并发(不大于10)
max-depth: 5 # 最大页面深度限制
max-click-depth: 5 # 一个页面中最大点击深度限制
max-count-of-page: 1000 # 最多爬取的页面数量限制
max-click-or-event-trigger: 1000 # 单个页面中最大点击或事件触发次数(不大于10000)
click-or-event-interval: 1000 # 点击间隔,单位毫秒

0x02 xray

2.1 简介

xray是长亭科技开发,一款基于go语言编写,具有被动扫描和主动探测功能的漏洞扫描器。

2.2 使用

2.2.0 安装证书&配置文件

./xray genca生成证书,安装证书之后可以使用。
配置文件config.yaml在第一次使用后自动生成,可以对配置文件进行编辑以获取个性化的配置以及提升扫描速度等等。

config.yaml
我们可以在plugins中设置扫描哪些漏洞和问题,比如我们只想扫描SQL注入,就可以将一些其他类似基线检查,暴力破解等插件的开关设置为false,可以大大提高执行和扫描效率。

2.2.1 代理模式进行被动扫描

个人认为这个是xray最牛逼,区别于其他扫描器的功能。只需要在浏览器配置好代理,就可以使用其代理模式,无需反复验证身份,即可使用浏览器的cookie,我们需要做的就是对系统不停的点击,尽可能的将流量通过xray代理,xray在后台就可以自动对输入的流量进行抓包和重发,每次重放自动适配不同的payload,从而达到黑盒测试的效果。

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

也可以在burp配置上流代理,将流量同时送到burp和xray。
burp上游代理配置成xray

2.2.2 爬虫模式进行主动扫描

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

  • xray 的基础爬虫不能处理 js 渲染的页面。
./xray webscan --basic-crawler http://testphp.vulnweb.com/ --html-output xray-crawler-testphp.html

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

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

http:
headers:
Cookie: key=value

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

2.2.3 服务扫描

可以使用xray对服务器的各种服务进行扫描,但是目前的poc比较少,而且需要使用者指定IP端口。事实上,针对服务扫描我更推荐goby,nessus等专门扫描IP服务的工具。

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

快速检测单个目标

./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 

2.3 自定义poc

2.3.1 自己编写poc

格式

name: poc-yaml-example-com
rules:
- method: GET
path: "/"
expression: |
response.status==200 && response.body.bcontains(b'Example Domain')

detail:
author: name(link)
links:
- http://example.com

自定义POC语法

根据官方规则编写poc,可以自行使用和贡献社区,贡献社区还可以获取一定的奖励,非常nice。

2.3.2 使用自定义的poc进行测试

在配置文件config.yaml中.

phantasm 是 xray 的 poc 框架,在其下运行着许多 yaml 和 go 写的 poc,用户可以通过该模块编写自己的 poc 并让 xray 加载,具体见后续 自定义POC语法

这里我们先介绍一下它的两个重点配置:

depth: 1                            # 与 dirscan 一样,不再赘述
exclude_poc: [] # 排除哪些 poc, 支持 glob 语法, 如: /home/poc/*thinkphp* 或 poc-yaml-weblogic*
local_poc: [] # 加载本地的 poc, 支持 glob 语法, 如: /home/poc/*CopyErrorCopied

exclude_poc 用于去除加载哪些 poc。一个常见的 case 是如果发现某些 poc 误报比较多,想暂时禁用掉(并反馈给 xray),那么就可以在这一个配置中加上 poc 的名字,比如:

plugins:
...
phantasm:
enabled: true
exclude_poc:
- poc-yaml-bad-poc
- *bad-poc*

local_poc 是用于加载本地的 poc 的配置,最好指定绝对路径,且同样支持 glob 语法。

一个稍微复杂的情况是将这两个搭配起来使用,比如:

plugins:
...
phantasm:
enabled: true
exclude_poc:
- /home/poc/poc-fake-good-poc
local_poc:
- /home/poc/*good-poc*

上述配置的意思是加载 /home/poc/ 目录下所有符合 *good-poc* 这个pattern 的poc,同时去掉同样目录下的 poc-fake-good-poc

2.4 配合其他工具使用

xray配合其他工具进行测试,可以达成非常好的效果。

2.4.1 配合burp

前文也有提及:
在burp配置上流代理,将流量同时送到burp和xray。
burp上游代理配置成xray
这种方式最大的好处可以通过一次点击将流量同时发送到xray和burp,然后xray会进行自动扫描,而我们可以通过target和history对请求进行复现和检查,这样可以人机双线程同时开工,大大提高了我们渗透测试和漏洞挖掘的效率。
target

http-history

logger++

2.4.2 配合AWVS的爬虫

众所周知,AWVS的爬虫功能十分强大,而其检测功能虽然也很强大,但是依赖配置cookie或者配置自动登录,相对而言,不如xray的被动扫描来的简单直接。

我们可以通过使用AWVS的爬虫功能,配合xray的代理被动扫描模式,使两者各显所长。
首先启动 xray 的被动代理,下面的命令将启动一个监听在所有网卡 7777 端口的 HTTP 代理, 并将扫描结果保存在 awvs.html 内。

./xray webscan --listen 0.0.0.0:7777 --html-output awvs.html

以 awvs 13 web 版为例,登入管理页后,点击 Targets, 然后点击 Add Target 添加扫描目标:
比如我们使用AWVS官方提供在线靶站 http://testphp.vulnweb.com

target

然后切换到 HTTP 的部分,填写 xray 的 HTTP 代理。
http-proxy
地址需要根据实际情况填写,需要填写为 awvs 所在机器(容器)内能够访问到 xray 代理的地址。如果 xray 在外网,则填写为外网主机的 IP 地址。端口填写为上面启动时设置的端口号。

其他项可以按需调整或保持默认,然后点击 scan 按钮,按图示选择 Crawl Only 即仅使用爬虫,然后点击 Create Scan 就可以开始扫描了。
crawl

检查 xray 的界面有没有在扫描,如果有类似下图的结果说明工作正常,等待扫描完成即可。完成扫描后,可以在awvs.html看到详细的扫描结果。
扫描结果
html形式

2.4.3 xray+rad爬虫

之前提到为什么使用xray+awvs,主要就是想解决xray自身爬虫的缺陷。针对这个缺陷,长亭xray项目组开发了rad进行进一步的解决。前文已经简单介绍一下rad的使用,其原理也比较容易理解:从一个url开始,爬取其中的内容,对其中存在的url如超链接等,做进一步解析和爬取内容中的url,循环递归进行,从而尽可能获取较为完整的url信息和一些目录信息。

当然,如果说要求像平时渗透测试子域名爆破或者目录爆破一样尽可能完整的信息收集,rad可能无法做到。但是作为一款爬虫软件,就从一个url来获取更多的信息的能力来看,rad有很多可取之处,也解决了xray等扫描软件的痛点——即需要从一个或几个url尽可能多的获取存在的页面,为xray的扫描提供了足够的信息。

社区版:设置上级代理为xray监听地址 运行xray:

xray webscan --listen 127.0.0.1:7777 --html-output proxy.html

运行rad:

rad -t http://example.com -http-proxy 127.0.0.1:7777

高级版对 rad 进行了深度融合,下载后可以一键使用:

xray webscan --browser-crawler http://example.com --html-output vuln.html

rad

xray

效果和awvs+xray类似,但是rad更加原生,配置也比awvs简单非常多,rad+xray就非常nice。可以将xray的扫描能力已主动扫描的方式发挥出来。

文章作者: V0WKeep3r
文章链接: http://v0w.top/2020/12/14/xray_rad/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 V0W's Blog
支付宝打赏
微信打赏