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',(在本文最后我们将给出其他数据库系统自建表和相应的列名)我们用以下的句子可以在这些表中列出数据库的所有列名和表名,(根据情况自行修改):
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接