1. 前言
谈到贴近红队攻防、渗透的场景,在国内最热门的工具就是xray了,近期也对xray进行了一些测试和分析,记录整合成一篇文章分享。
2. 安全能力实现分析
2.1 压缩包扫描
压缩文件的扫描,xray的实现有几个细节:
- 字典选择 包含了和域名相关的字典,例如:扫描的目标为
http://www.example.com
,会自动提取出域名example
,生成特定字典如example.zip
、example.rar
发包上 通常压缩文件的大小会比普通文件大上不少(大多数情况,非绝对),实现上,xray会在请求头上增加
Range: bytes=0-xxxx
去限制返回数据的大小。并且会对响应报文进行二次确认(不同于市面上一些目录扫描工具,只根据200状态码判断),黑盒上,我认为有几个点是可以用于判断的
- 状态码,因为通常压缩文件会比较大,且使用Range后,如果数据事超出范围,响应状态码会呈现206
- Content-Md5:会使用该header字段,去告知请求方,这个完整文件的md5是什么样的
- Content-Type:application/octet-stream
- Content-Range: bytes 0-xxxx/xxx,告知当前发送多少,还剩余多少数据
- 响应体,响应体一般为压缩包的数据流,可以根据互联网上公开的格式对其进行验证
目前分析下来发现各压缩文件类型,响应报的Content-Type区别
文件类型 Content-Type zip application/zip rar application/octet-stream
2.2 目录扫描
针对一些常见目录的扫描,部分会发
Range: 0-xxx
,可能是考虑到这些文件如果过大,可能会是虚假内容,列举一些文件类型 xray分类 readme.md dirscan/debug/readme LICENSE dirscan/debug/default web.config dirscan/config/web composer.json dirscan/config/dependence - 区分大小写,有同名但大小写的文件路径,例如:对一个目标扫描README.md,也扫描readme.md
- xray会做递归访问,xray应该有其他引擎,是负责去爬取站点的目录结构的,然后目录扫描会有一些根据传递的目录结构,进行扫描
2.3 漏洞扫描
扫描目标会比较粗暴 例如一个网站是开启apache tomcat的,但是会将php的漏洞进行测试。粗暴的方式意味着会有一些无用流量,但容错率会更高,会在一定程度去解决漏报问题。
存在通用脆弱性匹配引擎 下图中,xray的意图是做一个表达式注入的测试,但下方的响应结果是页面报错。 通过分析来看,xray主动做表达式注入验证,如果存在表达式注入漏洞则会给一个单独的事件类型;同时,会将做表达式注入的响应数据包,给到一个通用的分析引擎去做一些判断。
通用引擎存在同个问题,多次发现的情况
例如下图,一个站点存在网页报错,xray在过程中使用了多个其他漏洞的攻击,然后都触发了同一个报错,会在报告中生成多个事件,其实是比较干扰结果的。
漏洞更倾向无害化处理
举个例子,当漏洞为
文件上传
或者写入
类的漏洞,会在目标主机上遗留数据时,xray会尽力做到无害化。 ``` POST /linux/pages/upload.jsp HTTP/1.1 Host: xxxx:xxx User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0 Content-Length: 132 Content-Type: application/x-www-form-urlencoded filename: xxx.jsp Accept-Encoding: gzip
<% out.println(“ajhdcnigzpwruudszlxyiglsmojwqaoi”); new java.io.File(application.getRealPath(request.getServletPath())).delete(); %> ``` 上述代码解释一下,如果漏洞存在,被访问后验证到会自动触发删除,不会在客户本地落地文件。