解题思路:
题目:
<?php
$key='flag{********************************}';
$Regular= preg_match("/zkaq.*key.{2,9}:\/.*\/(key*key)/i", trim($_GET["id"]), $match);
if( $Regular ){
die('key: '.$key);
}
首先,看到flag放在变量 k e y 中 , 通 过 g e t 传 参 得 到 正 则 表 达 式 的 匹 配 值 放 在 变 量 key中,通过get传参得到正则表达式的匹配值放在变量 key中,通过get传参得到正则表达式的匹配值放在变量Regular中,if语句中条件满足 R e g u l a r 的 匹 配 规 则 , 强 制 写 死 , 输 出 Regular的匹配规则,强制写死,输出 Regular的匹配规则,强制写死,输出key,拿到flag。
接下来看正则表达式:
这里这里用了preg_match(正则表达式、匹配字符串、匹配到的值放入数组);
//是正则匹配模式的标志,/i是修饰符,不区分大小写,都去掉以后得到:
zkaq.*key.{2,9}:\/.*\/(key*key)
zkaq为字符照抄,.*匹配0个或多个任意字符,可以随便写个zhangsan,可以不写
zkaqzhangsankey.{2,9}:\/.*\/(key*key)
.{2,9}匹配任意字符,至少为2个,至多为9个,随便写123456
zkaqzhangsankey123456:\/.*\/(key*key)
\为转义字符,直接写/,.*可以不写,可以随便写
zkaqzhangsankey123456://(key*key)
(key**key)是一个整体,y匹配0个或多个y
zkaqzhangsankey123456://keykeywzyyds
构造id传参完成:
http://b-regex-1s.lab.aqlab.cn/?id=zkaqzhangsankey123456://keykeywzyyds
获取flag,提交
flag{regular_god_code}