file_put_contents()的妙用

今天偶然在群里看到这个骚操作

file_put_contents()第二个参数是可以传入数组的,那么在存在某些正则校验的时候,就可能带来绕过的可能

例如有如下代码

<?php
$text = $_GET['text'];
if(preg_match('[<>?]', $text)) {
die('fuck!!!!');
}
file_put_contents('shell.php', $text);

如果我们想写入一个php文件,正常的话传入

text = <?php phpinfo();

会被正则匹配到,无法写入

如果我们将本段代码以数组的形式传入,数组会强制转化为字符串,这样就绕过了正则的匹配,达到了getshell的目的

虽然出现了Warning,但是文件是被写入了的