WEB开发网
开发学院数据库MSSQL Server SQL概述及在网络安全中的应用(下) 阅读

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

 2007-05-19 09:43:17 来源:WEB开发网   
核心提示: 如果一切顺利,那么祝贺你,SQL概述及在网络安全中的应用(下)(4),你会得到一个和上面格式类似的而且是合法的页面;)无论动态页面在哪里出现,你都可以构造自己的语句应对自如,这要看WEB程序对数据库的访问权限了,关键在于是否能得到系统建立时自动生成的表中包含的表名和列名,3.2.8.WHE

如果一切顺利,那么祝贺你,你会得到一个和上面格式类似的而且是合法的页面;)无论动态页面在哪里出现,你都可以构造自己的语句应对自如。

3.2.8.WHERE关键字

报错为“无效的列名'EmployeeID'”,这个问题可能是由我们注入的语句结尾的WHERE关键字引起的,举例说明:

SQLString="SELECT FirstName,LastName,
Title FROM Employees WHERE City='"&strcity&"'AND Country ='USA'"

如果我们注入的语句是UNION ALL SELECT OtherField FROM OtherTable WHERE 1=1 那么会得到如下的提交语句:

SELECT FirstName, LastName,
Title FROM Employees WHERE City = 'NoSuchCity'
UNION ALL SELECT OtherField FROM OtherTable WHERE 1=1 AND Country = 'USA'

这样就会报错:[Microsoft][ODBC SQL Server Driver][SQL Server]无效的列名 'Country'。

其实问题就是因为你注入的语句后,系统没有在从数据库的表中找到一个叫'Country'的列名。我们这里可以简单的用“;--”注释符号将其注释掉(如果我们是SQL Server)。或者干脆继续猜其他的列名,然后构造合法请求就如我们上一节讲到的一样。

表名的枚举

我们已经开始掌握如何来使用注入进行攻击,但是我们还要确定要从哪个表得到信息,换句话说就是我们要的到关键的表名才能获得我们想要的有用信息。如何获得表名呢?在SQL Server中,你可以很容易得从数据库中得到全部的表名和列名。但是在Oracle和Access中,你就不一定能如此轻易的得到了,这要看WEB程序对数据库的访问权限了。关键在于是否能得到系统建立时自动生成的表中包含的表名和列名。如在SQL Server中,它们分别为'sysobjects'和'syscolumns',(在本文最后我们将给出其他数据库系统自建表和相应的列名)我们用以下的句子可以在这些表中列出数据库的所有列名和表名,(根据情况自行修改):

上一页  1 2 3 4 5 6 7 8  下一页

Tags:SQL 概述 网络安全

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接