天天看點

Bugku:web 字元?正則?

又遇到了無法打開或者是flag壞掉的題目,那麼隻能打開這道題了。

Bugku:web 字元?正則?

打開之後發現幾行php代碼。

Bugku:web 字元?正則?

檢視源代碼也沒有任何線索。

Bugku:web 字元?正則?
<?php               highlight_file('2.php');              $key='KEY{********************************}';              $IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);              if( $IM ){               die('key is: '.$key);              }              ?>
           

代碼裡面有正規表達式的比對,是以依據函數定義,就是要構造payload,key=符合正規表達式的要求即可。

學習一下正規表達式:

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
           
  • $pattern: 要搜尋的模式,字元串形式。
  • $subject: 輸入字元串。
  • $matches: 如果提供了參數matches,它将被填充為搜尋結果。$matches[0]将包含完整模式比對到的文本, $matches[1] 将包含第一個捕獲子組比對到的文本,以此類推。
  • $flags:flags 可以被設定為以下标記值:
    1. PREG_OFFSET_CAPTURE: 如果傳遞了這個标記,對于每一個出現的比對傳回時會附加字元串偏移量(相對于目标字元串的)。注意:這會改變填充到matches參數的數組,使其每個元素成為一個由 第0個元素是比對到的字元串,第1個元素是該比對字元串 在目标字元串subject中的偏移量。
  • offset: 通常,搜尋從目标字元串的開始位置開始。可選參數 offset 用于 指定從目标字元串的某個位置開始搜尋(機關是位元組)。

trim(string,charlist):移除字元串兩側的字元。

string 必需。規定要檢查的字元串。
charlist 可選。規定從字元串中删除哪些字元。如果省略該參數,則移除下列所有字元:
  • "\0" - NULL
  • "\t" - 制表符
  • "\n" - 換行
  • "\x0B" - 垂直制表符
  • "\r" - 回車
  • " " - 空格

die(status):輸出一條消息,并退出目前腳本。

正規表達式:

.                                 比對除 "\n" 之外的任何單個字元

*                                 比對它前面的表達式0次或多次,等價于{0,}

{4,7}                           最少比對 4 次且最多比對 7 次,結合前面的 . 也就是比對 4 到 7 個任意字元

\/                                比對 / ,這裡的 \ 是為了轉義

[a-z]                           比對所有小寫字母

[:punct:]                     比對任何标點符号

/i                                表示不分大小寫

最後終于寫出正規表達式,很不容易啊!!~~

Bugku:web 字元?正則?

來吧,關注我一下,就能夠一起學習網絡安全,共同進步~~

更新頻率挺高哦!!

Bugku:web 字元?正則?
上一篇: bugku_love

繼續閱讀