sqli-labs 26,27:为什么%0a无法通过less26的绕过
问题描述
sqli-labs 26,27,都是过滤空格,为什么27可以用%0A绕过,26不行?
代码:
也就是个正则表达式的小问题
less 26
function blacklist($id)
{
$id= preg_replace('/or/i',"", $id); //strip out OR (non case sensitive)
$id= preg_replace('/and/i',"", $id); //Strip out AND (non case sensitive)
$id= preg_replace('/[\/\*]/',"", $id); //strip out /*
$id= preg_replace('/[--]/',"", $id); //Strip out --
$id= preg_replace('/[#]/',"", $id); //Strip out #
$id= preg_replace('/[\s]/',"", $id); //\s匹配任何空白符,相当于\f\t\r\v\n(换页,制表,回车,垂直制表,换行)
$id= preg_replace('/[\/\\\\]/',"", $id); //Strip out slashes
return $id;
}
less 27
function blacklist($id)
{
$id= preg_replace('/[\/\*]/',"", $id); //strip out /*
$id= preg_replace('/[--]/',"", $id); //Strip out --.
$id= preg_replace('/[#]/',"", $id); //Strip out #.
$id= preg_replace('/[ +]/',"", $id); //Strip out spaces.匹配空格多次,但是没有匹配\f\t\r\v\n!!!
$id= preg_replace('/select/m',"", $id); //Strip out spaces./m视为多行字符串
$id= preg_replace('/[ +]/',"", $id); //Strip out spaces.匹配空格多次
$id= preg_replace('/union/s',"", $id); //Strip out union/s视为一行字符串
$id= preg_replace('/select/s',"", $id); //Strip out select
$id= preg_replace('/UNION/s',"", $id); //Strip out UNION
$id= preg_replace('/SELECT/s',"", $id); //Strip out SELECT
$id= preg_replace('/Union/s',"", $id); //Strip out Union
$id= preg_replace('/Select/s',"", $id); //Strip out select
return $id;
}
可以看到26是用\s
来匹配空格的,\s
匹配任何空白符,相当于\f\t\r\v\n
(换页,制表,回车,垂直制表,换行),常用的几个URL编码的空白符解释如下:
%09 TAB键(水平)
%0a 新建一行
%0c 新的一页
%0d return功能
%0b TAB键(垂直)
%a0 空格
但是[ +]
只匹配了空格,所以绕过很轻松