正則表達式匹配題


正則表達式匹配題

 

靶場地址:http://**.**.***.**:8010/re/?id=1

 

<?php   

$key='flag{********************************}';  

$Regular=preg_match("/zkaq.*key.{2,9}:\/.*\/(key*key)/i", trim($_GET["id"]), $match);  

if( $Regular ){   

  die('key: '.$key);  

}

 

代碼解釋:

preg_match(正則表達式,匹配的字符串)

匹配第一個匹配正則的子字符串,未找到返回0,找到返回1

trim($_GET["id"]) 接受ID傳參過來的字符串

 

 

 

if( $Regular ){  die('key: '.$key); }

if (1){}執行;

if(0){}不執行;

die();輸出一條消息,並退出當前腳本。

該函數是 exit() 函數的別名。

 

解題思路:本題需要匹配的字符串的字符串符合正則表達式才會返回flag

 

正則表達式解釋:

PHP的正則表達式要寫在/ /之間。

.:匹配除換行符 \n 之外的任何單字符。

*:匹配前面的子表達式零次或多次。

{n,m}: m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 將匹配 "fooood" 中的前三個o。請注意在逗號和兩個數之間不能有空格。

\: 將下一個字符標記為或特殊字符、或原義字符、或向后引用、或八進制轉義符。例如, 'n' 匹配字符 'n'。'\n' 匹配換行符。序列 '\\' 匹配 "\",而 '\(' 則匹配 "("。

i:標記指定不區分大小寫。

  

/zkaq.*key.{2,9}:\/.*\/(key*key)/i

拆分講解這個正則表達式

1.

/zkaq.*/:表示”zkaq”后面有0-N個除換行符 \n 之外的任何單字符(N為非負整數)。

zkaq(我可以理解為后面可以沒跟着字符)

2.

/key.{2,9}/:表示”key”后面有2-9個除換行符 \n 之外的任何單字符。

keyhello(我可以在”key”后添加2-9個字符)

3.

/ :\/.*\/ /:第一個”:”為字符冒號,”\/”為斜杠”/”的轉譯,”.*”表示后面有0-N個除換行符 \n 之外的任何單字符(N為非負整數)。

://(沒什么可說的,我可以不添加字符)

4.

/(key*key)/:表示”ke”和”key”之間有0-N個字符”y”(N為非負整數)。

keykey(我可以不添加字符)

組合:

zkaqkeyhello://keykey

Unicode編碼一下: 

zkaqkeyhello%3A//keykey

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM