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
- "\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:]]:匹配除空格外的所有可列印字元