Bugku CTF web23(Web)

0、打开网页,查看题目描述和PHP源代码

描  述: 字符?正则?

<?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);
}
?>

通过读代码可以看出只要我们构造出符合正则表达式的字符串通过GET方法给id变量传参就可以看到flag

1、分析正则表达式

定界符:/和/(一般来说是这两个,其实除了\和字母数字其它的只要是成对出现都可以看做定界符,比如##、!!之类的);

. (一个点):表示可以匹配任何字符;

*   :前面的字符重复零次或多次;

{n,m} :前面的字符重复4~7次;

\ (反斜线):后面的字符被转义;

[a-z] :在a到z中匹配 ;

[[:punct:]] :匹配任何标点符号;

/i  :表示这个正则表达式对大小写不敏感;


2、构造payload:keyakeyaaaakey:/a/akeya?并上传

构造不唯一,符合题意即可

3、得到flag:flag{b112bd9c7feaac1c33a9433ba7f5576e}

猜你喜欢

转载自blog.csdn.net/ChaoYue_miku/article/details/114462951