目录
1. 概述
当涉及到MSSQL与Oracle时,Out-of-Band 注入是非常好的方式。但MySQL注入的情况并非如此。我们可以利用诸如load_file() 和 select…into之类的函数来outfile/dumpfile。除此之外,我们还可以窃取NetNTLM哈希或者进行SMB中继攻击。这所有的一切都只能在Windows环境下的MySQL中实现。
什么是 Out-of-Band 注入?
这些攻击涉及除了通过除服务器提取数据之外的其他方式,可能是HTTP(S)请求、DNS解析、文件系统、电子邮件等,具体取决于后端实现的功能。
2.MySQL中的限制条件
MySQL中有一个名为secure_file_priv的全局系统变量。这个变量用于限制数据导入和导出操作造成的影响,例如由LOAD DATA 和SELECT…INTO OUTFILE语句和LOAD_FILE()函数执行的操作。
如果变量设置为目录的名称,则服务器会将导入和导出操作限制在跟这个目录中一起使用。这个目录必须存在,服务器不会自己创建它。
如果变量为空,则不会产生影响,引起不安全的配置。
如果变量设置为NULL,那么服务器就会禁用导入和导出操作。这个值从MySQL 5.5.53版本开始允许。
在MySQL 5.5.53之前,此变量默认为空,因此我们就可以使用这些函数。但是在5.5.53之后的版本中,NULL值会禁用这些功能。我们可使用其中的一种方法来检查这个变量的值。Secure_file_priv是一个全局变量,它是一个只读变量,你不能在运行时改变它。
select @@secure_file_priv;
select @@global.secure_file_priv;
show variables like “secure_file_priv”;
例如我的MySQL 5.5.34中的默认值为空,我们就可以使用这些功能。
在MySQL 5.6.34版本中,这个值默认是NULL,这将禁用导入和导出操作。
3.解决方案
这里有几个解决方法,可以在5.5.53之后的版本中克服这个问题。
启动mysqld进程,将“-secure-file-priv =”参数设置为空。mysqld.exe –secure-file-priv=
在“my.ini”配置文件中添加条目:secure-file-priv=
查找默认选项的加载顺序和配置文件的路径