1. 程式人生 > 其它 >bugku web 字元?正則?

bugku web 字元?正則?

開啟靶場,發現php程式碼

很明顯,這是一道關於php正則表示式的題,程式碼也很簡單,這裡需要注意幾個函式的用法

①preg_match(pattern,str,match):

pattern:匹配模式

str:參與匹配的字串

match:如果提供了引數matches,它將被填充為搜尋結果。 $matches[0]將包含完整模式匹配到的文字, $matches[1] 將包含第一個捕獲子組匹配到的文字,以此類推

②trim():去除字串首尾處的空白字元(或者其他字元)

tips:

如果不指定第二個引數,trim() 將去除這些字元:

  • " " (ASCII 32 (0x20)),普通空格符。
  • "\t" (ASCII
    9 (0x09)),製表符。
  • "\n" (ASCII 10 (0x0A)),換行符。
  • "\r" (ASCII 13 (0x0D)),回車符。
  • "\0" (ASCII 0 (0x00)),空位元組符。
  • "\x0B" (ASCII 11 (0x0B)),垂直製表符。

本題的重點在於對匹配模式的分析

因為正則表示式大家接觸的也比較多,這裡只提一下幾個不那麼參加的點

1.模式修飾符:可以看出,本題的模式修飾符為/i,也就是忽略大小寫

2.子表示式:形如 (very)*large,可以匹配到“large”,‘“very large”,“very very large”等等

3.[[:punct:]]:匹配標點符號,這是一種用於POSIX風格的正則表示式的字元類

知道這些之後,就可以著手構建payload了,我選擇的payload是:id?=keykey1111key:/1/keya@

附加知識:

其他用於POSIX風格正則表示式的字元類:

[[:alnum:]]:匹配文字數字字元

[[:alpha:]]:匹配字母字元

[[:lower:]]:匹配小寫字母

[[:upper:]]:匹配大寫字母

[[:digit:]]:匹配小數

[[:xdigit:]]:匹配十六進位制數字

[[:blank:]]:匹配製表符和空格

[[:space:]]:匹配空白字元

[[:cntrl:]]:匹配控制符

[[:print:]]:匹配所有可列印字元

[[:graph:]]:匹配除空格外的所有可列印字元