在上一篇文章中,我们为读者详细介绍了通过Microsoft SQL Server执行SQL和OS命令的各种技术,攻击者可以利用这些技术在目标系统上实现恶意荷载的投递和执行。在本文中,我们将针对MySQL数据库来讨论同一主题。
在MySQL服务器上直接通过SQL命令创建可执行文件
在本系列的第一篇文章中,我们介绍过如何利用HEX编码查询,在数据库环境下实现二进制到十六进制的转换。利用这种方法,攻击者就可以通过SQL命令在目标系统上创建有效载荷了。之后,攻击者可以设法把有效载荷从十六进制格式重新转换回二进制可执行文件,如此一来,就能够借助数据库和操作系统的各种功能,使用SQL命令来执行这些有效载荷了。
下面介绍在MySQL服务器的文件系统上创建和执行可执行文件的方法:
方法1——通过SQL执行
下面的示例代码演示了在MySQL服务器上创建和执行动态链接库(DLL)或Linux共享对象(SO)的方法——该方法无需直接访问硬盘:
对于该攻击方法来说,首先会把DLL(将被转换为HEX字符串)加载到一个新建的数据表yongger2(“yongger”音译自中文“勇敢”)中。然后,会使用SELECT FROM TABLE ... INTO DUMPFILE命令将新表中的DLL提取到MySQL插件目录中的cna12.dll文件中。只要插件目录(由plugin_dir系统变量命名的目录)是可写的,那么这个方法就是可行的。
创建DLL后,上面的代码就会通过CREATE FUNCTION命令让MySQL服务器的主进程(mysqld)去新建一个xpdl3()函数。实际上,该函数是一个下载器,用于下载另一个可执行文件。xpdl3()函数会通过HTTP请求从远程服务器(位于中国)下载可执行文件123.exe。然后,在目标文件系统中将123.exe保存为c:\isetup.exe,然后执行该文件,最后将这个文件从磁盘中删除。
下图总结了这种攻击方法的具体过程:
图1:使用SQL命令创建DLL并执行其函数的相关技术
方法2——通过操作系统执行
下面的示例演示了利用文件系统直接将二进制共享对象(SO)写入MySQL plugin_dir的方法:
攻击步骤如下所示:
图2:在Linux OS上创建共享对象并使用SQL命令执行其函数的技术
通过SQL命令将可执行文件下载到MySQL服务器
在Mysql数据库中,通过数据库在服务器上运行命令的方法不多,而用户定义函数(UDF)便是其中之一。这种方法之所以可行,是得益于Mysql数据库允许从外部程序库(例如DLL或Linux共享对象)加载函数。我们将在本系列的下一篇文章中对这种方法进行详细的介绍。
攻击者在服务器的文件系统中上传或创建外部程序库后,就可以执行其函数了。以前,攻击者就经常滥用UDF功能从远程服务器下载恶意程序。
下图展示了这种方法的具体攻击过程:
小结
在本文中,我们为读者详细介绍了通过MySQL数据库执行SQL和OS命令的一些方法,利用这些方法,攻击者能够在目标系统上投递和执行恶意荷载。在本系列的下一篇文章中,我们将为读者介绍可被攻击者用来执行外部和内部侦察以及增加攻击面的相关技术。
[注1] :cURL是一个计算机软件项目,提供了可通过各种协议来传输数据的程序库和命令行工具。