1.先看下主界面,哦豁,他说把union 跟select给过滤了
2.输入 ?id=1 ,登录成功
3.输入 ?id=1' ,根据报错信息得知可以使用单引号闭合
4.查看了下过滤规则
仔细看看其实还好,没有过滤or与and,过滤了几个大小写的union和select但是可以用随机大小写绕过,过滤了--、#以及/**/,过滤了两次空格,过滤了/但没过滤\。所以实际上只过滤了注释与空格,与 Less 26 相似
5.因为过滤了空格,所以不能使用union联合查询了。(linux下可以使用%a0代替空格,但我这靶机服务器是windows的,用不了这个方法),所以这里我依旧使用报错注入,其实报错注入挺好的,就是报错的字符长度有限制,没法一次性获取完全部查询信息,但是可以分次获取,下面会讲到。
查库名,可以看到我已经使用大小写组合成功的绕过了select过滤
查表名
查字段名,这里 or 跟 and都没有被过滤,可以使用
获取用户信息,因为limit用不了,所以只能用where来控制偏移量
6.另外我分享一个关于报错注入的思路
一般的报错注入使用 goup_concat组合输出查询结果时,会有长度限制,这是因为mysql报错本身限制的。
比如我查询了所有的库名,看的出来显示不完全。
那我们想看完全部的查询返回信息要怎么做呢?这不得不提到了之前我们使用盲注的时候经常用到的一个函数,mid(),使用它定位整个返回的信息。
看到没有,显示的内容位置发生了偏移,原本看不到的内容现在也看到了,使用这个方法,可以就不用担心返回信息被截断了。