Mysql数据库安全漏洞之越权执行漏洞
作者:安华金和 发布时间:2017-02-01

由于近年来,Mysql的数据库安全漏洞数量逐年增加,安华金和数据库安全攻防实验室(DBSec Labs)对Mysql的漏洞加大了关注,本文将对Mysql的一个典型漏洞进行技术分析,进一步说明数据库漏洞可能带来的安全威胁。

Mysql5.5.5及以上的版本曾被发现了一个整数溢出报错,引起越权执行的安全漏洞。由于5.5.5及以上版本中引入了整数溢出报错机制。该机制在报错信息中会显示部分查询结果,低于5.5.5的版本整数溢出不会显示报错信息(无法利用溢出报错漏洞)。漏洞发现者指出这个漏洞主要是用于SQL注入攻击,但经过研究,我们确认此漏洞的危害远比发现者认为的大。除了前文中提到的几种SQL注入攻击,此漏洞还可以用于在数据库上进行越权访问和对数据库所在操作系统进行非法访问。越权访问无权限表的核心思路是:从文件系统中读取数据库表的内容到可访问的表中。

最直接的方法是利用mysql的load_file函数对本地核心文件做读操作。但在实际应用中往往是通过网站获取的用户不具备FILE权限。不具备file权限的Mysql的用户是无法通过Load_file读文件或者通过into dumpfile 和into outfile去写文件。我们可以要采用迂回的手段,先把想读取的数据库表文件信息读入到数据库中,然后在从数据中去访问。这其中的关键是load data infile函数。

下面用Mysql库下的user(user表负责存储Mysql的账号密码)表给大家做个示例。首先创建一个不具备FILE权限的数据库用户test.去读取user.MYD从其中获取到ROOT账号的加密字符串,然后再通过对加密字符串的破解获得root用户的密码,User表在本地文件中具体体现为USER.MYD。

20170201-1.png

把user.MYD写入test有访问权限的表中:select exp(~(LOAD DATA LOCAL INFILE 'C:\Program Files\MySQL\MySQL Server 5.5\data\mysql/user.MYD' INTO TABLE test2 fields terminated by '')x));

然后执行 select * from test2;

20170201-2.png

至此获取root密码的加密字符串。mysql采用的是md5进行加密。可以通过访问相关网站对加密字符串进行破解,从而得到ROOT的真实密码,最终得到MYSQL ROOT权限,从而达到访问数据库中任意敏感信息的目的,同理其他的表也可以通过类似的手段获得表中的敏感数据信息。

越权访问在多种数据库安全威胁中危害等级极高,在获取了数据库的高权限账户后,获取核心敏感数据对于黑客来说犹如囊中取物般简单。很多数据库安全漏洞并不像其表面看起来简单,很多中级漏洞到了黑客手中完全有可能进阶为高危漏洞,安华金和数据库安全攻防实验室将持续关注并积极发现漏洞,并给予专业的技术分析及防护思路,与大家分享经验。