对于上文国内外研究现状进行的深入分析,我们很容易看出,尽管研究者提出了不少关于SQL注入攻击的技术和方法,但是这些方法在使用过程中仍具有某些局限性或者不能正确处理当前的问题。
2.SQL注入攻击技术原理
由于Web服务器的漏洞与程序代码的不严密性,对Web服务器的脚本攻击行为逐渐增多,绝大多数是利用ASP或PHP等脚本注入为主要的攻击方法,加上Web网站的迅速发展,SQL注入逐渐成为攻击的主流。
2.1 SQL语言
SQL(Structured Query Language)即结构化查询语言,于1974年由Boyce和Chamberlin提出。1975至1979年IBM公司研制出著名的关系数据库管理系统原型并且实现了该语言。由于它语言简捷、功能丰富倍受用户及计算机界的好评,被许多软件公司和计算机方面的公司所采用。经各公司的不断修改、扩充及逐步完善,SQL语言最终发展成为一种专门的关系数据库标准语言并成为数据库领域中的主流语言。精通SQL语言是研究SQL注入必备的技能。SQL注入是一种基于数据库语法漏洞的攻击,攻击者通过非法输入进而从数据库中获得访问权限,实现非法入侵、获取密码或删除重要数据等各种非法操作。
2.2 SQL注入攻击原理及流程
根据SQL注入攻击原理的差别,可将SQL注入攻击划分为三种类型:常规注入、字典注入和盲注。
下面将分别介绍常规注入和盲注的实现原理。
(1)常规注入实现原理
常规注入即利用系统的错误信息,从中获取有价值的信息。常规注入的缺点就是在错误信息屏蔽后会失效。下面以http://www.ccb.com/abc.asp?id=12 为例分析常规注入的实现原理。当id是数字类型的参数12时,在Web应用程序中动态生成的SQL查询语句为:select*from table where id=12。以猜想数据库名为例分析SQL注入的攻击原理:
猜解数据库名一般是在URL地址栏中构造特殊的SQL语句:Select*from table where id=12 and db_name()+char(124)--。
Char(124)对应的字符是“|”。在SQL Server 数据库中db_name()的返回值是nvarchar类型的数据库名。系统试图将db_name()返回值从nvarchar类型转换成为int类型,在类型转换过程中一定会出错,出错提示一般是:“将nvarchar值转换为数据类型int列时发生语法错误。”按照上述方法即可获得数据库名字,同样也可以获得数据库表名、类型等信息。
(2)盲注实现原理
盲注是在推理的基础上,通过向服务器请求含有“true/false”逻辑值语句,结合客户端页面响应进而获得想要的信息。通俗的说就是在提交的数据中加入猜想数据到数据库中,如果正确即可返回想要得到的结果,否则继续访问其它数据。
常规注入和盲注有很多相似之处,都是利用一种代码错误使应用程序不加验证的从客户端接收数据并执行SQL查询命令。不同之处即常规注入是发送使服务器产生不合法SQL查询输入,盲注不依赖错误信息,而是攻击者比较不同参数值观察其是否返回相同的结果。盲注是通过暴力猜想的方式实现的,一般采用折半查找办法来提高猜想效率。
综上所述,如果在屏蔽错误信息的条件下,通过盲注方式即可对数据库方式进行检测。
参考文献
[1]. Stephen Thomas.1aurie Williams,Tao Xie.On automated prepared statement generation to remove SQL injection vulnerabilities. Information and Software Technology,2009,32(6):12-38.
[2]. Stenphen Kost.An Introduction to SQL injection attacks for Oracle developers.[EB/OL].http://www.Integrity.corn/papers.htm,2004,69(80):88-120.
[3]. 张少辉, 于来行, 韩秋英. ASP.NET Web应用程序中SQL注入攻击的防范研究[J]. 软件导论, 2012, 11(5):20-23. SQL注入攻击防范文献综述和参考文献(2):http://www.youerw.com/wenxian/lunwen_11117.html