如何判断数据库被SQL注入漏洞

SQL注入一般会在HTTP://xxx.xxx.xxx/abc.asp?id=XX这样等带有参数的ASP动态网页中,有些动态网页中可能只有一个参数,有些可能有n个参数;有些参数是整型,有些参数是字符串型。只要是带有参数的动态网页访问了数据库就有可能存在SQL注入。

我们首选要修改浏览器的设置,以便更好的了解动态网页参数里包含的信息。以IE浏览器为例,把IE菜单-工具-Internet选项-高级-显示友好HTTP错误信息前面的勾去掉。

下面以HTTP://xxx.xxx.xxx/abc.asp?p=YY为例进行分析,“YY”可能是整型,也有可能是字符串。

1、整型参数的判断

 当输入的参数YY为整型时,通常abc.asp中SQL语句原貌大致如下:
 select * from 表名 where 字段=YY,所以可以用以下步骤测试SQL注入是否存在。

(1)HTTP://xxx.xxx.xxx/abc.asp?p=YY and 1=2, abc.asp运行异常;

(2)HTTP://xxx.xxx.xxx/abc.asp?p=YY’(附加一个单引号),此时abc.ASP中的SQL语句变成了select * from 表名 where 字段=YY’,abc.asp运行异常;

(3)HTTP://xxx.xxx.xxx/abc.asp?p=YY and 1=1, abc.asp运行正常,而且与HTTP://xxx.xxx.xxx/abc.asp?p=YY运行结果相同;
 如果这三个方面全部满足,abc.asp中一定存在SQL注入漏洞!
 2、字符串型参数的判断
当输入的参数YY为字符串时,通常abc.asp中SQL语句原貌大致如下:
 select * from 表名 where 字段=’YY’,所以可以用以下步骤测试SQL注入是否存在。
 (1)HTTP://xxx.xxx.xxx/abc.asp?p=YY&nb … 39;1’=’2′, abc.asp运行异常;
 (2)HTTP://xxx.xxx.xxx/abc.asp?p=YY&nb … 39;1’=’1′, abc.asp运行正常,而且与HTTP://xxx.xxx.xxx/abc.asp?p=YY运行结果相同;
 (3)HTTP://xxx.xxx.xxx/abc.asp?p=YY’(附加一个单引号),此时abc.ASP中的SQL语句变成了select * from 表名 where 字段=YY’,abc.asp运行异常;
 如果这三个方面全部满足,abc.asp中一定存在SQL注入漏洞!
 3、字符被过滤的判断
 有安全意识的ASP程序员会过滤掉单引号等字符,以防止SQL注入。这种情况可以用下面几种方法尝试。

(1)ASCII方法:所有的输入部分或全部字符的ASCII代码,如U = CRH(85),一个= CRH(97),等等。

(2)UNICODE方法:在IIS UNICODE字符集实现国际化,我们可以在输入字符串即输入UNICODE字符串。如+ = % 2 b,空格= % 20,等;

(1)混合设置方法:大小是大小写不敏感的,因为根据当时和过滤器的程序员通常要么过滤所有大写字母的字符串,或过滤所有小写的字符串,大小写混合往往会被忽略。如用SelecT代替select,SELECT等。




顶部