题目:
<?php
$key='flag{********************************}';
$Regular= preg_match("/zkaq.*key.{2,9}:\/.*\/(key*key)/i", trim($_GET["id"]), $match);
if( $Regular ){
die('key: '.$key);
}
求Flag
解答:
key里面有想要的Flag,因为
if( $Regular ){
die('key: '.$key);
}
所以要得到key需要$Regular大于0,
$Regular变量中用了”preg_match()”函数,这个函数用来进行正则表达式匹配,成功则返回 1 ,否则返回 0 。
即,想要得到Flag,需要正则表达式成立。
下面来看正则表达式:
trim($_GET[“id”])是通过GET方法传参,参数是id。
id必须符合前面正则表达式/zkaq.key.{2,9}:\/.\/(key*key)/i
精简/zkaq.key.{2,9}:\/.\/(keykey)/i:
/ /i意思是正则表达式+不区分大小写,正则表达式可替代为 zkaq.key.{2,9}:\/.\/(keykey)
“.*” 意思是任意字符多次或0次,可替代为 1或者11或者2甚至不写
.{2,9}意思是任意字符出现2到9次,可替换成12或者123或者11111等
:就是:
\/就是/
()表示一个整体
y*意思是y出现0次或者多次,可以替换成 y或者yyy甚至不写
综上,id的其中一种方式可以为:
zkaq1key12://kekey
打开靶场,id=后面输入zkaq1key12://kekey,得到:
key: flag{regular_god_code}