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

MSSQL
SQLServer中求两个字符串的交集
SQL Server 触发器 表的特定字段更新时,触发Update触发器
SQL 查询分析中使用net命令问题
SQLServer 批量导入目录文件
sql语言中delete删除命令语句详解
Linq to SQL 插入数据时的一个问题
一个简单的SQL 行列转换语句
SQLServer 常用语句(按功能分)
SQLServer 管理常用SQL语句
SQL Server 2000中的触发器使用
SQL小技巧 又快又简单的得到你的数据库每个表的记录数
Sql Server 2000删除数据库备份文件
批量更新数据库所有表中字段的内容,中木马后的急救处理
sqlserver 通用分页存储过程
远程连接局域网内的sql server 无法连接 错误与解决方法
目前用到的两个分页存储过程代码
sqlserver 多表关联时在where语句中慎用trim()方法
Sql2005注射辅助脚本[粗糙版]
sql 2005不允许进行远程连接可能会导致此失败的解决方法
MSSQL2005数据库备份导入MSSQL2000

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


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