<?php
highlight_file('2.php');
$key='flag{********************************}';
$IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
if( $IM ){
die('key is: '.$key);
}
?>
没啥好说的,正则绕过
/key.*key.{4,7}key:/./(.*key)[a-z][[:punct:]]/i
key+除了换行符外的任何单字符(0到无数次)+key+除了换行符外的任何单字符(4到7次)+key:+/+除了换行符外的任何单字符+/+除了换行符外的任何单字符+
除了换行符外的任何单字符(0到无数次)+key+任意一个字符+[[:punct:]]
[:punct:] 匹配的是: ! ’ # S % & ’ ( ) * + , - . / : ; < = > ? @ [ / ] ^ _ { | } ~
随便构造一个,过了keykeyaaaakey:/a/keya/
需要注意的是虽然[:punct:] 匹配的是: ! ’ # S % & ’ ( ) * + , - . / : ; < = > ? @ [ / ] ^ _ { | } ~
&和+还有#这种在url里面有特殊含义的字符,需要匹配的话,需要手动url编码一下
参考视频链接:https://www.bilibili.com/video/BV13q4y1x7Ba