sqli-labs(十二)(and和or的过滤)
第二十五关:
这关是过滤了and 和or
输入?id=1' or '1'='1
发现or被过滤了,将or换成and也一样。
输入?id=1' oorr '1'='1
这样就可以了,将一个or置空后,oorr还是会变成or。
其实感觉这关有点问题就是,这关可以利用联合注入来查询,其实根本不需要and和or的,and和or只是测试的时候初步判断注入的一种方法,不是需要的步骤。
只有当联表查询不能用的时候,必须使用报错注入或盲注的时候,才会必须使用and和or。
有时候程序过滤and和or的时候不是置空 而是用空格代替的话,我们上面的方法就不适用了。
这个时候可以使用&&代替and 使用||代替or。
直接使用||是没有问题的,但是&&需要使用url编码为%26%26 ,因为&在url中往往后面接参数,web服务器会将&后面的当成另一个参数。
第二十五a关:
和第二十五关一样,只不过关闭了报错信息,是一个盲注。
第二十六关:
输入?id=1' or '1'='1 # 发现空格和or以及#都被过滤了,继续尝试发现-- /*也被注释了
注释被过滤,可以使用闭合的方法,现在的重点是怎样绕过空格被过滤的办法,正常会使用/**/来替代空格,但是现在被过滤了
使用脚本测试下哪些编码是可以使用的,
其中%a0网上说是可以替代空格的,但是我尝试了 不行啊。。。 感觉和数据库版本有关吧
这里可以使用通过来不是用空格的
输入?id=0'||extractvalue(1, concat(0x5c, (database())))||'1'='1
输入?id=0'||extractvalue(1, concat(0x5c, (select(group_concat(schema_name))from(infoorrmation_schema.schemata))))||'1'='1
值得注意的是,这里用的了information_schema数据库名中包含了or,会被过滤,需要使用infoorrmation_schema来绕过。
第二十六a关:
和第26关一样,只是需要将报错注入改为盲注。