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

MSSQL
如何用SQL语句来判断已知表是否存在
剖析SQL Server 2005中的报告服务架构
使用Microsoft SQL Server 2000的XML查询
让SQL Server为工作负载高峰提前准备
用Sql server一次插入多条数据
SQL SERVER2000深入学习之常见错误
关于SQL Server数据库的若干注意事项
sql server 2005中的表分区
SQL Server实用经验与技巧大汇集
限制SQL Server只能让指定的机器连接
SQL Server数据汇总完全解析
SQL查询语句使用精华
优化SQL Server服务器内存配置的策略
Sql server进行优化50招特效
用SQL语句实现异构数据库之间的导数据导入/出
SQL Server Compact Edition RC1 发布!
SQL Server死锁的分析
加快SQL Server备份和重新存储的速度
使用TSQL操作面试SQL Server开发人员
SQL 外链接操作小结 inner join left join right join

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


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