时效性
2025年8月15日
题目来源
题目描述
<?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);
}
?>
WriteUp
表达式分解(不区分大小写):
key:匹配字符串 "key".*:匹配任意字符(除换行符)0次或多次key:再次匹配 "key".{4,7}:匹配任意字符4到7次key:\/.\/:匹配 "key:/X/"(X为任意单个字符)(.*key):匹配任意字符0次或多次后跟 "key"[a-z]:匹配一个小写字母[[:punct:]]:匹配一个标点符号(如!,.,?等)
构造步骤:
- 开头部分:以
key开头,后跟任意内容(如123),再跟key。 → 示例:key123key - 中间部分:添加4到7个任意字符(如
aaaa),然后加上key:/X/(X为任意字符,如b)。 → 示例:aaaakey:/b/ - 结尾部分:添加任意内容(如
test),后跟key、一个小写字母(如x)和一个标点符号(如.)。 → 示例:testkeyx.