防护 » FreeWAF

«

»

03

防护

SQL注入攻击得以实施的根源在于,由于程序员的疏忽,或者是缺乏足够的安全意识,使得后台应用程序无法严格区分出用户理应输入的数据和攻击者插入的SQL注入攻击指令。这导致的后果就是,攻击者如果将SQL指令插入到用户本该输入合法数据的位置,而后台应用程序没有对用户输入的数据进行严格的校验,而将攻击者插入的SQL注入攻击指令也当做合法的输入进行处理,直接附加到预定义好的SQL语句中去执行,则攻击者通过观察和分析后台服务器返回的结果,或者信息返回的时间,变换不同的策略,就能达到SQL注入攻击的目的。最终,轻则查看到无权限查看的数据,重则对数据进行篡改,删除等操作,甚至可能会获得整个系统的控制权限,对系统文件进行修改和操纵系统,导致服务器崩溃,而造成不可估量的后果。

下边就举个例子来说明如何进行SQL注入攻击:

1)  原始请求URL,即客户本该提交的请求URL。用户通过网页提交数据,所提交的查询串附加在请求URL中:

http://www.test.com/check.php?cust_id=648

其中,cust_id=648为查询串,cust_id为网页的参数,而648为用户输入的数据。

2)  假设后台应用服务器为PHP编写,并且没有对请求参数进行任何检查,查询函数如下:

$result = mysql_query(“SELECT distinct creditcard FROM orders where cust_id = $cust_id”);

则当请求中的查询串为cust_id=648时,所执行的请求为:

$result = mysql_query(“SELECT distinct creditcard FROM orders where cust_id = 648″);

就相当于在MYSQL上执行如下语句:

SELECT distinct creditcard FROM orders where cust_id = 648;

这时结果为:

+————————————+
|    creditcard                           |
+————————————+
|     80000000000001001    |
+————————————+
1   row   in   set   (0.03   sec)

即可以得到客户ID为648的客户的信用卡号。

3)   而当一个恶意的攻击者修改了提交的请求URL的查询串部分,例如,修改为以下形式:

http://www.test.com/check.php?cust_id = -1 or 1=1

这时,查询串为cust_id=-1 or 1=1,由于后台服务器没有对请求参数进行任何检查,则应用程序将-1 or 1=1理解为用户输入的数据,这样提交后,所执行的请求就变为:

$result = mysql_query(“SELECT distinct creditcard FROM orders where cust_id = -1 or 1=1″);

则MYSQL上,就会这样执行:

SELECT distinct creditcard FROM orders where cust_id = -1 or 1=1;

这时结果就变为了:

+————————————+
|     creditcard                           |
+————————————+
|     80000000000001001     |
|     80000000000001002     |
|     80000000000001003     |
|     80000000000001004     |
|     80000000000001005     |
+————————————+
1   row   in   set   (0.03   sec)

就列出了所有的信用卡卡号,即将那些无权限查看的信用卡卡号也列出来了。这样,就能达到窃取其他用户信息的目的。这样,就完成了一次简单的注入攻击。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>