MySQL之UDF提权

UDF和dll文件

UDF全称User Defined Function,即用户自定义函数,在MySQL中以加载外部插件(dll文件)的方式来创建函数。

我解释一下dll文件:

dll文件,又指库文件、动态链接库文件,与之相对的是静态库。我们知道,在编写程序经常需要导入其它库文件以使用内置接口或函数,这些接口或函数如果以静态库的方式引入,那么就先把所有需要用到的程序(包括内置接口和函数)链接在一起,再装载到内存运行。

如果是以动态链接库文件(dll)的方式引入,则是先执行主程序,当用到其它程序时,动态加载到内存并执行它。

dll文件具有一些有趣的特点,如果了解操作系统是如何装载与运行程序的,应该很容易理解。

在这里插入图片描述
在这里插入图片描述

MySQL提权的原理就是通过加载能调用shell接口的dll文件,来实现权限的提升。

因此提权需要的条件:

(1)拥有把dll文件写入到MySQL的插件目录的权限。

(2)在MySQL中能创建和删除自定义函数。

获取数据库账户

不过在此得先能掌握一个数据库账户,假设攻击者拿到Webshell,那么他可以查看网站的配置文件(例如config.php),里面含有连接数据库的用户名和密码。

另一种方法是从…\MySQL\data\mysql\user.MYD文件中获取账户的口令密文。

winhex打开user.MYD文件:

在这里插入图片描述
提取其中能拼接成40位长的两段字符串,这两段字符串拼接成的40位字符串就是口令的密文,密文解密后就是明文口令。

在这里插入图片描述

在5.x>=MySQL>=4.1中,口令默认使用的加密方式是mysql native password,,暂时并不清楚是什么加密算法。

在这里插入图片描述

权限要求

不同版本的MySQL对dll文件的存储位置有不同的要求:

(1)如果mysql版本>=5.1,dll文件放置在mysql安装目录的lib\plugin文件夹下。

(2)如果mysql版本<5.1, dll文件放置于c:\windows\system32目录或c:\windows目录下。

确定plugin目录位置:

在这里插入图片描述

如果用Webshell的权限可以直接将dll文件上传到对应的插件目录(要有对应目录的读写权限),这种情况最好,但一般Webshell的权限比较低,所以考虑可以用数据库的root账户把dll文件写入到plugin目录。当然,这也要求root要有对应目录的读写权限。

查看"secure_file_priv"文件系统权限:

在这里插入图片描述

系统变量secure_file_priv的可能值:

(1)NULL:无法导入或导出文件。

(2)(空):可以导入或导出文件。

(3)有具体的目录:只能从这个目录导入或把文件导出到这个目录。

选择dll文件

dll文件本质也是一段程序,程序由指令和数据构成,不同的计算机体系结构,指令系统也不一样,因此dll文件有32位和64位的,有Windows系统和Linux系统的。

查看MySQL自己适合的系统结构(这不是操作系统的体系结构,而是MySQL适合运行在什么操作系统):

在这里插入图片描述

Sqlmap提供了调用shell接口的dll文件,我们可以拿来用。

在这里插入图片描述

不过这个dll文件被加密,需要用sqlmap提供的cloak工具解密一次:
在这里插入图片描述

“-d"表示解密,”-i"表示输入的文件。在输入文件的目录下生成了原生的dll文件。

在这里插入图片描述

写入dll文件

Webshell能直接把lib_mysqludf_sys.dll上传到plugin目录最好,如果不行,再考虑数据库root账户能否对plugin目录有文件导入导出权限,如果这也没有,那么没有办法udf提权。

root写入dll文件:

(1)先dll文件的二进制数据直接写入到plugin目录下:

select 0x4D5A90....... into dumpfile '(plugin目录/xx.dll)';

在这里插入图片描述
(2)dll文件的二进制数据比较多,复制粘贴到shell时可能卡死,当然可以先create新表,然后把部分数据insert语句到一个字段中,最后再用update语句配合concat()函数把剩下的数据拼接到字段里面的数据后面。

创建函数(加载dll文件)

上传的用于提权的dll文件提供了两个函数:sys_eval和sys_exec,区别在于sys_eval有返回值,sys_exec没有返回值。

// MySQL创建函数的语句
CREATE FUNCTION 函数名 returns 返回值类型 [soname 'dll文件名'];
// 创建调用shell的函数
create function sys_eval returns string soname 'udf.dll';
create function sys_exec returns string soname 'udf.dll';

在这里插入图片描述
执行函数:
在这里插入图片描述
创建用户并添加到管理员组(提权):

// Windwos的cmd命令:
net user 用户名 [密码] /add
net localgroup administrators 用户名 /add

删除函数:

// MySQL语句
drop function 函数名;

drop function sys_eval;
drop function sys_exec;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值