获取字段数量与名称 微软为了方便 ASP 的程序开发者可以顺利地除错,因此每当Script 执行错误时,都会透过预设的 <系统所在磁盘>\WINNT\Help\iisHelp\common\500-100.asp 网页将发生错误的原因回传到前端,对于开发者来说,这是一个非常方便的错误呈现方式。但骇客也可以利用这个错误讯息取得原始 ASP 中的查询语法,并从中了解数据库中资料表的架构。例如在使用者名称字段输入: '''' HAVING 1=1-- 则系统会传回如图 2的错误讯息。
图 2:故意制造错误,从错误讯息中找寻蛛丝马迹。
由图 2可以知道存放使用者的资料表名称是 tblUser,且查询中有一个字段叫 UserID。因此我们再次输入: ''''GROUP BY UserID HAVING 1=1-- 这回错误讯息如图 3。
图 3:利用错误讯息来了解资料表大致结构。
再次在图 3 的错误讯息中可知查询的字段还有 UserName,因此继续以下列方式来查询3。
''''GROUP BY UserID,UserName HAVING 1=1--
利用上述方式取到完整查询语法后,也就是输入以下的语法,但不再造成执行时期错误:
''''GROUP BY UserID,UserName,Password,Pri HAVING 1=1--
因为整个传递到 SQL Server 的语法变成:
SELECT * FROM tblUser WHERE UserName=''''''''GROUP BY UserID,UserName,Password,Pri HAVING 1=1--'''' AND Password=''''asdf''''