- A+
显示不全请点击全屏阅读
有时候为了方便,利用event/trigger调用系统外部命令,可因为安全问题,mysql自身并没有提供相关命令,这里提供个调用系统命令的自定义函数mylab_sys_exec
so文件下载:mylab_sys_exec.so ( mysql5.1.34 测试通过)
加载:
CREATE FUNCTION mylab_sys_exec RETURNS INTEGER SONAME “mylab_sys_exec.so”;
使用:
SELECT mylab_sys_exec (‘CMD’);
源码:
my_bool mylab_sys_exec_init (UDF_INIT *initid, UDF_ARGS *args, char *message );
void mylab_sys_exec_deinit (UDF_INIT *initid );
int mylab_sys_exec (UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error );
my_bool mylab_sys_exec_init( UDF_INIT *initid, UDF_ARGS *args, char *message )
{
if(args->arg_count == 1 && args->arg_type[0]==STRING_RESULT)
{
return 0;
} else {
strcpy( message, “One string type parameter expected”);
return 1;
}
}
void mylab_sys_exec_deinit ( UDF_INIT *initid ){}
int mylab_sys_exec( UDF_INIT *initid , UDF_ARGS *args , char *is_null , char *error)
{
return system (args->args[0]);
}
hi.baidu.com/isno
Marco Ivaldi 几年前曾经发表过一个 raptor_udf2.c,演示了如何利用mysql udf入侵系统,但是这个mysql udf也演示了一个调用系统命令的方式。但是这一插件目前应经不能兼容mysql 5.0+,主要是已经不符合新的mysql udf的规范了,并且没有返回结果。
mysql User-Defined Functions 是 Roland Bouman 开发的一个新的调用系统命令的udf包,其中有三个函数:
sys_exec: 调用系统命令,执行外部程序
sys_get: 返回系统环境变量的值
sys_set: 设置系统环境变量
这一mysql udf 包是兼容mysql 5.0+ ,同时支持linux和windows。但是这一包也有一个问题,执行命令后返回是命令的exit_code ,而不是命令的执行结果。
Bernardo Damele A. G. 针对这一问题做了一个更新包,增加了一个sys_eval函数,这一函数命令执行成功返回执行结果,而如果错误返回NULL。
这里下载补丁: here
lib_mysqludf_sys version 0.0.2 在这里下载 here.
使用实例:
$ wget –no-check-certificate https://svn.sqlmap.org/sqlmap/trunk/sqlmap/extra/mysqludfsys/lib_mysqludf_sys_0.0.3.tar.gz
$ tar xfz lib_mysqludf_sys_0.0.3.tar.gz
$ cd lib_mysqludf_sys_0.0.3
$ sudo ./install.sh
Compiling the mysql UDF
gcc -Wall -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o /usr/lib/lib_mysqludf_sys.so
mysql UDF compiled successfully
Please provide your mysql root password
Enter password:
mysql UDF installed successfully
$ mysql -u root -p mysql
Enter password:
[…]
mysql> SELECT sys_eval(‘id’);
+————————————————–+
| sys_eval(‘id’) |
+————————————————–+
| uid=118(mysql) gid=128(mysql) groups=128(mysql) |
+————————————————–+
1 row in set (0.02 sec)
mysql> SELECT sys_exec(‘touch /tmp/test_mysql’);
+———————————–+
| sys_exec(‘touch /tmp/test_mysql’) |
+———————————–+
| 0 |
+———————————–+
1 row in set (0.02 sec)
mysql> exit
Bye
$ ls -l /tmp/test_mysql
-rw-rw—- 1 mysql mysql 0 2009-01-16 23:18 /
原文:http://blog.csdn.net/cnbird2008/article/details/4922078
Tags:
如果您喜欢我的博客,欢迎点击图片定订阅到邮箱 也可以点击链接【订阅到鲜果】
如果我的想法或工具帮助到了你,也可微信扫下方二维码打赏本人一杯咖啡