注入式

2024-06-17

注入式(精选十篇)

注入式 篇1

关键词:Web应用,SQL,注入式攻击,Web安全

1 引言

分布式Web应用的飞速发展使得软件系统的体系结构在一定程度上由C/S模式偏向于B/S模式,其平台架构大多采用ASP(NET)+SQL+IIS的模式。由于程序编写人员的水平参差不齐,使得很多程序员设计出来的产品存在着各种安全隐患。其中一个常见的安全隐患就是SQL注入式攻击。本文从SQL注入式攻击的原理和方法上进行分析,提出防范的一些解决方法,从而在一定程度上帮助大家解决对SQL注入进行攻击的问题。

2 SQL注入式攻击简介

2.1 相关基础知识

SQL语言是一种用于关系数据库的结构化查询语言。其典型的执行语句是query。它可以修改数据库结构和操作数据库内容。假如攻击者通过往query中插入一系列的SQL语句来操作数据写入到应用程序中去,我们把这种方法定义成SQL注入。SQL注入是一种攻击方式,在这种攻击方式中,恶意代码被插入到字符串中,然后将该字符串传递到SQLServer进行分析和执行。SQL注入攻击技术在国际上最早出现于1999年,2002年后,我国开始大量出现此类问题。它有两种形式,一种是脚本注入式的攻击,另外一种是恶意用户输入用来影响被执行的SQL脚本。

2.2 攻击原理及过程

SQL注入是目前比较常见的针对数据库的一种攻击方式。攻击者从正常的网页端口对网页进行访问,当遇到网页需要查询数据库时,通过把一些含有特殊含义的语句绑定到SQL语句中等方式改变用户的初衷,从而达到攻击者篡改数据等非法的目的。

引言中我们已提到,现在的软件设计平台架构大多采用ASP(.NET)+SQL+IIS的模式。ASP页面客户端和服务器进行数据交流有两种方式。一是客户端向服务器发送请求所采用的POST方式,其特点是不需要在URL中显示,且传输数据量较大;另外一个方面是客户端要从服务器取得数据所采用的GET方式,它需要在URL中显示出来,并受到URL长度限制。传送的数据量很小。

一般ASP.NET的Web应用都有一个登录页面,识别用户的身份与权限。大部分网站的用户登录验证程序都是采用POST方法提交用户名和密码两个参数,登录页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作存储过程的参数,如:

如果用户在输入内容中输入有“1=1”之类的内容,则提交给服务器后,服务器构造出的SQL语句为:

我们看看其执行情况。由于SQL命令实际上已被注入式攻击修改,已经不能真正验证用户身份,所以系统会错误地授权给攻击者。在SQL语句中,“login="&user&"or 1=1”以及“password="&pwd&""or 1=1”均是逻辑“或”的判断。即两个条件中任何一个成立,那么表达式成立,而的1=1是肯定成立的。也就是说整个表达式的值始终成立。这样查询语句就通过了,从而就可以进入到管理界面。

以上是一个利用POST方法实现攻击的例子,实际上利用GET方法实现攻击的应用更加广泛。例如访问某网站的地址如下:

http://www.***.com/showdetail.asp?id=2。如果在地址之后加一单引号。则服务器会报错:

Microsoft JET Database Engine错误'80040e14'

字符串的语法错误在查询表达式“ID=2”中。

/showdetail.asp,行8

从其报错信息,我们分析出,

1)网站使用的是Access数据库,通过JET引擎连接数据库。

2)程序没有判断客户端提交的数据是否符合程序要求。

3)该SQL语句所查询的表中有一名为ID的字段。

从以上信息我们可以简单分析出SQL注入式攻击的一般过程[3]:

1)找到SQL注入点的位置。这是进行SQL注入式攻击的切入点。

2)判断后台数据库的类型。不同的数据库有不同的攻击方法,因此攻击者必须正确判断出后台数据库的类型。目前常用的数据库为ACCESS、SQL-SERVER以及ORACAL。

3)查看XP_CMDSHELL的可执行情况。即:判断当前连接数据的帐号是否具有SA权限,且master.dbo.xp_cmdshell扩展存储过程(调用此存储过程可以直接使用操作系统的shell)能够正确执行。

4)找到Web虚拟目录的位置,上传ASP木马。这一步主要是找到放置ASP木马的位置,进而得到USER权限。然后把木马放入Web虚拟目录的Scripts下,远程客户通过IE就可执行它,进而得到系统的USER权限,实现对系统的初步控制。

5)获得管理员权限。

3 SQL注入攻击防范

在了解了SQL注入式攻击的原理之后,我们将分析如何对其进行防范。综合各方面因素,总结如下:

1)检查输入的SQL语句内容,过滤敏感字符。比如:',>,<=,!,-,+,*,/,|,空格等。

2)加强对用户输入的验证。

这里指检查用户输入的合法性,确信输入的内容只包含合法的数据。总体来说,防治SQL注入式攻击可以采用两种方法,一是加强对用户输入内容的检查与验证;二是强迫使用参数化语句来传递用户输入的内容。在SQLServer数据库中,有较多的用户输入内容验证工具可以抵制SQL注入式攻击。协助管理员管理。

再则,我们可以使用存储过程来验证用户的输入。利用存储过程可以实现对用户输入变量的过滤,比如拒绝一些特殊的符号等等。在以上恶意代码中,只要存储过程把那个分号过滤掉,那么这个恶意代码也就没有用武之地了。在执行SQL语句之前,可以通过数据库的存储过程,来拒绝接纳一些特殊的符号。

另外,通过测试类型、长度、格式和范围来验证用户输入,过滤用户输入的内容。这些都是防止SQL注入式攻击的常见并且行之有效的措施。

3)区分不同帐户的权限。分配给不同类型的用户以不同的权限,可以最大限度的减少注入式攻击对数据库带来的危害。特别是不要用dbo或者sa账户。比如对于普通的终端用户,因为他们是软件是使用者,并不牵涉到对数据库的设计操作,要使其具有最小的权限。那么即使在他们使用SQL语句中带有嵌入式的恶意代码,由于权限的限制,这些代码也将无法被执行。因而也就防止了原本用于执行SELECT命令的地方却被用于执行INSERT、UPDATE或DELETE命令。

4)采用加密机制。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了“消毒”处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了攻击者注入SQL命令。System.Web.Security.FormsAuthentication类有一个HashPasswordForStoringInConfigFile,非常适合于对输入数据进行消毒处理。

5)使用专业的漏洞扫描工具。通过使用一些微软发布的专业漏洞扫描工具,可以帮助我们更好的识别哪些地方将是SQL注入式攻击的着手点。然后程序员再根据其漏洞进行修补完善处理。

6)定期检查IIS日志和数据表。由于攻击程序是通过URI请求字符串来触发,管理员们可以定期检查IIS日志,查看其中的异常请求。如果IIS日志表明服务器可能已经被攻击,那么下一步就要检查相应的Web应用所使用到的数据库中的表格,并找出附加在文本内容中的

上一篇:受威胁程度下一篇:电视养生栏目