English
 电子信箱
 加入收藏

  威盾防火墙 >> 新闻中心 >> 业界动态 >> 使用SQL注释

 

使用SQL注释

威盾防火墙 2015-02-16

 

可以使用内联注释序列来创建SQL代码段。这些代码段虽然在语法上有些怪异,但实际上却非常有效,能够避开多种输入过滤器。

可以使用这种方法来避开多种简单的模式匹配过滤器。例如,phpShop应用中最新的一个漏洞试图使用下列输入过滤器来阻止SQL注入攻击:

  1. if (strister($value,'FROM ') ||  
  2.    (strister($value,'UPDATE ') ||  
  3.    (strister($value,'WHERE ') ||  
  4.    (strister($value,'ALTER ') ||  
  5.    (strister($value,'SELECT ') ||  
  6.    (strister($value,'SHUTDOWN ') ||  
  7.    (strister($value,'CREATE ') ||  
  8.    (strister($value,'DROP ') ||  
  9.    (strister($value,'DELETE FROM ') ||  
  10.    (strister($value,'script ') ||  
  11.    (strister($value,'<> ') ||  
  12.    (strister($value,'= ') ||  
  13.    (strister($value,'SET '))  
  14.       die('Please provide a permitted value for '.$Key); 

请注意,上述代码对每个SQL关键字后面紧跟的空格进行了检查。可以在不需要空白符的情况下使用内联注释来分隔每个关键字,这样就能很容易避开这种过滤。例如:

  1. '/**/UNION/**/SELECT/**/password/**/FROM/**/
    tblUsers/**/WHERE/**/username/*  
  2. */LIKE/**/'admin'-- 

(请注意,过滤器将等号字符(=)也过滤掉了。上述避开攻击使用LIKE关键字替换等号,在本例中可以得到相同的结果。)

当然,也可以使用该技术避开那些只是阻止各种空白符的过滤器。许多开发人员错误地认为,将输入限制为单个标号就可以防止SQL注入攻击,但是他们忘记了内联注释允许攻击者不使用任何空格即可构造任意复杂的SQL。

在MySQL 中,甚至可以在SQL关键字内部使用内联注释来避开很多常见的关键字阻塞过滤器。例如,如果将有缺陷的phpShop过滤器修改成只检查关键字而不检查附加的空白符(假设后台数据库为MySQL),则下列攻击依然有效:

  1. '/**/UN/**/ION/**/SEL/**/ECT/**/password/**/FR/**/OM/**/tblUsers/**/WHE/**  
  2. /RE/**/username/**/LIKE/**/'admin'-- 
【责任编辑:云霞 TEL:(010)68476606】


相关内容: 最新内容:
理解SQL注入[2015-02-16]
理解SQL注入的产生过程[2015-02-16]
SQL注入攻击及其防范检测技术研究[2015-02-16]
防范SQL注入式攻击[2015-02-16]
理解SQL Server的SQL查询计划[2015-02-12]
SQL语句中SELECT语句的执行顺序[2015-02-12]
理解SQL注入[2015-02-16]
理解SQL注入的产生过程[2015-02-16]
理解Web应用的工作原理[2015-02-16]
一种简单的应用架构[2015-02-16]
SQL注入攻击及其防范检测技术研究[2015-02-16]
防范SQL注入式攻击[2015-02-16]