读《SQL注入天书之ASP注入漏洞全接触》感(荐)

作者:leen 来源:ITPOW 日期:2005-1-20

看了小竹的《SQL 注入天书之 ASP 注入漏洞全接触》,感觉这篇文章写得非常好,由浅入深,实例详尽,对新手起到教学作用,对老手起到交流探讨作用,目前近 40% 的 ASP 网页均存在此漏洞,可以说《SQL 注入天书之 ASP 注入漏洞全接触》也来得非常实用。

我是从其它网站上拷贝到ITPOW的,我对其中的个别部分进行了修改,我想可能是别人在拷贝这篇文章时把其中的某些部分弄错了,在此向作者说明,其中修改的部分是去掉部分 sql 语句中的 ";" 号,如:

http://www.mytest.com/showdetail.asp?id=49 ;and (select count(*) from sysobjects)>0

修改为:

http://www.mytest.com/showdetail.asp?id=49 and (select count(*) from sysobjects)>0

SQL Server 注入漏洞可能造成什么损失呢?

  • 轻:查看数据库名、SQL Server 连接名、得到表的字段与记录等。
  • 重:备份数据库、下载数据库、在计算机内添加管理员等。

“查看数据库名、SQL Server 连接名、得到表的字段与记录”之类的攻击,对于存在注入漏洞的网页一般都可实现。但若是使用 Web 管理网站,Web 的密码又没加密,这样事态就变严重了。另外对于 SELECT 语句,如果没有控制好 LockType(应设置为 adLockReadOnly),也是很严重的。

如何彻底防范注入漏洞:

一、对进入 sql 语句的数字先进行类型转换;

二、对进入 sql 语句的字符,将单引号 ("'") 替换为两个单引号 ("''") ;

仅此两点即可,也许有人会问,那么文中第 8 页所说:

在入门篇提到,有很多人喜欢用 ' 号测试注入漏洞,所以也有很多人用过滤 ' 号的方法来“防止”注入漏洞,这也许能挡住一些入门者的攻击,但对 SQL 注入比较熟悉的人,还是可以利用相关的函数,达到绕过程序限制的目的。

是什么意思呢?既然说进行类型转换,过滤掉 "'" 就可以了,这里怎么又说可以绕过 "'" 的限制呢?其实,这里所说的是指对数字类型或我们注入添加的 sql。也就是说:

对 sql = " …… where id=" & request.QueryString("id")

用 **.asp?id=char(50),char 会起到函数的作用

或者 where xtype=char(85)(见文中第 8 页),char 也会起到函数的作用。

但对于 sql = " …… where key='" & request.QueryString("key") & "'"

用 **.asp?key=char(50),这里的 char(50) 是不起作用的,为什么呢?

套入 sql 一看,语句是这样的:

sql = " …… where key='char(50)'"

char(50) 位于 "'" 内,变成了字符(串),所以就起不到函数的作用了。

养成好的习惯,制定统一的规范

上面的方法确实解决了注入漏洞问题,但并不表示其它地方可以马虎了,为什么要马虎了,为什么要让自己的网页千疮百孔,让几句代码去独挡一面呢?如果不养成好的习惯,团体之间如果不制定统一的规范,今天这个问题解决了,明天那个问题还会出现。

1、使用 RecordSet 记录集之前必须判断 RecordSet 的 BOF 或 EOF 属性。

2、对于 SELECT 语句,除了不得已的情况,LockType 必须设置为 adLockReadOnly。

3、放入数据库中的密码应该使用良好的加密算法进行加密,同时也禁止密码以明文的形式存在于页面文件中。

4、在 Web 条件下,在非本机调试的情况下,不得使用 sa 连接数据库。

5、对于需要用户权限的平台,必须将用户名和密码载入 session,然后在需要的页面进行判断,不得使用 if session("loginOK")<>"" then 之类的语句来判断用户是否是合法用户。

……

必要时,可以禁止 IIS 返回详细的出错信息,可以禁止 public 对 sysobjects 表的 SELECT 权限。

……

安全不是一方面的,仅靠几个规范几个好的习惯并不能保证能造就出安全的空间,1 个 False 与 99 个 True 进行“与”运算,结果还是 False,从中可以看出,哪怕只有一点错误,都可能导致结果全盘被否定。Web 安全,除了注入漏洞,还有 FTP 设置错误、Web 服务设置错误、后台程序漏洞这些最最基本的都可能导致服务器整个被人控制,所以处处都要三思啊。

相关文章