文章目录
- 1、delete注入
- 2、http header注入
- 3、布尔盲注
- 4、时间盲注
- 4、宽字节注入
1、delete注入
(1)寻找传参页面,在删除留言的时候,发现是get传参;
(2)判断是否存在注入点,命令:在id=58
后面加一个‘
,根据页面判断:
- 页面返回错误,说明存在数字型注入。
- 同时页面没有回显点,但是会出现报错信息,故该注入类型属于报错注入。
(3)直接构造报错注入的payload,id=62+or+updatexml(1,concat('~',database()),1)
。
联合注入与报错注入的区别:
- 联合注入的前提:页面上有显示位。
- 报错注入的前提:页面上没有显示位,但是有SQL语句执行错误信息输出。
2、http header注入
原理:通常情况下,页面返回信息有user-agent数据的,将http头中的user-agent和accept带入了SQL查询,如果没过滤就会存在http-header注入。
(1)判断传参页面,输入admin/123456,点击login登录。
页面返回本机的user-agent信息和accept信息,说明存在http header注入。
(2)判断是否存在http header注入,在user-agent后面添加’
后,页面报错,说明存在注入漏洞。
另外:理论上,有报错,有回显点,应该也可以用联合注入,但是这里貌似并不行。
(3)构造payload:' or updatexml(1,concat('~',database()),1) or '
前后的
'
为了闭合。
3、布尔盲注
布尔盲注,只会返回True或者False,不会返回报错信息。
(1)判断是否存在SQL注入漏洞;
输入kobe‘ and 1=1#
:
输入kobe' and 1=2#
:
说明此处存在布尔盲注;
另外,在搜索框中输入--+
,浏览器会对+
进行url编码。
(2)判断当前数据库的长度,payload:kobe' and length(database())>7 #
,false;kobe' and length(database())>6 #
,ture。故,数据库名长度为6。
(3)判断数据库名。payload:kobe' and ascii((substr(database(),1,1)))=112 #
。需要使用burp的intruder模块。
4、时间盲注
基于时间的盲注,无论输入什么信息页面都返回相同的信息,无法根据页面返回信息来确认真假,但可以通过页面返回信息的时间长短来判断页面是否成功执行了注入的语句。
(1)使用sleep()函数,payload:kobe' and sleep(4) #
(2)基于sleep()函数,判断数据库长度,payload:kobe' and sleep(if((length(database())=7),0,3)) #
需要注意的是,本题虽然既可以用and也可以用or来连接,但是用and的时候,拼接的语句为真时返回用户uid和email,而使用or的时候,拼接的语句为假时返回用户的uid和email
4、宽字节注入
宽字节注入的使用原因是:单引号、双引号等特殊字符被转义;
宽字节注入的原理是:在web中间件拿到SQL语句后,对单引号、双引号等特殊字符进行转义,然后以ASCII编码的方式对经转义后的SQL语句进行编码,Mysql数据库对齐用GBK进行解码,由于两种编码的方式不同,导致GBK解码的时候产生漏洞。
因为'
会被转义,因此使用payload:1%df' or 1=1#
: