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

MSSQL
如何设置SQL Server数据库全文索引服务
使用SQL Server 2000索引视图提高性能
Sql Server在安装时提示挂起的解决方法
解析SQL Server 2008中的新语句:MERGE
使用SQL Server时最容易忽略的21个问题
讲解SQL Server数据库的触发器安全隐患
轻松掌握执行一个安全的SQL Server安装
如何使用SQL Server中的客户端配置工具
从SQL Server2000升级到2005的过程解析
Sql Server 数据库超时问题的解决方法
解决SQLServer最大流水号的两个好方法
解析:轻松掌握在 Mac OS X中安装MySQL
细化解析:轻松掌握怎样测试 MySQL安装
细化解析:MySQL 服务器究竟有多稳定?
MySQL数据库中与 ALTER TABLE 有关的问题
细化解析:MySQL 数据库中对XA事务的限制
使用MySql和php出现中文乱码的解决方法
Mysql的最大连接数怎样用java程序测试
MySQL列类型的选择与MySQL的查询效率
教你精确编写高质量高性能的MySQL语法

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 126 ::
收藏到网摘: 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的参数会变成"%%",这是一个全匹配,会返回所有的记录。