/** 鼠标样式 **/

udf提权

参考资料:
https://blog.csdn.net/qq_44159028/article/details/121193134

UDF提权
有时候我们通过一些方式获取了目标主机mysql的用户名和密码,并且可以远程连接。我们远程登录上了mysql服务器,这时,我们想通过mysql来执行系统命令,此时我们可以考虑使用UDF进行提权。

UDF是什么
UDF(Userdefined function)可翻译为用户自定义函数,其为mysql的一个拓展接口,可以为mysql增添一些函数。比如mysql一些函数没有,我就使用UDF加入一些函数进去,那么我就可以在mysql中使用这个函数了。

使用过MySQL的人都知道,MySQL有很多内置函数提供给使用者,包括字符串函数、数值函数、日期和时间函数等,给开发人员和使用者带来了很多方便。MySQL的内置函数虽然丰富,但毕竟不能满足所有人的需要,有时候我们需要对表中的数据进行一些处理而内置函数不能满足需要的时候,就需要对MySQL进行一些扩展,幸运的是,MySQL给使用者提供了添加新函数的机制,这种使用者自行添加的MySQL函数就称为UDF(User Define Function)。

提权说明
先说明一下UDF提取的先决条件

获取mysql控制权限:知道mysql用户名和密码,并且可以远程登录(即获取了mysql数据库的权限)
mysql具有写入文件的权限:mysql有写入文件的权限,即secure_file_priv的值为空。
什么情况下需使用mysql提权?

拿到了mysql的权限,但是没拿到mysql所在服务器的任何权限,通过mysql提权,将mysql权限提升到操作系统权限
ps:mysql提权获取到的权限大小跟运行mysql所在服务器登录的账号的权限相关,如操作系统以普通用户登录的并启动mysql,经udf提权后也只能获取到系统的普通用户权限。而使用管理员登录操作系统运行mysql,提权后获取的权限则为系统管理员权限。

手动提取

  1. 查看mysql是否有写入文件的权限

show global variables like '%secure%';

secure_file_priv是用来限制load dumpfile、into outfile、load_file()函数在哪个目录下拥有上传和读取文件的权限。如下关于secure_file_priv的配置介绍

secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
如下,代表mysql有写入的权限
image
如果secure_file_priv的值不是这个,我们可以在mysql/my.ini中查看是否有secure_file_priv 的参数,如果没有的话我们就添加 secure_file_priv = ' ' ,然后重启apache服务即可生效。

  1. 上传UDF 的动态链接库文件

动态链接库就是实现共享函数库概念的一种方式,在windows环境下后缀名为.dll,在linux环境下后缀名为.so 。我们要将该文件放在特定的目录中,该文件中包含了执行系统命令的一些函数

Mysql版本大于5.1,udf.dll文件必须放在MySQL安装目录的lib\plugin文件夹下。(plugin文件夹默认不存在,需要创建)。
Mysql版本小于5.1:
如果是 win 2000 的服务器,我们则需要将 udf.dll 文件导到 C:\Winnt\udf.dll 下。
如果是 win2003 服务器,我们则要将 udf.dll 文件导出在 C:\Windows\udf.dll 下。

  1. 创建自定义函数

上传之后,使用如下命令创建自定义函数

CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';

然后使用命令查看是否新增了sys_eval函数
image

select * from mysql.func;

  1. 执行系统命令

到这里创建成功那么就可以执行系统命令

select sys_eval('whoami')
image

总结
udf提权通过在mysql中添加自定义函数来执行系统命令。效果是从 mysql权限 —> 系统权限

提权限制条件挺多,如下

先获取mysql的权限(连接上了mysql数据库)
Mysql版本大于5.1,我们需手动创建plugin文件夹,这是个棘手的问题
mysql有写入文件的权限,即secure_file_priv的值为空

posted @ 2024-05-25 21:45  aliex23k65  阅读(42)  评论(0)    收藏  举报