ASP程序密码验证的漏洞
皮鲁编译
漏洞信息
■ 漏洞名称:「ASP程序密码验证的漏洞」
■ 漏洞类型:攻击入侵型
■ 漏洞威胁:高
■ 公布日期:
密码字符串是什么■ 影响平台:所有有用ASP撰写密码验证程序的机器
漏洞内容
我在写这本书时,因为「需要」所以跑去书局和网络上看了许多有关 ASP 程序设计的书,而在某天我朋友我去帮他检测他的网站时,发现了这个 ASP 程序密码验证的漏洞…..后来我发现这个漏洞其实在很多地方都可能存在。
什么是「ASP程序密码验证的漏洞」呢?请先看图1,这是一个大家常看到的网页登入画面,你应该在很多网站、讨论区、下载区、留言版…..等等的地方,都有看到类似的画面。
(图1)
这类的登入功能是让合法的用户才可以进入或执行某些限制的功能,当你输入错误的账号或密码时,它会拒绝让你登入,出现如图5-2-2的错误画面。
(图2)
由图2中你可以看到,账号登入的工作其实是由一个名为「Checkpwd.asp」的 ASP 程序来把关的,让我们看看这个程序的原始码,了解一下程序设计师他是如何来验证账号/密码的工作,下面是有关账号密码验证部份的 ASP 原始码内容:                     
Dim strSQL, objRS
strSQL = "select * from Accounts where Id=' " & Id
strSQL = strSQL & " 'and Password=' " & Password & " ' "
Set objRS = GetSQLRecordset(strSQL, "account.mdb", "Accounts")
'如果到了 RecordSet 的结尾, 代表没有这个账号或账号错误
If objRS.EOF Then
Response.Write "使用者名称或密码错误,请确定输入的账号
及密码是正确的,若有问题,请洽站长询问。"
Response.End
End If
由程序代码你可以知道,程序设计师是利用数据库来验证使用者的合法身份,所有认证通过的使用者,他们的数据都保存在「account.mdb」这个数据库内,当使用者在前面图5-2-1输入账号/密码数据按下「登入」键时,这些资料会由「Checkpwd.asp」程序代码的这两行来和数据库比对:
strSQL = "select * from Accounts where Id=' " & Id
strSQL = strSQL & " 'and Password=' " & Password & " ' "
(注:上面两行,后面的 Id 和 Password 是变量,会随使用者输入的数据而改变)
上面这两行其实是标准数据库 SQL 的查询语法,我把它合并简化一下,还原成下面比较容易看得懂的字符串:
select * from Accounts where Id='输入的账号' and Password='输入的密码'
这行 SQL 字符串的意义很简单,就是把图5-2-1使用者输入的账号密码数据,与数据库内所有的记录做比对,看看它们有没有在数据库内,如果到最后一笔都没有符合条件的记录存在的话(程序
代码:If objRS.EOF Then……..),就代表使用者输入的账号或密码有问题,如图3所示。
(图3)
我目前所看到的状况,国内大部分的 ASP 程序设计教科书,或是网站上所提供的ASP密码验证程序,几乎都是用类似的方式来做密码查核工作,这样的程序设计逻辑有任何问题吗?其实没有,大部分的密码验证系统都是用类似的方式来处理,使用者输入账号密码,验证系统比对数据库记录,像提款机提款、拨接上网核对账号等等,大部分的验证系统都是用数据库记录来验证,所以这些个 ASP 教科书也使用同样方式处理,在程序设计逻辑上完全是正确的,但是…..他们忘记考虑了 ASP 身为 Script 描述语言的安全问题……
大家都知道所谓的 Script 描述语言,它最大的特就是所有的程序都是明文存在文字文件里面,程序内
所有的语法都是一行一行字符串所组成,就好像是人类讲的每一句话一样。在这注意一点,Script 描述语言它的程序是全由纯文字组成的,所以当程序里面「文字字符串」的内容被改变时,有可能就会改变程序执行的结果。
好,接下来要进入到 ASP 程序密码验证漏洞的重心……
(以下略)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。