二、pikachu之SQL注入(2)

文章目录

  • 1、delete注入
  • 2、http header注入
  • 3、布尔盲注
    • 4、时间盲注
  • 4、宽字节注入

1、delete注入

(1)寻找传参页面,在删除留言的时候,发现是get传参;
二、pikachu之SQL注入(2)_第1张图片

二、pikachu之SQL注入(2)_第2张图片

(2)判断是否存在注入点,命令:在id=58后面加一个,根据页面判断:
二、pikachu之SQL注入(2)_第3张图片
在这里插入图片描述

  • 页面返回错误,说明存在数字型注入。
  • 同时页面没有回显点,但是会出现报错信息,故该注入类型属于报错注入。

(3)直接构造报错注入的payload,id=62+or+updatexml(1,concat('~',database()),1)
二、pikachu之SQL注入(2)_第4张图片
在这里插入图片描述

联合注入与报错注入的区别:

  • 联合注入的前提:页面上有显示位。
  • 报错注入的前提:页面上没有显示位,但是有SQL语句执行错误信息输出。

2、http header注入

  原理:通常情况下,页面返回信息有user-agent数据的,将http头中的user-agent和accept带入了SQL查询,如果没过滤就会存在http-header注入。

(1)判断传参页面,输入admin/123456,点击login登录。

二、pikachu之SQL注入(2)_第5张图片

页面返回本机的user-agent信息和accept信息,说明存在http header注入。

(2)判断是否存在http header注入,在user-agent后面添加后,页面报错,说明存在注入漏洞。
二、pikachu之SQL注入(2)_第6张图片
在这里插入图片描述

另外:理论上,有报错,有回显点,应该也可以用联合注入,但是这里貌似并不行。

(3)构造payload:' or updatexml(1,concat('~',database()),1) or '

前后的'为了闭合。

二、pikachu之SQL注入(2)_第7张图片
在这里插入图片描述

3、布尔盲注

  布尔盲注,只会返回True或者False,不会返回报错信息。

(1)判断是否存在SQL注入漏洞;
  输入kobe‘ and 1=1#
二、pikachu之SQL注入(2)_第8张图片
  输入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模块。
二、pikachu之SQL注入(2)_第9张图片
二、pikachu之SQL注入(2)_第10张图片

二、pikachu之SQL注入(2)_第11张图片

4、时间盲注

  基于时间的盲注,无论输入什么信息页面都返回相同的信息,无法根据页面返回信息来确认真假,但可以通过页面返回信息的时间长短来判断页面是否成功执行了注入的语句。
在这里插入图片描述
(1)使用sleep()函数,payload:kobe' and sleep(4) #
二、pikachu之SQL注入(2)_第12张图片
(2)基于sleep()函数,判断数据库长度,payload:kobe' and sleep(if((length(database())=7),0,3)) #
二、pikachu之SQL注入(2)_第13张图片

需要注意的是,本题虽然既可以用and也可以用or来连接,但是用and的时候,拼接的语句为真时返回用户uid和email,而使用or的时候,拼接的语句为假时返回用户的uid和email

4、宽字节注入

  宽字节注入的使用原因是:单引号、双引号等特殊字符被转义;
  宽字节注入的原理是:在web中间件拿到SQL语句后,对单引号、双引号等特殊字符进行转义,然后以ASCII编码的方式对经转义后的SQL语句进行编码,Mysql数据库对齐用GBK进行解码,由于两种编码的方式不同,导致GBK解码的时候产生漏洞。
  因为'会被转义,因此使用payload:1%df' or 1=1#:
二、pikachu之SQL注入(2)_第14张图片

你可能感兴趣的:(pikachu,sql,数据库)