sql注入过程详解_动力节点Java学院整理

2020-07-04 06:04:23易采站长站整理

SQL-SERVER有user,db_name()等系统变量,利用这些系统值不仅可以判断SQL-SERVER,而且还可以得到大量有用信息。如:
① HTTP://xxx.xxx.xxx/abc.jsp?p=YY and user>0 不仅可以判断是否是SQL-SERVER,而还可以得到当前连接到数据库的用户名
②HTTP://xxx.xxx.xxx/abc.jsp?p=YY&n … db_name()>0 不仅可以判断是否是SQL-SERVER,而还可以得到当前正在使用的数据库名;

2、利用系统表

ACCESS的系统表是msysobjects,且在WEB环境下没有访问权限,而SQL-SERVER的系统表是sysobjects,在WEB环境下有访问权限。对于以下两条语句:
①HTTP://xxx.xxx.xxx/abc.jsp?p=YY and (select count(*) from sysobjects)>0
②HTTP://xxx.xxx.xxx/abc.jsp?p=YY and (select count(*) from msysobjects)>0
若数据库是SQL-SERVE,则第一条,abc.jsp一定运行正常,第二条则异常;若是ACCESS则两条都会异常。

3、 MSSQL三个关键系统表

sysdatabases系统表:Microsoft SQL Server 上的每个数据库在表中占一行。最初安装 SQL Server 时,sysdatabases 包含 master、model、msdb、mssqlweb 和 tempdb 数据库的项。该表只存储在 master 数据库中。 这个表保存在master数据库中,这个表中保存的是什么信息呢?这个非常重要。他是 保存了所有的库名,以及库的ID和一些相关信息。 

这里我把对于我们有用的字段名称和相关说明给大家列出来。name //表示库的名字。

dbid //表示库的ID,dbid从1到5是系统的。分别是:master、model、msdb、mssqlweb、tempdb 这五个库。用select * from master.dbo.sysdatabases 就可以查询出所有的库名。

Sysobjects:SQL-SERVER的每个数据库内都有此系统表,它存放该数据库内创建的所有对象,如约束、默认值、日志、规则、存储过程等,每个对象在表中占一行。以下是此系统表的字段名称和相关说明。

Name,id,xtype,uid,status:分别是对象名,对象ID,对象类型,所有者对象的用户ID,对象状态。
对象类型(xtype)。可以是下列对象类型中的一种:
C = CHECK 约束 
D = 默认值或 DEFAULT 约束 
F = FOREIGN KEY 约束 
L = 日志 
FN = 标量函数 
IF = 内嵌表函数 
P = 存储过程 
PK = PRIMARY KEY 约束(类型是 K) 
RF = 复制筛选存储过程 
S = 系统表 
TF = 表函数 
TR = 触发器 
U = 用户表 

相关文章 大家在看