-
源码:
<?php function is_php($data){ return preg_match('/<\?.*[(`;?>].*/is', $data); } if(empty($_FILES)) { die(show_source(__FILE__)); } $user_dir = 'data/' . md5($_SERVER['REMOTE_ADDR']); $data = file_get_contents($_FILES['file']['tmp_name']); if (is_php($data)) { echo "bad request"; } else { @mkdir($user_dir, 0755); $path = $user_dir . '/' . random_int(0, 10) . '.php'; move_uploaded_file($_FILES['file']['tmp_name'], $path); header("Location: $path", true, 303); }
通过对源码分析,可知要求上传文件,且文件内容要通过正则且能RCE
-
正则:
/<\?.*[(`;?>].*/is
指匹配
<?
开头的中间出现[(`;?>]
任一字符的不区分大小写的,无视换行符的字符串。即针对<?php ;
或<?php ?>
等语句。 -
如何绕过正则且能RCE呢?
Re
利用正则回溯最大次数上限进行绕过
最新推荐文章于 2023-08-05 15:52:36 发布