数据库安全威胁分析之SQL注入的攻击手法
作者:安华金和 发布时间:2017-01-17

在所有的数据库安全威胁攻击手段中,SQL注入是其中非常典型的攻击方法,也是目前数据库面临的几大主要安全威胁之一。我们希望通过SQL注入是一种常见的入侵WEB应用的手法。SQL注入是利用应用系统的编程漏洞和SQL语言的语法特征,改变原始的SQL语句执行逻辑而产生的。

攻击者向Web应用发送精心构造的输入数据,这些输入中的一部分被解释成SQL指令,改变了原来的正常SQL执行逻辑,执行了攻击者发出的SQL命令,最终使攻击者获取Web应用的管理员权限或者下载了Web应用存到数据库中的敏感信息。

为了让大家加深了解,下面简单地对SQL注入的原理进行示例性说明,如下图是某网站的登录界面:

20170117-1.png

登陆界面中输入用户名:admin 密码admin1234。在Web应用程序后台会把输入和程序混合变成SQL命令去访问数据库。最终Web应用发给后台数据的SQL命令是:

Select * from users where username = 'admin' and Password = 'admin1234'(这个形式)

这个SQL查询要求数据库检查“用户表”中的每一行,提取出每条username列为admin和Password列值为admin1234的记录。如果数据库中WHERE后的条件满足。应用程序将为该用户建立一个通过验证的会话。(Web应用登陆成功)

上面是正常登陆Web应用的过程。如果由于编程的不严谨,用户名或密码输入处存在SQL注入点,攻击者可以利用SQL注入绕过Web应用的登陆访问控制。例如攻击者在用户名处输入admin'-- 密码处可以输入任意值均可通过。

20170117.png

因为,后台实际的SQL语句将演变成:

select * from users where username ='admin'--' and password ='123dq

在SQL Server中“-”等于注释,由于加入了“—”上面的语句等价于

select * from users where username= 'admin'

也就是说只要有用户名为admin。攻击者就可以直接用admin登入到应用系统中。

当然,SQL注入的攻击方法远不止这一种,作者会在以后的文章中介绍更多的攻击实例,并给出相应的防护措施,希望各位可以在了解攻击原理的基础上,找到适用于自己的数据库安全防护措施。