又遇到了無法打開或者是flag壞掉的題目,那麼隻能打開這道題了。
打開之後發現幾行php代碼。
檢視源代碼也沒有任何線索。
<?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 可以被設定為以下标記值:
- PREG_OFFSET_CAPTURE: 如果傳遞了這個标記,對于每一個出現的比對傳回時會附加字元串偏移量(相對于目标字元串的)。注意:這會改變填充到matches參數的數組,使其每個元素成為一個由 第0個元素是比對到的字元串,第1個元素是該比對字元串 在目标字元串subject中的偏移量。
- offset: 通常,搜尋從目标字元串的開始位置開始。可選參數 offset 用于 指定從目标字元串的某個位置開始搜尋(機關是位元組)。
trim(string,charlist):移除字元串兩側的字元。
string | 必需。規定要檢查的字元串。 |
charlist | 可選。規定從字元串中删除哪些字元。如果省略該參數,則移除下列所有字元:
|
die(status):輸出一條消息,并退出目前腳本。
正規表達式:
. 比對除 "\n" 之外的任何單個字元
* 比對它前面的表達式0次或多次,等價于{0,}
{4,7} 最少比對 4 次且最多比對 7 次,結合前面的 . 也就是比對 4 到 7 個任意字元
\/ 比對 / ,這裡的 \ 是為了轉義
[a-z] 比對所有小寫字母
[:punct:] 比對任何标點符号
/i 表示不分大小寫
最後終于寫出正規表達式,很不容易啊!!~~
來吧,關注我一下,就能夠一起學習網絡安全,共同進步~~
更新頻率挺高哦!!