<?php
highlight_file('2.php');
$key='KEY{********************************}';
$IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
if( $IM ){
die('key is: '.$key);
}
?>
通过分析代码可知,只要输入的id符合正则匹配,就可以得到flag。
正则匹配规则
定界符 / / 表示正则匹配的开始和结束点(.) 任意单个字符星号(*) 前边的字符出现零次、一次或多次加号(+) 前面的字符至少出现1次问号(?) 前面的字符最多只可以出现一次{n,m} 前边的字符出现n~m次反斜杠(\) 转义字符[a-z] 从a-z匹配单个字符[[:punct:]] 任何标点符号/i 正则表达式大小写不敏感\d 匹配数字\b 匹配单词的开始或结束\w 匹配数字和字母下划线的多个字符
/key
. * key
. {4,7} key
:\
/ .\
/ (.*key
) [a
-z
] [[:punct
:]]/i
key
+任意单个字符
+前面的字符出现零次或多次
+key
+任意单个字符
(出现
4~7次
)+key
:/+任意单个字符
+/+(任意单个字符
+前面的字符出现零次或多次
+key
)+a
~z中任意一个
+!"
知道以上的匹配规则后就可以进行编写payload了。
http
: