SQL注入式攻击方式及防范措施

SQL注入式攻击方式及防范措施

转载于 http://hi.baidu.com/xjzxjym/item/8efed742124798ad60d7b916

谨以此文献给那些网站受害者。。。。。

下面讲讲,如何网页挂马,假如你的大名和形象照出现在哪个人的网站,进行人身攻击,下面就用到了。

1. 概述
网页挂马这个话题想来大家并不陌生。为什么有这么多的网页上存在着木马去攻击普通用户?不可否认,相当一部分网页原本就是恶意的:网页的作者故意在上面放上 木马,然后通过各种手段引诱用户去浏览。但是绝大多数被挂马的网页原本是正常的网页,例如普通的教育网站,购物网站等等,只是网页被攻击者恶意修改后插入 了木马代码。

那么,攻击者是如何能够恶意修改一个正常网页的呢? 换句话说,一个网站是如何被“黑”的?一个最常见的攻击方法是SQL注入(SQL Injection)攻击。事实上,就在今年的五月份,爆发了一次大规模的网页攻击活动【1

】。据估计,约有12万个网页被恶意修改插入木马代码,而攻击者采用的手段就是SQL注入攻击。

那么,什么是SQL注入攻击?攻击者是如何利用SQL注入攻击篡改网页的?Web开发人员又应该如何防范SQL攻击?这就是我们这篇文章要阐述的问题。

2.SQL注入攻击

我们从一个简单的例子【2】开始。下面这段代码用来构造SQL查询命令。
var strUserAccount;
strUserAccount = Request.form ("UserAccount");
var sqlQueryString = "select * from Orders where UserAccount = '" + strUserAccount + "'";
//执行SQL Query …
这段代码很简单:给出UserAccount,查询其对应的订单信息。
例如,如果输入UserAccount值为100,那么构造的查询命令就是:
SELECT * FROM Orders WHERE UserAccount = '100'
从功能上说这段代码非常正确,完全没有任何问题。但是开发人员往往忽视安全方面的考虑:如果用户(攻击者)提供的输入数据是恶意的, 程序的表现行为是什么?

如果是一个不那么友好的攻击者,可能输入UserAccount值为100' or 1=1 --,构造的查询命令就是:

SELECT * FROM Orders WHERE UserAccount = '100' or 1=1 --
执行这个查询命令,就会返回所有用户的订单,导致商业机密信息的泄漏。
如果是一个非常不友好的攻击者,可能输入UserAccount值为100’; drop table orders --,构造的查询命令就是
SELECT * FROM Orders WHERE UserAccount = '100'; drop table orders --
“;”用来分割SQL语句。“--”表明当前行剩余的内容是注释。这段SQL语句的语法是完全正确的,那么一旦执行,就会先执行正常的查询工作,然后删除订单数据库。后果非常严重吧。但这还不是最糟糕的的情况。
如果是一个非常非常不友好的攻击者,可能输入UserAccount值为100’; exec xp_cmdshell(‘fdisk.exe’) --,构造的查询命令就是
SELECT * * FROM Orders WHERE UserAccount = '100';
exec xp_cmdshell(‘fdisk.exe’) --
在权限允许的情况下,这段SQL语句的执行后果,就非常非常严重了。
通过上面的这个例子可以看出,SQL注入攻击的定义是:
被攻击系统采用字符串接收用户输入,并构造相应的SQL语句来执行数据库操作。
开发人员没有对用户输入字符串的合法性做足够验证。
攻击者在该字符串中注入的恶意代码,在数据库系统(如SQL Server)上执行。
3.      SQL注入攻击和网页挂马

当WEB应用需要后台数据库支持的时候,系统就存在着SQL注入攻击的风险。
那么,攻击者到底是如何利用SQL注入攻击来达到网站挂马的目的?我们就拿开始提到的今年五月份的攻击举例:
攻击者通过自动扫描工具,发现存在SQL注入攻击安全漏洞的网站。
攻击者实施SQL注入攻击,将恶意的脚本代码插入到SQL数据库的相应数据中。插入的恶意脚本如:

你可能感兴趣的:(数据库与SQL语言)