SQL注入攻击技术(四)--注入攻击类型与方式

注入攻击类型与方式

1、union注入

①:查询

union操作符一般与order by语句配合使用

 注意:union前面不能有order by,如果后面也有order by,前面的也是白写了,

所以要想使用order by+union就得把有order by的语句封装成一个对象,再用select * from(......)as a union......。

只在有union的语句的最后写个order by是ok的,就是两个查询结果放一起之后再排序的意思

union 和union all的区别,前者去重且排序、后者不去重不排序

mysql> select id,email from member where username='kevin' union select username,pw from member where id=1;

 

 

②:注入

v' union select username,pw from member where id=1#%

 

 

 上图没有出现错误,但不代表类似的都不会出现错误,如果出错,他的原因可能是

因为查询的字段不能超过主查询的字段,这个时候可以在SQL语句后面加order by进行排序,通过这个办法可以判断主查询的字段

通过以下方法猜它有几个字段

 

 

 

 

 

 

 

 当查出有两个字段以后,再进行联合查询

a' union select 1,2#%(如果有10个字段,就从1写到10)

这里1,2这些说的是这个字段是可写可带入(带入数据库函数)的字段

 

 

 

 

 a' union select database(),user()#%,(再将这个带进去查询,结果如下图所示)

 

 

 

 

 

2、information_schema注入

①:获取pikachu数据库的表名u' union select table_schema ,table_name,3 from information_schema.tables where table_schema='pikachu'#

 

 

 如上图所示:获取到这个数据库中的表名,可以看出user表对我们最有用,那么接下来就要获取表中的字段

k' union select table_name,column_name ,2 from information_schema.columns where table_name='users'#%

 

 

 

 

 

③:获取字段值(如果经验丰富的话就不需要前面的步骤,直接进行爆破)

 

 

 

 

3、基于函数报错注入

 

①:技巧思路:
  在MYSQL中使用一些指定的函数来制造报错,从而从报错信息中获取设定的信息,常见的select/insert/update/delete注入都可以使用报错方式来获取信息.

 

 

 

②:背景条件:

后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端.

 

4、insert注入

insert注入,就是前端注册的信息最终会被后台通过insert这个操作插入数据库,后台在接受前端的注册数据时没有做防SQL注入的处理,导致前端的输入可以直接拼接SQL到后端的insert相关内容中,导致了insert注入。

注册账号,账号新增到数据库中

 

 

 

 

 

 

5、update注入

与insert注入的方法大体相同,区别在于update用于用户登陆端,insert用于用于用户注册端。

一般登录网站前台或后台更新用户信息的地方,填写用户需要修改相关信息,通过Burp抓包在用户名输入相关payload,格式如下:

update注入

 

 

 ' or updatexml(0,concat(0x7e,(database())),0) or'

 

 

6、delete注入

一般应用于前后端发贴、留言、用户等相关删除操作,点击删除按钮时可通过Brup Suite抓包,对数据包相关delete参数进行注入,注入方法如下:

delete from message where id=56 or updatexml(2,concat(0x7e,(database())),0)

7、Http Header注入

原理:user-agent头带入到了数据库中,与数据库产生交互

把Http Header直接带入数据库,程序员在写程序的时候,头里面的数据和数据库有交互,没有交互则没有注入点

登录的时候没有注入,放包到get请求这里的时候,可以看见注入点

 

 

 

 

8、Cookie注入

cookie是网站用来识别用户身份进行跟踪会话的,虽然Cookie是由后端生成的,但每次页面跳转,后端都会对前端的Cookie的信息进行验证,但如果后端获取Cookie后放在数据库中进行拼接,那么这也将是一个SQL注入点,

 

 

 

 

 

 

 

9、Boolian(布尔型)盲注

       盲注,即在SQL注入过程中,SQL语句执行选择后,选择的数据不能回显到前端,我们需要使用一些特殊的方法进行判断或尝试,这个过程称为盲注。

问:盲注有几类,分别是怎么测的??????

SQL盲注分类:
1、基于布尔型SQL盲注

2、基于时间型SQL盲注

3、基于报错型SQL盲注

怎么测

遇到布尔型SQL盲注,可以通过ascii值,

通过对比ascii码的长度,判断出数据库表名的第一个字符。

注:用到substr()函数

用法:substr(string,start,length)

string(必需)规定要返回其中一部分的字符串。start(必需)规定在字符串的何处开始。length(可选)规定被返回字符串的长度。

判断库名的第一个字符

 

判断长度

 

 

 

 

10、base on time(时间型)盲注

基于时间的延迟,构造一个拼接语句: vince' and if(substr(database(),1,1)='X' (猜测点)',sleep(10),null#,输入后,如果猜测准确,那么就会响应10秒,如果错误会立刻返回错误。输入:vince' and if(substr(database(),1,1)='p',sleep(10),null)#,再web控制台下,判断出database的表名的一个字符为p。通过这个办法我们就能逐步向下获取数据。

 

 

 报错型盲注用updatexml再结合if来判断就ok

11、宽字节注入

前提条件:magic_quotes_gqc参数设为ON时

 

 

 

 

 

注意:宽字节空格、#如果被URL编码了,可能造成不能成功。并且只有编码为GBK的时候才可以,GBK可以绕过被转义的反斜杠

 

 

 

posted @ 2020-12-26 23:01  兰博~~  阅读(1529)  评论(0编辑  收藏  举报