mysql资料:mylab_sys_exec UDF调用mysql外部系统命令

  • A+
所属分类:Seay信息安全博客

显示不全请点击全屏阅读

有时候为了方便,利用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:

mysql资料,

如果您喜欢我的博客,欢迎点击图片定订阅到邮箱填写您的邮件地址,订阅我们的精彩内容: 也可以点击链接【订阅到鲜果】

如果我的想法或工具帮助到了你,也可微信扫下方二维码打赏本人一杯咖啡
mysql资料:mylab_sys_exec UDF调用mysql外部系统命令