SQL注入式攻击分析

时间:2022-06-14 05:22:02

SQL注入式攻击分析

摘要:计算机网络的飞速发展,使得人们对于网络安全越来越关注。随着多起SQL注入式攻击案例的出现。大家已经开始逐步的关心这类问题。该文针对当今的SQL注入式攻击的特点进行阐述。对大家认清SQL注入式攻击有一定的参考价值。

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

中图分类号:TP393文献标识码:A文章编号:1009-3044(2009)14-3587-02

The Analysis of SQL Injection Attacks

LIU Bin

(Panzhihua University, Panzhihua 617000, China)

Abstract: The rapid development of computer networks, making it a growing concern for network security. With the number of cases SQL injection attacks to happen. We have begun to care about these problems step-by-step. for the Features of the current SQL injection attacks, this paper giving us a certain reference value to get to know it.

Key words: Web application; SQL; Injection attacks; Web Security

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长度限制。传送的数据量很小。

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

System.Text.StringBuilder query = new System.Text.StringBuilder(

"SELECT * from Users WHERE login =' '")

.Append(txtLogin.Text).Append("' AND password=' '")

.Append(txtPassword.Text).Append("'");

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

Select * from users where login="&user&" or 1=1and password="&pwd&""or 1=1

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

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

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应用所使用到的数据库中的表格,并找出附加在文本内容中的标签。这里也提醒我们的系统管理员,不能关闭IIS服务器的日志功能,IIS日志对于我们对系统安全的判断将是至关重要的。必须要进行有效的管理。

4 总结

由于SQL注入攻击针对的是应用开发过程中的编程不严密,因而对于绝大多数防火墙,它是不会自动防御的。目前针对这类攻击,专用的工具越来越多。说明大家越来越重视这方面的问题。但是总的来说,检测的工具多,修补的工具无法统一定义。因此,需要各个程序员去不断的完善程序,提高安全意识。

参考文献:

[1] 缪纶,叶茂,王冠华.SQL注入攻击及Web应用安全防范技术研究与实践[J].计算机应用,2009,1.

[2] . SQL注入攻击第三波浪潮袭来.

[3] . SQL注入专题.

[4] Advanced SQL Injection In SQL Server Applications /papers/advanced_SQL_injection.pdf.

[5] More Advanced SQL Injection /papers/more_advanced_SQL_injection.pdf.

[6] . SQL注入攻击及其防范检测技术研究.

上一篇:基于项目课程的Linux实训项目教学设计 下一篇:CICS在银行信用卡系统中的应用