我们所做的一些网站中大约有 2 个被黑了。我们花了几个小时试图看看出了什么问题。漏洞是str_replace
vs \0
[ Null Char]。
str_replace
与Single Quotes [']
. _
就像是:
$str = 'java\0scr\0ip\0t:alert(\"XSS\")';
$clean_null_chars = str_replace('\\0','_[_blabla_]_',$str);
//Show the cleaned version
var_dump($clean_null_chars); // string 'java_[_blabla_]_scr_[_blabla_]_ip_[_blabla_]_t:alert(\"XSS\")' (length=62);
echo $clean_null_chars; //java_[_blabla_]_scr_[_blabla_]_ip_[_blabla_]_t:alert(\"XSS\")
但是,使用str_replace
with Double Quotes ["]
,没有任何反应
就像是:
$str= "java\0scr\0ip\0t:alert(\"XSS\")";
$clean_null_chars = str_replace('\\0','_[_blabla_]_',$str);
//Show the cleaned version
var_dump($clean_null_chars); //string 'java�scr�ip�t:alert("XSS")' (length=26);
// ....[Notice the _Null Char_ rendered as question marks in var_dump]
echo $clean_null_chars;// javascript:alert("XSS")
因此,一些天才设法利用了这个漏洞。
这是任何一个或参与str_replace
时的正常行为吗?Single Quotes
Double Quotes
在这里http://php.net/manual/en/function.str-replace.php他们同时使用了两者[']
,["]
没有提到不同的行为。
有任何想法吗??