您当前的位置:首页 > 互联网教程

什么是SQL注入漏洞

发布时间:2025-05-19 14:04:51    发布人:远客网络

什么是SQL注入漏洞

一、什么是SQL注入漏洞

【答案】:随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据。据统计,网站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不足10%。在本文,以SQL-SERVER+ASP例说明SQL注入的原理、方法与过程。(PHP注入的文章由NB联盟的另一位朋友zwell撰写的有关文章)SQL注入攻击的总体思路是:l发现SQL注入位置;l判断后台数据库类型;l确定XP_CMDSHELL可执行情况l发现WEB虚拟目录l上传ASP木马;l得到管理员权限;

二、什么是sql注入,怎么防止sql注入

SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。

当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。sql注入可能导致攻击者使用应用程序登陆在数据库中执行命令。相关的SQL注入可以通过测试工具pangolin进行。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造动态sql命令,或者作为存储过程的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是sql注入就发生了。

1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和

2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。

3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。

5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装

6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。

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

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

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

下面以为例进行分析,“YY”可能是整型,也有可能是字符串。

当输入的参数YY为整型时,通常abc.asp中SQL语句原貌大致如下:

select* from表名 where字段=YY,所以可以用以下步骤测试SQL注入是否存在。

(1) and 1=2, abc.asp运行异常;

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

(3) and 1=1, abc.asp运行正常,而且与运行结果相同;

如果这三个方面全部满足,abc.asp中一定存在SQL注入漏洞!

当输入的参数YY为字符串时,通常abc.asp中SQL语句原貌大致如下:

select* from表名 where字段=’YY’,所以可以用以下步骤测试SQL注入是否存在。

(1)… 39;1’=’2′, abc.asp运行异常;

(2)… 39;1’=’1′, abc.asp运行正常,而且与运行结果相同;

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

如果这三个方面全部满足,abc.asp中一定存在SQL注入漏洞!

有安全意识的ASP程序员会过滤掉单引号等字符,以防止SQL注入。这种情况可以用下面几种方法尝试。

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

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

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