SQL数据库注入攻击

2024-10-12

SQL数据库注入攻击(共7篇)

SQL数据库注入攻击 篇1

摘要:随着信息时代的发展以及互联网计算机技术的普及,网络安全逐渐成为了社会关注的重点。现阶段,各行各业的信息化建设使得网络系统管理的地位日益提升,与企业相关的各种数据信息也被储存于强大的网络数据库中。然而这些数据库往往是网络黑客的入侵目标,由此可见信息安全受到了较大的威胁。鉴于此,本文主要分析常见的网络攻击形式,即向SQL数据库中注入攻击,探讨Java Web应用过程中防御措施。

关键词:SQL数据库,攻击,Java Web应用,防御措施

0 引言

现阶段,大部分的网页存在较大的SQL数据库注入漏洞。网络黑客以数据库的漏洞为突破口,凭借着自身拥有的较高计算机技术,通过网络服务器侵入到管理员的服务区域内,从而偷取相关的重要信息数据。在我国,这种网络入侵,盗取资料信息的案例时有发生,严重威胁到了网络信息的安全,违背了相关的法律法规和社会道德。因此,本文对Java Web应用过程中防御措施的探讨具有重要价值。

1 注入攻击机制及SQL结构属性分析

1.1 SQL数据库注入攻击后系统的内部变化

在数据库管理平台系统内存在客户终端和数据终端,很多网络黑客通过客户终端输入一些违反规定的SQL语句,当正常的SQL语句遇到违规语句时会产生一定的混乱,从而降低了数据库系统信息的安全,由此便导致了SQL数据库注入攻击。当SQL数据库注入攻击以后,数据库信息便面临了较大的安全隐患,重要的数据信息很有可能被盗取。当攻击者的目标不是数据库中的信息数据时,很有可能威胁到系统服务器的安全,从而造成更大的损失[1]。

当网络黑客入侵到管理者区域内以后,便取得了一定的网络信息控制权,从而会安装一些威胁信息安全的木马病毒,使得众多的网民信息安全受到威胁。可见,SQL数据库注入攻击以后,其危害领域与范围是较大的,后果不堪设想。

1.2 结构化查询语言的特点

SQL是中文“结构化查询语言”的英文简称,这种语言模式可以为相关的数据库管理编写出一个功能较全的程序化软件,其表达转译的过程主要通过SQL语句完成。SQL数据库语言的功能主要表现在实现数据库之间的信息交流,在接收指令和执行操作的过程中主要以SQL语句指令为标准,从而保证在数据库管理平台发出指令时,数据系统作出相应的反应[2]。

SQL数据库语言与关系型数据库密切相关,这也是一般关系型数据库均使用SQL数据库语言的重要原因。大部分关系型数据库在使用SQL语句时,可以得到较好的程序表达,其在表达过程中受到其它数据库的影响较小。

2 针对性措施分析

2.1 加强客户端与服务端双向检测力度

一般情况下,在检测数据库的过程中,比较注重客户端方面的检测,服务端检测力度不够,相关的保护程序不完善。由此增加了网络黑客侵入的机会,使得SQL数据库注入攻击的可能性增大。因此,为了降低网络攻击的概率,需要在客户端和服务端分别进行检测[3]。

客户检测过程中要注重对攻击可能性的划分以及攻击危害性的规划,对于不同程度的网络攻击,要控制好网络流量,保证服务器的承载处于标准范围内。此外,随着时代的发展以及现代技术的进步,网络黑客的技术水平也越来越高,在实施网络攻击的过程中,会选择避开客户端直接攻击系统服务器。由此可见,加强服务端检测力度是十分必要的。

服务器在检测过程中要对信息保持敏感的嗅觉,即任何形式的可疑信息均要实施抵制,并且进行强制性的停止信息操作。为了保证服务端与客户端的统一性,在服务端出现抵制其信息操作时,要将信息错误的提醒传输到客户端,从而保证可以及时的应对攻击[4]。

2.2 完善数据库基本配置,实施定期更新,保证数据安全

为了保证数据的安全性,需要完善数据库的基本配置,定期更新数据库,并实施最小权利法则标准。软件安装过程中会存在一些账号信息和相关的权限提醒,为了使得数据库的基本配置,即相关软件的安全性,需要及时的将与账户信息安全有关的信息删除掉,从而避免形成网络黑客注入漏洞。

当数据库出现攻击现象以后,系统便感知了内部存在的漏洞,为了避免网络攻击的连发性,官方会提供一些数据库更新补丁,从而填补系统漏洞。数据相关系统在接收更新提醒以后,要进行及时的更新操作,从而提高数据安全。为了加强对系统数据安全性的防范,官方系统可以实施定期更新机制,从而防患于未然。

Java Web应用程序与数据库之间只存在特定的账户权限,通过这种唯一性的设置可以保证在用户完成相关操作以后,网络黑客不会借助其它形式的软件进行再次登录,从而可以保证数据库不会被其它恶意软件所攻击[5]。

2.3 通过对数据库实施编码字符防范,保证内部深层次加护效果

编码字符防范可以实现对数据库的深层次防护,编码字符防范的实质是指在Java Web应用程序实施操作的过程中只能识别出自身设置的编码,在输送过程中会通过既定的编码形成一定的系统识别语句。在实现数据输入的过程中,系统会将数据以编码函数的形式完成到另外一组预定编码字符中的输入,从而不给网络黑客留下追踪编码的机会。

在实施编码字符防范的过程中存在一个较大的问题,即网络黑客的攻击手段也是通过一定的代码破译形式。虽然编码字符在系统实施编制的过程中会表现出一定的复杂性,但是与攻击手段相比,显然还存在一定的差距。函数编码虽然可以实现对数据原有编码的替换,增加编码破译的难度,但是在系统设计编码字符防范的过程中,依然要注意加强编码函数的复杂性,从而增加攻击者入侵的难度[6]。

2.4 建立SQL数据库注入防范系统,确保对接受信息的准确判断

为了加强对SQL数据库的保护,可以选择在客户端与服务端中间部位设置一个区别于一般防范系统的数据库注入防范系统,即SQL数据库注入防范系统是独立于服务器系统本身的特殊系统。SQL数据库注入防范系统的设置目标主要是了抵制病毒的二次入侵,在数据完成传输之前将其分解。

一般情况下,网络系统在完成数据传输的过程中需要遵循一般的HTTP协议,协议内设置了基本的数据传输请求的格式以及服务器发生响应的对应标准,即只有在符合HTTP协议的基础上,网络系统才会完成传输工作。SQL数据库注入防范系统的功能主要为了分析从客户端传入的信息规范性,将HTTP协议内的传输报告内容承包,并加以分析和处理,从而保证系统响应的安全性。

在实现数据传输的过程SQL数据库注入防范系统中包含了解析系统、解码器和语句判断系统,即首先接受到客户端传入的信息请求,将这些信息送入解析系统分析,解析系统主要是对信息的深层分析,从而得到用户的输入部分。在得到用户输入信息以后,将其输送到解码器内,解码器的功能主要是实现不同编码字符的统一转化,即使得输入信息转化成统一的语句,也可以称之为标准语句,这些标准语句的转化一般可以与客户输入信息保持一致[7]。

将标准语句送入到判断系统执行语句的判断,在判断系统没有显示异常时,可以将其运输到Java Web应用服务器中运行。当判断系统出现异常提醒时,说明语句信息存在问题,此时需要及时的抵制,避免其进入到Java Web应用服务器内部。由此可见,SQL数据库注入防范系统可以实现对用户输入信息的精准判断,从而进一步提升数据库安全,防止SQL数据库注入攻击。

3 结论

综上所述,通过分析SQL数据库注入攻击的基本特点以及SQL数据库被攻击以后对数据信息形成的威胁,说明了加强Java Web应用程序的防御功能的必要性。SQL数据库的安全与广大网民信息安全密切相关,因此要提高数据的安全性,加强客户端与服务端的共同检测,完善SQL数据库注入防范系统,同时还要加大编码字符防范的复杂性,从而减少SQL数据库的注入漏洞。

参考文献

[1]吴为团,郑海燕,张锐丽.基于Web应用程序的SQL注入攻击和防范[A].中国通信学会、江西省通信管理局.第十一届中国通信学会学术年会论文集[C].中国通信学会、江西省通信管理局,2015.

[2]张卓.SQL注入攻击技术及防范措施研究[D].上海交通大学,2007.

[3]王剑.基于S2S框架的防汛应急预警系统设计与实现[D].华中科技大学,2013.

[4]隋亮.基于渗透测试的SQL注入漏洞检测与防范[D].东华大学,2014.

[5]赵阳.基于SQL注入的数据安全测评技术研究[D].沈阳工业大学,2012.

[6]杨樱.Web安全与入侵检测技术的研究[D].河南理工大学,2009.

[7]卢俊.SQL注入与XSS攻击防范方法的研究以及防范模型的设计与实现[D].北京邮电大学,2011.

SQL注入攻击与防范 篇2

SQL注入攻击就是向服务器端提交一段事先准备好的数据,拼凑出攻击者想要的SQL语句,以改变程序预期的执行结果。

存在SQL注入漏洞的地方都是程序中需要根据客户端提交的数据来构造SQL语句的地方,也就是说只要程序中存在“客户端数据替换服务端预定义变量”的地方就有可能被注入。

由于服务器端程序通常采用拼凑SQL语句的方式,从而使得攻击者有机会在提交的数据中包含SQL关键字或者运算符,来构造想要的语句。

假设服务器端有这样一条SQL语句:

客户端则通过http://websitename/update.aspx?title=sqlinjectio n的形式向服务器提交用户数据。

开发人员的本意是想通过用户提交的数据“client_title”来更新表“book”中“id”为12的记录中的“title”字段的内容。在正常情况下,这样做不会有任何问题。但是如果攻击者提交http://websitename/update.aspx?title=sqlinjection'--,那么sql语句将被拼凑为:

可以看到,“where”子句被“--”注释掉了,“book”表中“title”列的所有内容都将被更新为“sqlinjection”。

2 S QL注入攻击的危害

SQL注入攻击的目的就是改变SQL语句预期的执行结果。上面的例子就说明了SQL注入攻击的危害-对数据库进行了预期以外的操作,然而这还不是最糟糕的情形。请看下面的例子。

这是在查询数据库中某个表的id字段中符合用户条件的记录的常用方法,而用户条件通常是以查询字符串的形式追加在URL的尾部。在本例中,客户端浏览器会以http://websitename/targetpage.aspx?id=123的形式向服务器端传递id参数,在正常情况下,这样做不会产生任何问题。但对于潜在的攻击者来说,这就是一个可以利用的SQL注入漏洞。如果攻击者在浏览器的地址栏中输入下面的地址:http://websitename/targetpage.aspx?id=123';dropdatabasedatabasename--,然后提交,那么服务器端的sql语句就变成了:

攻击者在正常的查询字符串后面添加了“';drop database databasename-”,先通过“;”来终止当前的sql语句,然后添加了恶意的sql语句-“drop database databasename”,最后通过“--”注释掉语句的其它部分。这样程序在执行的时候会先执行查询,然后删除数据库。

上面的例子中攻击者删除了后台数据库。类似的,攻击者可以利用程序编码中的漏洞,执行一个Join语句,获取数据库中所有的用户名和密码,也可以用Update、Insert语句修改商品的价格,添加新的管理员等等。

如果SQL注入只能通过手动方式进行的话,那么这个过程通常是漫长而烦琐的,使得利用这个漏洞入侵的成本过高,会让一些水平有限的攻击者放弃攻击。但如果使用专门的SQL注入工具情况就大大的不同了,一般手动入侵需要一天乃至更长的时间,而使用工具只需几分钟时间。目前网上最流行的SQL注入工具是NBSI2.0,它使得SQL注入变成了十分小儿科的游戏,哪怕攻击者既不懂ASP也不懂SQL,只需点点鼠标就可以轻松入侵存在漏洞的网站。

3 S QL注入攻击的防范措施

从上面的分析可以看出,SQL注入攻击对网站的危害是巨大的,那么如何防范它呢?我认为可以从以下几个方面入手。

3.1 修改IIS返回的异常信息。

攻击者在进行SQL注入攻击之前大多要通过IIS服务器返回的异常信息来收集和判断服务器端的信息,如数据库类型,连接方式,管理员账户甚至密码等。只要将IIS默认的异常提示页面由500-100改为500即可,这样无论程序运行中出现什么错误都将只提示“HTTP 500”错误,攻击者无法从中获取有用的信息。

3.2 配置网站的执行权限。

通常情况下将网站的权限设为“纯脚本”即可,而不要给以“脚本和可所执行”权限。尤其是对存放通过网站后台管理上传的文件的目录最好将权限设为“无”,这样即使攻击者将木马上传到服务器也无法运行。

3.3 配置数据库权限。

只给访问数据库的web应用程序最低权限,如果public权限足够用就绝对不要赋予sa权限,否则一旦被注入,不但当前数据库被攻击,其它数据库的安全也会受到威胁。

3.4 验证用户提交的数据。

SQL注入之所以能够有机可乘,是因为大多数服务器端代码采用拼凑SQL语句的方式来操作数据库,使得恶意用户可以向服务器提交恶意代码。所以要防止SQL注入就必须要对用户提交的数据进行验证。在TCP/IP这个框架下,开发人员必须假设用户提交的数据都是不可信的,对来自用户的数据进行验证。

对用户数据进行验证的方法有很多,主要包括使用过滤用户数据、存储过程和参数化查询。

SQL注入漏洞的本质是攻击者向服务器提交特殊数据拼凑SQL语句。因此,必须在程序中对来自用户的数据进行过滤。可以从两个方面来考虑,一是只允许合法的数据,假如系统用户名只能由字母数字和下划线组成,那么就可以用[0-9a-z A-Z_]+这个正则表达式来匹配它,如果不符合条件,就拒绝。二是禁止非法的数据,例如禁止用户提交包含有“select”、“update”、“delete”等SQL关键字的数据。

存储过程不但可以防止SQL注入,而且可以使应用程序的速度成倍的增长。但需要注意的是如果存储过程中也存在着由连接字符串组成的SQL语句的话同样也有可能被注入,所以也要对用户提交的数据进行验证。

参数化查询是将用户数据作为一种指定类型的参数提交给数据库,开发人员可以指定参数的数据类型、长度等。程序代码在执行过程中将用户提交的数据作为一个整体进行处理,即使攻击者提交了包含SQL语句的数据,程序也不会视为SQL语句,也就从根本上防止了SQL注入攻击。

3.5 加密存储用户名和密码。

SQL注入有可能向攻击者暴露数据库存储的用户名和密码。如果将用户名和密码加密之后存储,攻击者得到的将仅仅是密文,无法得到真正的用户名和密码。

目前,MD5是最常用的加密方法。简单来说MD5是一种单向加密算法,即用户无法通过密文得到明文。

虽然攻击者也可以通过Update方法来替换密码,但这也是一个相对复杂的工作,增加了攻击者的成本。

3.6 使用SQL注入检测工具。

既然攻击者可以使用工具来提高入侵效率,我们同样可以使用工具来防止入侵。

随着SQL注入攻击的明显增多,微软发布了三个免费工具,帮助开发人员检测存在的漏洞并对可能的攻击进行拦截。

Scrawlr

下载地址:https://download.spidynamics.com/Products/scrawlr/

这是微软和HP合作开发的工具,会在网站中爬行,对所有网页的查询字符串进行分析并发现其中的SQL注入风险。Scrawlr使用了部分HP WebInspect的技术,但只检测SQL注入风险。Scrawlr从一个起始URL入口,爬遍整个网站,并对站点中所有网页进行分析以找到可能存在的漏洞。

下载地址:http://www.microsoft.com/downloads/details.aspx?Family Id=58A7C46E-A599-4FCB-9AB4-A4334146B6BA&displaylang=en

这款被称作MSCASI的工具可以检测源代码并发现其中的SQL注入漏洞,开发人员需要向MSCASI提供原始代码,MSCASI会发现存在风险的代码位置。

URLScan 3.0

下载地址:http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1697

部分加密防御SQL注入攻击 篇3

关键词:系统安全,SQL注入攻击,加密

引言

由于SQL注入攻击针对的是应用开发过程中的编程不严密, 因而对于绝大多数防火墙来说, 这种攻击是“合法”的。SQL注入的主要危害包括:未经授权状况下操作数据库中的数据;恶意篡改网页内容;私自添加系统帐号或者是数据库使用者帐号;网页挂木马等。

1、SQL注入攻击简介

1.1 SQL注入攻击概念

S Q L注入攻击源于英文“S Q L Injection Attack”。SQL注入攻击常见的是对这种攻击形式、特点的描述。由于SQL注入攻击利用的是SQL语法, 使得这种攻击具有广泛性。理论上说, 对于所有基于S QL语言标准的数据库软件都是有效的, 包括MS SQL Server, Oracle, DB2, Sybase, My SQL等。当然, 各种软件有自身的特点, 最终的攻击代码可能不尽相同。

1.2 SQL注入攻击的过程

S Q L注入是从正常的W W W端口访问, 所以目前市面的防火墙都不会对SQL注入发出警报, 只会在IIS日志中留下访问痕迹。一般来说, 攻击者在地址栏尝试输入参数和相应的值, 根据页面的错误提示, 获得有效的信息, 从而实现对数据库进行读取、插入、删除等操作, 或者执行系统的命令。

2、SQL攻击的防御

2.1 常见防御方案

针对SQL攻击的防御, 前人做过大量的工作, 提出的解决方案包括:封装客户端提交信息;替换或删除敏感字符/字符串;屏蔽出错信息;在服务端正式处理之前对提交数据的合法性进行检查等。

封装客户端提交信息的做法需要RDBMS的支持, 目前只有Oracle采用该技术;替换或删除敏感字符是一种不完全的解决措施, 举例来说明他的弱点, 当客户端的输入为“…sselecte selectl selecte selectc selectt…”时, 在对敏感字符串“select”替换删除以后, 剩下的字符正好是“…select…”;屏蔽出错信息的实质是在服务端处理完毕之后进行补救, 攻击已经发生, 只是阻止攻击者知道攻击的结果;数据合法性检查在确认客户端的输入合法之前, 服务端拒绝进行关键性的处理操作。新的攻击方式正在被不断发现, 只要允许服务端程序使用这些提交信息, 就总有受到攻击的可能

针对以上不足, 提出新的解决方案, 即对数据库中的数据进行部分加密, 考虑到数据的存储和运算速度, 采用加密速度快的对称加密, 在此以RC4为加密算法。

2.2 部分数据加密

SQL注入使用的是正常的SQL命令, 并且命令本身不分大小写, 只要能把这些命令屏蔽或转义, 就不能发生攻击, 因此可以采用部分加密的方式, 只加密数据的字符部分, 例如“使用dr OP删除表”中只对“d r O P”进行加密。

使用下面代码可以实现部分加密, 其中RC4 () 函数为实现RC4加密算法, 在此RC4加密过程中密钥长度选择为128位:

经过部分加密后, “使用dr OP删除表”被加密成了“使用82km删除表”, 这样即可不管敏感字符的大小写, 把其转义成其他字符。

3、结束语

由于SQL注入攻击针对的是应用开发过程中的编程不严密, 因而对于绝大多数防火墙来说, 这种攻击是“合法”的。问题的解决只有依赖于完善编程。专门针对SQL注入攻击的工具较少, 数据加密方案只是一种解决办法, 数据库中的数据在存入和取出也要做相应的加密和解密, 以上给出的代码在Windows 2000 Server+SQL Server 2000环境测试通过。

参考文献

[1]李晓吉, 张晓辉, 李祥胜.SQL Server2000管理及应用系统开发[M].北京:人民邮电出版社.2002.

[2]WILLIAM S.Crypotography and Network Security Principles and Practices (3rd Ed) [M].北京:电子工业出版社.2004.

SQL注入的攻击分析与防范 篇4

随着Web应用越来越广泛, SQL注入成为对Web应用攻击的常用手段之一, 并且SQL注入攻击技术也层出不穷, 尤其是网络针对SQL注入漏洞的各种工具也推陈出新, 不断的向安全人员提出挑战, 如何降低SQL注入的风险, 从根本上实施SQL注入防御, 成了安全人员面临的首要问题。

1. SQL注入的原理

所谓SQL注入攻击就是通过构建特殊的输入, 这些输入往往是SQL语法中的一些组合, 这些输入将作为参数传入Web应用程序, 通过执行SQL语句而执行攻击者想要的操作, 它的产生主要是由于程序对用户输入的数据没有进行细致的过滤, 导致非法数据的导入查询。

2. 产生SQL注入原因

从技术上讲, SQL注入主要有代码层注入和平台层注入, 代码层是因为应用的程序员对输入的过滤不严格, 执行了非法的数据查询;平台层的注入则因为数据库平台的漏洞或数据库配置不安全等原因造成的。因此SQL注入的产生一般体现在:转义字符处理不当、类型处理不当、查询集处理不当、错误处理不当、多个提交处理不当和数据库配置不安全这几个方面。

3. SQL注入技术

对一些存在SQL注入漏洞的应用来说, 利用这些漏洞, 攻击者可以窃取用户数据, 提升权限等, 根据注入方式的不同, 注入技术主要有以下几种:

3.1 使用特殊的字符

不同的SQL数据库有很多不同的特殊变量和特殊字符, 利用一些过滤不严格或配置不安全的应用系统可以获取到一些有用的信息, 为进一步攻击提供了方向。比如使用注释、单引号、数据库的变量、存储过程等方式。

3.2 使用Union查询数据

可以使用Union连接两条或多条查询语句的结果。通过一个查询后面注入Union运算, 并添加另一个查询便可以读到用户访问过的任一张表, 得到攻击者想要的信息。

3.3 使用条件语句

该方法主要有三类:基于时间、基于错误、基于内容。这类方法主要是在正常访问后加上条件语句, 根据返回的信息判断被攻击的目标。

3.4 强制产生错误

其攻击动机是识别数据库的类型和版本等信息等。该类型的攻击其实是攻击的一个预备步骤, 用于为其他类型的攻击收集信息, 包括数据库的类型和结构。通过应用程序服务器返回的默认错误信息获得漏洞信息。

3.5 参数拆分与平衡技术

分解合法输入的操作称作拆分, 平衡则保证最终的查询中不会包含不平衡的单引号。这是一种SQL注入常用的技术。基本思想是收集合法的请求参数, 之后使用SQL关键字进行修改以保证与原数据不同, 但是当数据库解析时, 二者是等价的。

3.6 推断技术

可以识别可注入参数、提取数据或确定数据库模式。该种类型的攻击利用网站对用户的输入的返回信息, 推导数据库模式和可注入参数。该类型的攻击构造的查询执行后得到的答案有两种:真或假。基于推断的注入方法:盲注入和时间测定注入。对于盲注入方法有经典的“and l=l”和“and l=2”注入。而时间测定注入则是在注入语句中加入像“waitfor 100”这样的语句, 根据该查询结果出现的时间来判定是否能注入、注入是否成功以及推导数据值的范围。这些方法都是通过问一些相关但并非直接且能得到回应的问题, 从响应信息推出想要的信息, 进而进行攻击。

3.7 使用非主流通道技术

除了HTTP响应之外, 我们可以使用通道来获取数据。但是通道依赖于数据库支持的功能, 并不适合所有的数据库平台。SQL注入的非主流通道一般有:数据库连接、DNS、E-MAIL等, 其基本思想是先将SQL查询打包, 然后利用非主流通道将结果返回给攻击者。

3.8 避开输入过滤技术

在一般的编码或平台本身都有一些过滤手段来防范SQL注入, 针对这种情况也有很多的方法来绕过过滤。常见的实现该目标的技术有:使用大小写变种、使用SQL注释、使用URL编码、使用动态的查询、使用空字节、嵌套剥离后的表达式、利用截断等。通过这些技术, 输入经过构思的查询, 能绕过响应的过滤, 获取攻击者想要的查询结果。

3.9 利用存储过程

数据库厂商用一些标准存储过程来扩展数据库的功能并允许其与系统交互, 或者用户会自定义一些存储过程。通过其他类型攻击搜集到数据库的相关信息 (数据库类型) 后, 就可以构造执行存储过程的命令。与附带查询攻击相同, 该攻击可以实现特权扩张、拒绝服务以及执行远程命令。

4. SQL注入防范

了解了SQL注入的技术, 如何能修复SQL注入?如何进一步防范SQL注入的泛滥?本文主要从两个方面来防范SQL注入, 一是代码层的防范, 一是平台层的防范。通过一些合理的操作和配置来降低SQL注入的危险。

4.1 使用参数化语句

SQL注入的根本原因之一是将SQL查询创建成字符串然后发给数据库执行。使用参数化语句可以避免很多在应用中常见到的SQL注入问题。不过, 参数化语句是一种向数据库提供潜在的非安全参数 (通常作为查询或存储过程调用) 的方法。虽然它们不会修改传递给数据库的内容, 但是如果正在调用的数据库功能在存储过程或函数实现中使用了动态的SQL, 则也有可能出现SQL注入。

4.2 输入验证

输入验证是指测试应用接收到的输入以保证其符合应用中定义的标准过程。它可能简单到直接是一个参数类型的验证, 也可能复杂到使用正则表达式或者业务逻辑去验证输入。一般有两种不同类型的输入验证方法:白名单验证和黑名单验证。

4.3 编码输出

除了验证应用程序接收的输入外, 经常需要对程序各模块之间或者各部分之间传递的内容进行编码。在存在SQL注入的环境中, 为了保证传递给数据库的内容不会被错误处理, 则必须进行编码。不过这不是唯一需要进行编码的情形。

4.4 规范化

避开输入验证和编码输出的常用技术就是将输入发送给应用之前对其进行编码, 之后再对其进行解码和解释以符合攻击者的目标。比如单引号有很多种编码方式, 很难预测应用是否按那种方式来解释, 所有就可能绕过验证。由于这个原因, 将规范化作为输入验证方法的一部分。通常最容易的一种方法是拒绝所有不符合规范格式的输入。

4.5 通过设计来避免SQL注入危险

这种方式主要是通过提供许多较高级别的设计技术来避免或减轻SQL注入的危险。有很多独立的设计技术, 比如:使用存储过程以便在数据库层拥有较细的粒度许可技术, 使用数据访问抽象层来对整个应用施加安全的数据访问技术, 以及对敏感信息进行附加的控制等技术。

4.6 使用运行时保护

此技术主要用于检测、减轻或防止那些不需要重编译易受攻击的应用的源代码即可部署的SQL注入。主要是Web服务器和部署框架的软件或是针对Web或应用平台的用于修改和扩展特性的技术。当无法修改代码时, 这是一种有效的技术。常用防范方式是通过部署Web应用防火墙、入侵检测系统、数据库防火墙等进行保护。

4.7 确保数据库安全

使用一些额外的方式强化数据库安全。首先锁定应用数据, 采用最小权限登陆数据库, 撤销不必要的公共许可, 使用强大的加密技术来保护敏感数据并维护审查跟踪。其次锁定数据库, 对额外的系统对象锁定, 约束即席查询, 加强对验证周边严格控制, 最低权限操作系统账户并确保数据库打了最新补丁。

4.8 额外的部署

额外的部署主要包括最小化不必要的信息泄露、配置网络访问控制、独立部署Web应用服务器和数据库服务器、提高Web服务器冗余日志及使用最新漏洞扫描程序排查Web应用等。尤其是不必要的信息泄露, 是一些注入的前提, 因此这些隐藏需要隐藏错误的信息、使用空的默认Web站点、为DNS反向查询使用虚拟主机名称等措施必不可少。

5. 总结

本文总结了一些常见的SQL注入攻击的方式, 提出了一些防范SQL注入攻击的方法, 希望能对一些Web应用在防注入方面提供帮助, 但是新的注入方式层出不穷, SQL注入与防范一直会是Web应用安全方面经久不衰的话题。

参考文献

[1]游悠.SQL注入的一般方法及防御措施.中国科技信息, 2005年第18期:13.

[2]王云, 郭外萍, 陈承欢.Web项目中的SQL注入问题研究与防范方法[J].计算机工程与设计, 2010 (5) :976-978, 1016.

[3]张卓.SQL注入技术与防范措施研究.上海交通大学.上海交通大学.2007, 50-51

SQL注入式攻击与防范 篇5

互联网技术的应用, 很大程度上改变了我们的工作和生活的方式, 我们可以随时在网上办公, 网上购物, 网上学习等, 它在提供给我们便利的同时, 也给我们带来了危机, 公司机密泄露, 银行卡里面的钱不翼而飞, 这些困扰我们的问题, 几乎每天都在发生, 网络安全成为不容忽视的问题。现以常被攻击的网站为例, 针对常见的SQL注入问题, 分析常见攻击类型, 给出解决办法。

1 SQL 注入攻击的原理

SQL注入攻击主要是针对数据库的一种攻击手段。根据具体情况, 分析并构造合理的SQL语句, 通过输入参数, 探测程序漏洞, 并利用这些漏洞, 对数据库进行破坏。凡是程序中构造SQL语句的步骤均存在风险, 如果没有对所使用的参数进行审核, 那就可能被攻击者利用, 通过修改SQL语句的构造, 达到获得权限、破坏数据的目的。一般通过正常的WWW端口访问, 而且表面看起来跟一般的Web页面访问没什么区别。这种攻击方式会绕过防火墙, 网络防护不会阻止其侵入的步伐, 不容易被发现, 只有通过查看IIS日志, 才会发现它的踪迹。

2 SQL 注入的危害

常用的数据库软件有SQL Server、Oracle、MyS QL、DB2等, 这些软件都是基于SQL语言标准的数据库软件, 由于SQL注入攻击都是通过构造SQL语句实施的破坏性行为, 所以所有上述的数据库软件都不可避免的存在被攻击的可能。而且其攻击的行为与所使用的开发语言无关, 理论上, 所有的开发语言都无法避免受攻击的可能。

SQL注入可以轻松通过普通防火墙的拦截, 因此其攻击一般都可以直接访问数据库进而可能获得数据库所在的服务器的访问权, 因此, 危害相当严重。通过对数据库的控制, 非法读取、篡改、添加、删除数据库中的数据, 修改网页上的内容, 盗取用户的各类敏感信息, 获取利益, 私自添加或删除账号达到长期控制的目的。有些网页上甚至被挂上木马, 给用户造成了很大的损失。

3 常见的攻击类型及防范

3.1 防止“错误信息提示”提供信息

SQL注入攻击主要是通过构造SQL语句实现的攻击, 错误信息的提示, 可以给攻击者提供很多有用的信息, 屏蔽错误信息提示虽然不会杜绝注入式攻击, 但是会很大程度上增大攻击的难度。 假定有这 样一个地 址 : : http ://www.xxx.com/Newsdetail.aspx?id=2 , 攻击者可以把其变为http://www.xxx.com/Newsdetail.aspx?id=2’, 服务器会返回出错信息, 如图1所示, 从里面我们可以获得很多的信息, 比如其使用的数据库是Access, 通过JET引擎连接的数据库, 数据里面有一个字段是id, 并且没有对客户端提交的数据进行合法性验证, 这为攻击者进一步攻击提供了帮助信息, 当然注入者还可以通过不同的测试来得到他们想要的信息, 上面只是其中一个例子, 所以我们要限制错误信息的输出, 从而保护我们的数据库数据, 这里我给出.NET限制错误信息的方法:

在Web.Config文件中设置

这就解决了信息泄露的弊端了。

3.2 合理使用数据库账号的权限

数据库为了保证数据的安全, 给我们提供了很多安全策略, 其中权限的设置就可以很好的防止非授权用户得到过大的权限后, 由于操作失误或账号丢失造成的严重后果。有一些SQL注入攻击中可能会包含创建、删除数据库对象的操作, 限制其使用权限, 实际上就可以达到阻止其执行的可能, 如此可以最大限度的减少注入式攻击对数据库带来的危害。

3.3 使用参数化的过滤性语句

很多初级编程者喜欢把用户输入的信息直接嵌入到SQL语句中, 如SELECT * FROM news WHERE newsid =xx, 其中xx是由URL的querystring参数指定的, 如果我们在地址栏上面输入SELECT * FROM news WHERE newsid= 1‘or‘1’=’1, 那么SQL语句就变为"SELECT * FROM newsWHERE newsid = 1 or 1=1, 我们知道1=1是恒成立的, 所以SQL语句就相当于SELECT * FROM news, 这样可以查看所有表里面的信息。如果我们依照其方法, 执行删除表操作的话, 那么就会实现表删除操作。因为有这样的漏洞, 我们要求用户的输入必须进行过滤, 并且使用参数化的语句。拒绝包含二进制数据、转义序列和注释字符的输入内容。测试用户输入内容的大小和数据类型, 强制执行适当的限制与转换, 限制用户输入的长度也可以减少注入时候贴入大量脚本的可能性, 这即有助于防止有意造成的缓冲区溢出, 对于防治注入式攻击有比较明显的效果。参数化命令是在SQL文本中使用占位符的命令。占位符表示需要动态替换的数据, 它们通过Command对象Parameters集合来传送。我们可以将问题SQL语句改写成Select* from news where newsid=@newsid, 如果参数变成11’OR‘1’=’1, 将得不到何记录, 参数化命令的语法随提供程序的不同略有差异。

3.4 使用专业工具扫描漏洞减少可注入点

攻击者经常会使用一些专业的漏洞扫描工具, 目的是找到SQL注入点。我们也可以这样做, 发现问题, 解决问题, 主动把防御动作做好, 这样就不会再给攻击者可乘之机了。

4 总结

SQL注入不但能够破坏数据库中数据, 还可能得到数据库服务器的管理权限, 一个数据库服务器上可能包括很多的数据库信息, 这又对其他的数据造成了威胁, 甚至会影响整个网络的使用安全。所以, 我们应该重视SQL注入安全问题, 把好网络安全防护的第一道门。

摘要:随着互联网的迅速壮大, web应用程序开发已经变成的一个发展的大趋势, 但是由于开发技术的不同以及开发人员的素质良莠不齐, 导致了程序的安全性频频遭到质疑, 经常会爆出网站被攻击的新闻。本文针对常见的SQL注入危害展开讨论, 介绍SQL注入的原理, 常见的SQL注入类型, 以及如何防范SQL注入, 并针对几种攻击类型, 给出解决的办法。

关键词:网站攻击,SQL注入

参考文献

[1]马小婷, 胡国平, 李舟军.SQL注入漏洞检测与防御技术研究[J].计算机安全.2010.

[2]张涛, 王行建.对SQL注入漏洞的研究与防范措施的探讨[J].计算机时代.2006.

SQL注入的“拖库”攻击与防范 篇6

随着Web应用技术的不断成熟,动态网站以其丰富的内容和强大的功能在人们的生活中备受亲睐,各大高校院系、公司企业、政府部门、事业单位等都构建起了自己的动态网站。但由于网站开发人员缺乏安全保护意识,这些网站的安全措施并不是很完善,因此给该类网站造成了很多的安全威胁。从之前的CSDN社区用户信息泄露,到携程网信息安全门事件,再到2015年上半年多省市卫生社保系统出现大量高危漏洞,导致数千万社保用户敏感信息泄露的安全事件,都表明互联网的安全问题愈发严峻,其中SQL注入就是一种日益增长安全威胁。尤其互联网+时代到来,物联网、云计算和大数据应用不断深入, 攻击者利用SQL注入点对网站发起攻击后可以操作网站后台的数据库,拖库攻击导致数据库存储的用户敏感信息泄露,修改甚至破坏数据库内容和结构,对用户生命财产安全造成严重侵害。

1SQL注入攻击技术

1.1SQL注入攻击原理

攻击者通过构建特定长度、类型的字符串动态SQL语句来执行数据库操作,将容易触发SQL异常的代码写入SQL查询语句中,造成SQL所支持数据库异常,然后使用一系列的技术手段实现数据库拖库。

1.2寻找SQL注入点

(1)“加引号”法

单引号作为SQL数据库中的转义字符,其使用不当会造成查询异常。攻击者通常在URL的尾部插入一个单独的引号,造成SQL语句异常而令数据库抛出一个错误信息。例如图1所示。

(2)逻辑语句判断法

“加引号”法直接了当,操作也很方便,但有经验的网站编写者通常对其进行过滤。这样用单引号就无法检测到注入点, 此时可以使用逻辑语句判断检测是否存在SQL注入点。常用的逻辑语句有‘and 1=1’、‘and 1=2’等。

在网页原地址后加入‘and 1=1’语句后,网页会正常显示; 在网页原地址后加入‘and 1=2’语句后,网页会显示异常。例如图2所示。

2利用sqlmap进行拖库攻击

相比于其他工具,sqlmap不仅能利用已经发现的漏洞进行SQL注入,还能通过基于启发式的检测来寻找漏洞。它还能获得不同数据库的指纹信息,并且通过带外连接从数据库中抓取数据,访问底层文件系统和在操作系统上执行命令。

当我们利用之前提到的方法找到一个网站的SQL注入点后,接下来我们将使用一些命令进行SQL注入攻击,来提取网站的数据库内容信息。sqlmap的拖库步骤如下:

第一步:建立连接并列出数据库,如图3所示:

发现该网站数据库共有2个。如图4所示:

这里我们 只需要注 意第一个 数据库就 行了 , 因为information_schema是My SQL默认的数据库,它包含了My SQL系统用的所有字典信息,以及数据库系统中所有对象信息和进程访问、状态信息。而我们需要的网站数据信息保存在第一个数据库中。

第二步:列出目标数据库的表,如图5所示:

我们发现该数据库中共有13个表,其中表名为admininfo的表引起了我们的兴趣,因为这张表中可能存放了数据库的用户名和密码。如图6所示。

第三步:列出指定表的列,如图7所示:

这里我们得到了存放用户信息的passwd和usernamed列信息,如图8所示:

第四步:导出passwd和username的内容信息,导出结果如图9、10所示:

我们发现这个数据库的用户名为admin,但密码字段经过加密算法加密,得到的是密码的HASH值。这里我们不对如何解密做介绍。

通过上述方法,我们成功地利用sqlmap对网站进行SQL注入攻击,并得到了网站的数据库信息。

3SQL注入防范与事后补救措施

3.1如何防范SQL注入攻击

绝大多数的SQL漏洞是由于Web开发者在开发代码时没有彻底理解Web与其数据库之间的交互关系而产生的。下面给出一些常见的预防措施:

(1)使用参数化语句

在构造SQL指令时,采用参数来代替需要写入的数值。在语句传输过程中,数据库不会对参数进行处理,而是在完成解析编译后,才对参数进行操作。就算参数中含有恶意的语句, 数据库也能正常查询。所以,相比起动态SQL,参数化语句更加安全。

(2)验证输入

恶意攻击者往往会通过网站的报错信息来确定服务器、数据库的平台信息等。因此,我们需要检查用户定义的参数并加以过滤,验证输入参数的长度、类型等信息;使用白名单测试用户输入,只接收数据库期望的已知的良好输入。

(3)应用安全策略

例如安装Web应用防火墙来检测及预防SQL注入,并且通过加固数据库来确保数据库安全;对重要的数据库对象实施访问控制,同时对敏感用户数据信息进行加密。

另外,我们在上述方案基础上提出了两点新的预防措施:

(1)使用存储程序代替SQL语句

我们可以将SQL语句从Web应用程序上脱离出来,并把它编写到一个由我们自己定义的存储程序上,该存储程序位于数据库服务器端。通过调用定义的存储程序来代替用户输入字符串构建的SQL语句。

(2)建立异常检测评分机制

对SELECT、DELETE等关键的数据库查询语句进行数值评分,通过计算每个语句的异常值并与设定的异常值做比较, 一旦这个语句的异常值超过设定的最大异常值,那么这个查询语句被视为是异常的,并触发警报。

3.2如何做好事后补救工作

网站被SQL注入攻击后,管理者应当要尽快关闭站点,以免受到二次攻击;调查可疑的SQL注入攻击,分析数字化痕迹, 识别攻击活动;通过取证确定攻击者在系统上执行的操作,检查并理解攻击者恶意查询逻辑,掌握其攻击企图;联系相关的技术人员,对漏洞进行修补,并做好数据恢复工作,将损失减少至最小。

4结论

SQL注入攻击及防御技术的研究 篇7

目前,国内外中小企事业单位及学校的网站多采用基于IIS的ASP编程链接Access或SQL Server数据库的建站模式,但这类网站却时常遭遇到SQL注入攻击,使得非法用户登录、数据库中数据泄露事件时有发生,甚至可能导致系统被黑客控制局面的出现。根据Inperva公司的“监测黑客论坛:ADC每月网络攻击分析(2012-10)”报告显示,在黑客论坛中,SQL注入的讨论话题已然达到19%。SQL注入攻击由于方法简单,修改容易,专用工具较多等特点多为黑客普遍采用,与之相对应,基于ISAPI Filter技术的防御方法也正逐步为网站管理者所使用。管理员只需加载一些库文件即可达到防御SQL注入攻击的目的,而无需更改网站的网页代码[1]。

1 SQL注入攻击技术

1.1 SQL注入攻击方法

SQL注入攻击技术是基于SQL语句的语法规则,使输入后的判断语句值为真即可。该技术主要采用注入式及恶意提交式两种方式。

简单的SQL注入攻击原理为ASP网站在接收用户输入的用户名和密码信息是采用post方式或get方式,语句为select觹from表名where用户名字段=’’’&输入的用户名&’’’and密码字段=’’’&输入的密码&’’’,其后攻击者只需确定攻击位置,并将输入的用户名和密码连接后生成的语句结果值变为“真”即可,也就是要使得where后的判断语句结果为“真”,由此攻击者就能够成功登录。当然,攻击者也可在注入时输入“删除”或“插入”等命令,来对数据库进行破坏。在实施攻击时:

首先,攻击者要测试该网站是否存在可以攻击注入的漏洞,如果数据表接收的是整数,就用整型参数进行判断;如果数据表接收的是字符,就用字符串型参数进行判断,如果网站对输入的字符有了一定的过滤功能,则可采用大小写混合输入、使用UNICODE字符集或ASCII码进行输入。

其次,根据网页显示的信息,判断该网站是否存在可以注入攻击的漏洞,同时判断该网站的数据库类型及服务器系统类型。如果网页显示的错误信息中没有数据库类型,则可根据安装数据库中自带的表名来进行测试,而当了解数据库类型后,便可预测数据库中的表名,此时可先检测表名的长度,进而猜测到表的名称。例如,有些后台管理员表经常使用admin或相关字符作为表名,若如此,则可直接进行检测。

然后,当获取表名后,则进一步获取字段名,可以利用ASCII码进行字符逐个测试,也可直接通过常用字段名如id、username、password等进行测试。

再后,确定XP_CMDSHELL的执行情况,如果可以执行,则将所有数据库内容备份后下载;如果不可执行,则需要进一步提高权限进行攻击。

最后,通过复制CMD创建UNICODE漏洞来控制完整的计算机系统[2]。

1.2 SQL注入工具

SQL注入工具主要有BSQL Hacker、The Mole、Pangolin、Sqlmap等。这些工具中,BSQL Hacker是一个SQL自动注入工具,其初始设计目标是能对任何数据库进行SQL溢出注入,主要支持Bling SQL注入、基于时间的Bling SQL注入、深盲SQL注入及基于错误的SQL注入。Pangolin是一款帮助渗透测试人员进行SQL注入测试的安全工具,并从检测注入开始、直到最后的控制目标系统都已给出了测试步骤。Pangolin则是目前国内使用率最高的SQL注入测试的安全软件。通过常用的注入工具,网站管理员可以查看所管理网站的漏洞,进而实现主动防御。

2 SQL注入攻击的防御

2.1 SQL注入攻击的检测方法

首先,管理员要养成经常查看日志的习惯,若日志文件突然增加或某一IP的访问者经常访问,此时要提高警惕,防止SQL注入攻击。其次,要定期检查数据库文件,通常被SQL注入的数据库中会存在一些临时表,可以通过软件记录管理员的登陆次数及相关信息,以便进一步确定是否发生了SQL注入攻击,同时还要检查网页是否有额外的链接、文件是否被篡改、或者是否存在多余文件。最后,定期查杀木马并检查远程端口是否已经开放,并定期修改管理员密码,包括检查用户状态,如果发现异常,则有可能出现了SQL注入攻击。

2.2 SQL注入攻击的防御

SQL注入攻击的防御首先要实现服务器的良好配置和管理,将一些不必要的端口及用户关闭,在装入SQL SER-VER后,还要尽可能限制SA的权限。管理员的用户名和密码均要实行保密,存储时还要采用加密方法,如MD5加密等;在管理员登录时要设计验证码,同时对登录次数、登录时间也要实施有效限制,并对管理员的权限进行必要约束;在数据库、数据表及字段的设计中,要高度避免使用英文单词、中文拼音等常用内容,防止发生盲注。网站中所有文件的名字也需避免使用常见的文件名及英文单词、中文拼音,防止发生盗链。其次,对用户提交的数据进行过滤分析。该过程主要是对用户输入的内容进行查找,如果发现类似攻击的词语如联合查询语句及SQL中的指令、单引号等就要进行转换,转换成安全的字符,可以采用全角转换的形式,也可以将敏感的字符串全部删除或者提示用户重新输入,而不应包含某些字符。有些黑客会利用网页输入错误后的提示信息来获取其有用的信息。针对此种情况,需要将网页中的出错信息予以屏蔽,可以利用判断语句加入提示信息后直接让页面关闭或跳转的方式来实现。在建立SQL查询时,尽量使用变量来建立连接,避免字符串建立连接。对于管理员尽量不提供写目录的权限。最后,要经常关注SQL注入攻击与防御的最新动态,因为注入的方法和手段均在不断更新,只有长期学习和探索实践才能更好地保护网站,防范信息泄露。

3 基于ISAPI过滤器的防御系统

ISAPI是由微软公司及Process软件公司合作提出的W-eb服务器上的API标准。ISAPI分为ISAPI Server Extension(ISAPI服务器扩展)和ISAPI Filter(ISAPI过滤器)两种类型,应用于IIS类型服务器,文中主要利用ISAPI Filter来进行防止SQL注入的数据过滤。由于ISAPI过滤器开发简单,主要使用Get Filter Version()、Http Filter Proc()、Terminate Filter()三个接口函数实现[3],且开发后无需更改网站固有的程序,而只需将这些库文件加载即可,因此广受网站管理员的推崇和青睐。

目前,基于ISAPI过滤器的防御系统较多,且功能各异,可以采用不同的代码语言来编制辅助程序,以使得系统的防御功能渐臻完善。防御系统的主要设计目标重点表现为数据过滤,可以采用将特殊字符过滤后删除的方法,也可以采用过滤到特殊字符后、再将服务器与浏览器断开的方法,还可以采用特殊字符转换的方法。防御系统的辅助功能则设定为防御配置及遭遇攻击后的检测和处理,通常也包括日志的处理,即当遭遇SQL注入攻击或疑似攻击时,将访问者的IP等相关信息写入日志,同时还要对日志进行备份隐藏,以防系统遭到黑客入侵后改写日志而逃脱管理员的监视与发现。此外,还包括IP地址访问权限的设置、遭受攻击后发送邮件、报警、断开链接等。通过设计基于ISAPI过滤器的防御系统,网站管理员可以有效防御SQL注入对ASP网站的攻击。

4 结束语

SQL注入攻击技术由于其具有杀毒软件难于发现与查杀,方法便捷、且易于学习和使用的特点正被黑客高频使用,一旦网站遭到SQL注入,其产生后果无法预计,轻则导致数据泄露,重则引发服务器瘫痪。所以,掌握针对SQL注入攻击的防御技术十分重要,尤其对于使用ASP编程的网站管理员更应该掌握基于ISAPI过滤器的防御系统的制作方法,并实施定期检测与更新,确保网站的稳定与安全。

摘要:近年来,SQL注入攻击成为黑客攻击网站获取信息的主要技术手段,网站管理员要有效防御攻击就要了解SQL注入攻击的方法并采取相应的措施进行防御。就SQL注入攻击技术、SQL注入攻击的防御及基于ISAPI过滤器的防御系统进行了详细的研究,为有效防御SQL注入提供了方法及手段。

关键词:SQL注入,ISAPI,防御

参考文献

[1]蒙彪,刘俊景.SQL注入攻击的分类防御模型的研究[J].信息技术与标准化,2008(11):17-19.

[2]袁沛沛,王民.SQL注入入侵的特点、实现以及防范[J].世界科技研究与发展,2008,30(3):290-291.

上一篇:草根篮球梦下一篇:高中政治与多媒体应用