当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL概述及在网络安全中的应用(下)

MSSQL
精通数据库系列之入门:基础篇1
剖析SQL Server 2005查询通知之基础篇
用sp_lock诊断SQL Sever的性能问题
测试SQL Server业务规则链接方法
解析SQL Server数据应用在不同的数据库中
如何使用SQL Server数据库中查询累计值
逐行扫描 为你讲解几个基本SQLPLUS命令
教你一招:MSSQL数据库索引的应用
确定几个SQL Server栏中的最大值
SQL Server 2005分析服务 统一整合视图
如何使用SQL Server嵌套子查询
用TableDiff产生SQL Server同步脚本
小型商业应用选SQL Server还是Access
用SQL Server Having计算列和平均值
SQL Server 2005基于消息的应用程序介绍
在SQL Server实例之间传输登录和密码
SQL Server 2005深层工具和运行时间集
SQL Server数据库增强版备份体验
使用SQL Server 2000日志转移实现高可用性
浅谈Linq To Sql集成数据库语言的优劣

MSSQL 中的 SQL概述及在网络安全中的应用(下)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 108 ::
收藏到网摘: n/a

3.2.3 利用结构错误查询表单

一些数据库服务器返回的错误信息中包含了一部分格式错误消息,你可以通过分析这些片断来构造你提交的INJECTION语句,有些你提交的字符串会返回有用的信息,有的却不会,这主要是以来于web应用程序中SQL查询语句是如何设计的.下面这些是我推荐你尝试的字符串:

  '   BadValue'   'BadValue   ' OR '   ' OR   ;   9,9,9

通常这些字符串中的一些会返回相同的信息,或者根本不返回信息.但是有例子告诉我们,可能有的信息只有用他们中的一个才能得到,所以你最好提交字符串的时候,把他们都试一遍.

3.2.4 圆扩弧

如果有缺陷的查询语句中包含圆扩弧'(' (就像下面将会举的例子那样),或者返回的错误信息里显式地提醒你缺了'('号(Oracle这么做),那么你应该在你提交的SQL注射字符串中加入'('号.通常在WHERE子句后面加一个括号,但是在一些情况下,你需要加2个或者更多的括号.

下面是parenthesis.asp的源码:

  mySQL="SELECT LastName, FirstName, Title, Notes, Extension FROM Employees WHERE (City = '" & strCity & "')"

我们插入如下的值:

  "') UNION SELECT OtherField FROM OtherTable WHERE (''='"

那么传送给SQL SERVER的语句就变成了这样:

SELECT LastName, FirstName, Title, Notes, Extension FROM Employees WHERE (City = '') UNION SELECT OtherField From OtherTable WHERE (''='')

3.2.5 LIKE语句查询

另一个大的灾难是陷入一个LIKE子句的陷阱.(Seeing the LIKE keyword or percent signs cited in an error message are indications of this situation.)大多数的web搜索程序使用LIKE子句来查询数据库,比如下面这个:

SQLString = "SELECT FirstName, LastName, Title FROM Employees WHERE LastName LIKE '%" & strLastNameSearch & "%'"

这里面的%是通配符,在这个例子里,WHERE子句会返回TRUE,只要LASTNAME里有字符串含有strLastNameSearch.为了阻止SQL SERVER返回预计中的记录,你构造的SQL语句里必须含有LASTNAME里没有的字符串.web搜索程序搜索的字符串来自于用户的输入.通常有一个'和一个%在输入的字符串之前,因此我们构造字符串时,需要在WHERE子句中匹配它们.如果你提交了NULL作为搜索字符串,那么LIKE的参数会变成"%%",这是一个全匹配,会返回所有的记录。