Linux MySQL提权本质上是利用数据库服务的高权限或配置缺陷,突破文件系统限制,从而获取服务器最高控制权限的过程。UDF提权与利用文件读写函数写入Webshell是最为核心且常见的攻击路径,而防御的关键则在于严格的权限隔离与配置参数的安全加固。

UDF提权原理与实战利用
UDF(User Defined Function)即用户自定义函数,是MySQL提供的一种扩展机制,当攻击者获得数据库的FILE权限或Root权限,且能够将自定义的动态链接库文件(Linux下为.so文件)写入MySQL的插件目录时,即可通过创建自定义函数执行系统命令,从而实现提权。
核心利用条件十分苛刻且明确:数据库用户必须拥有Insert、Create、File等权限;MySQL的配置项secure_file_priv必须为空或指向可写入的目录;攻击者需要知道MySQL插件目录的绝对路径。
在实战中,攻击者通常通过Hex编码将恶意的.so文件(如lib_mysqludf_sys.so)写入数据库,具体操作流程为:先将.so文件转换为十六进制字符串,然后通过SQL语句SELECT 0x... INTO DUMPFILE '/usr/lib/mysql/plugin/lib_mysqludf_sys.so'将其还原,成功写入后,执行CREATE FUNCTION sys_exec RETURNS STRING SONAME 'lib_mysqludf_sys.so'创建函数,随后即可利用SELECT sys_exec('id');等语句执行系统命令,若MySQL服务以root身份运行,攻击者将直接获得服务器的Root权限。
利用弱口令与CVE漏洞进行提权
除了UDF提权,利用数据库弱口令或已知漏洞也是Linux环境下MySQL提权的重要手段,许多运维人员习惯将MySQL的root账号密码设置得过于简单,甚至与系统root密码一致,一旦攻击者通过暴力破解或信息收集获取了数据库的高权账号,即可直接通过MySQL客户端连接数据库。
在特定版本的MySQL中,存在严重的认证绕过漏洞,例如著名的CVE-2012-2122,该漏洞允许攻击者在多次尝试登录时,即便不知道正确的密码,也有一定概率直接通过认证并获得Root权限,对于未及时修补的老旧系统,这一漏洞是致命的,如果数据库配置不当允许了LOCAL INFILE加载,攻击者还可以利用读取本地文件的功能,结合Web应用的漏洞,读取敏感的系统文件如/etc/shadow,进而破解系统用户密码。

文件读写与Web目录渗透
在Web服务器与数据库共存的架构中,利用MySQL的文件读写功能是获取Webshell的有效途径,这主要依赖于INTO OUTFILE语句,当secure_file_priv配置允许写入,且MySQL运行账号对Web目录(如/var/www/html)拥有写权限时,攻击者可以通过SQL语句写入一句话木马。
执行SELECT '<?php eval($_POST[cmd]); ?>' INTO OUTFILE '/var/www/html/shell.php',即可在Web目录下生成恶意PHP文件,一旦文件写入成功,攻击者便可以通过浏览器或管理工具连接该Webshell,进而控制Web站点,并利用服务器上的其他漏洞(如内核提权)进一步提升至系统Root权限,这种方法不依赖于UDF,但严重依赖于文件系统的权限配置,是提权过程中不可或缺的辅助手段。
安全防御与加固策略
针对上述提权手段,构建纵深防御体系是保障服务器安全的根本,首要原则是权限最小化,绝对禁止使用root账号运行MySQL服务,应专门创建一个权限受限的mysql系统用户来运行数据库服务,这样,即使攻击者成功通过UDF或Webshell提权,也只能获得mysql用户的权限,无法直接控制整个系统。
必须严格配置secure_file_priv参数,在my.cnf配置文件中,将其设置为特定的临时目录,或者设置为NULL以彻底禁止MySQL读写文件,这能有效阻断UDF提权中写入.so文件以及Webshell写入的攻击路径。
网络隔离与账号审计同样重要,数据库服务不应直接暴露在公网,应仅允许受信任的应用服务器IP通过防火墙访问,定期审计数据库账号,清理多余的测试账号和弱口令,确保所有应用使用的数据库账号仅具备业务所需的最小权限,避免授予FILE、SUPER、PROCESS等高危权限,保持MySQL版本的及时更新,修补已知的CVE漏洞,是防御自动化攻击的基础保障。

相关问答
问:如何快速判断MySQL服务器是否存在UDF提权风险?
答:可以通过检查MySQL的配置文件(通常是/etc/my.cnf)中的secure_file_priv参数,以及查询SHOW VARIABLES LIKE 'plugin_dir'来获取插件目录路径,如果secure_file_priv为空且插件目录可写,同时当前数据库用户拥有FILE权限,则存在极高的UDF提权风险。
问:如果MySQL被攻陷,如何限制其对系统的影响?
答:最有效的措施是确保MySQL服务以非特权用户(非root)身份运行,这样,即使数据库完全被控制,攻击者也只能获得该普通用户的权限,无法直接读取/etc/shadow或修改系统关键配置,应启用操作系统的Mandatory Access Control(如SELinux或AppArmor),严格限制MySQL进程的文件访问范围。
互动
您在运维过程中是否遇到过数据库权限配置不当导致的安全隐患?欢迎在评论区分享您的加固经验或遇到的问题,共同探讨更完善的安全防护方案。















