bugku-字符?正则?

打开题目,得到一串代码

1 <?php 
2 highlight_file('2.php');
3 $key='flag{********************************}';
4 $IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
5 if( $IM ){ 
6   die('key is: '.$key);
7 }
8 ?>

其中

1.[:punct:]是任意标点符号的意思(千万不要用#&+这三个,应该是因为前一个php不认(注释),后两个url不认(and和转空格)(来自评论的提醒!!))

2. " . " 匹配除”\n”之外的任何单个字符

3." * "匹配它前面的表达式0次或多次

4.{4,7} 是匹配4到7个任意字符(包括4,不包括7)

5.“ \/ ”匹配”/”,这里的”\”是为了转义

6.[a-z]匹配所有小写字母

7.“ /i ”表示不分大小写

所以当id传符合正则表达式时,key就会回显出来

可以将正则表达式进行拆分,一步步来构造payload

key     ?id=key     
.*        ?id=keyaaa或者什么也不加(下面的就是什么也不加的)

key     ?id=keykey
.{4,7}  ?id=keykey1111

key:   ?id=keykey1111key:

/       ?id=keykey1111key/
.       ?id=keykey1111key/'
/        ?id=keykey1111key/'/
(.*key) ?id=keykey1111key/'/key
[a-z]   ?id=keykey111key/'/keya
[[:punct:]] ?id=keykey1111key:/'/keya:

所以最终的payload:?id=keykey1111key:/'/keya:

 

posted @ 2021-06-16 15:59  c0d1  阅读(99)  评论(0编辑  收藏  举报