mysql udf 执行命令_mylab_sys_exec UDF调用mysql外部系统命令(For linux)

有时候为了方便,利用event/trigger调用系统外部命令,可因为安全问题,mysql自身并没有提供相关命令,这里提供个调用系统命令的自定义函数mylab_sys_exec

so文件下载:mylab_sys_exec.so ( mysql5.1.34 测试通过)

加载:

CREATEFUNCTIONmylab_sys_exec RETURNS INTEGERSONAME"mylab_sys_exec.so";

使用:

SELECTmylab_sys_exec('CMD');

源码:

my_bool mylab_sys_exec_init(UDF_INIT *initid, UDF_ARGS *args,char*message);voidmylab_sys_exec_deinit(UDF_INIT *initid);intmylab_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){return0;}else{strcpy(message,"One string type parameter expected"); return1;}}

voidmylab_sys_exec_deinit(UDF_INIT *initid){}

intmylab_sys_exec(UDF_INIT *initid , UDF_ARGS *args ,char*is_null ,char*error){returnsystem(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 /

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值