bugku 正則匹配

正則匹配

常見的正則匹配字符:

^:匹配一行字符串的開頭
. : 匹配任意字符,除了換行符
[…]:匹配括號中的任一個,[amk] 匹配 ‘a’,‘m’或’k’
[…]:不在[]中的字符:[abc] 匹配除了a,b,c之外的字符
*:匹配0個或多個的表達式
+:匹配1個或多個的表達式
?:匹配0個或1個由前面的正則表達式定義的片段,非貪婪方式

在這裏插入圖片描述
在這裏插入圖片描述

我們可以看bugku上的一道例題

在這裏插入圖片描述

點開鏈接得到
在這裏插入圖片描述
由代碼知是通過GET傳參得到Flag(就是在地址欄操作),我們來看看題目的問題

/key.*key.{4,7}key:/./(.*key)[a-z][[:punct:]]/i

典型的正則表達式,顯然問題的解決方案就是在地址欄傳參,使得id符合正則表達式,即可得到flag
首先我們將正則表達式拆開

> /key     .* key   .{4,7}   key:    / . /   (.*key)   [a-z]   [[:punct:]] /i

/key ‘/’代表所有正項匹配的開始,key爲固定不變的字符串所以第一段匹配爲 key

. 是可以任意匹配一個字符,*是匹配前邊的字母0次或者多次,所有.*就是可以輸入任意個字符,這裏我輸入aaa,接上面的匹配的字符串爲 keyaaa

key爲字符串,匹配的就是key,接上面就是 keyaaakey

.{4,7}是匹配任意4—7個字符,我這裏就就寫爲aaaa,接上面就是 keyaaakeyaaaa

“key:”也和key一樣,就是多了:,接上面 keyaaakeyaaaakey:

/中的“\”,是轉義字符,因爲“/”是代表所有正項匹配的開始,我們需要將它變成普通的“/”,所以就用“\”,接上面就是 keyaaakeyaaaakey:/

.是代表任意一個字符,我這就用a,接上面keyaaakeyaaaakey:/a

又有一個“/",接上面 keyaaakeyaaaakey:/a/

(.*key)是代表任意個字符後加key,括號的的意義就是這個.*key優先組合,接上面 keyaaakeyaaaakey:/a/aaakey

[a-z]代表任意在a到z一個小寫字母,這裏我就用a,接上面 keyaaakeyaaaaakey:/a/aaakeya

[[:punct:]]表達任意一個ASCLL標點字符,這裏我用逗號“,”,接上面
keyaaakeyaaaaakey:/a/aaakeya,(,爲英文狀態下的逗號)

/i表示不分大小寫

這裏我匹配對應的正項式爲 keyaaakeyaaaakey:/a/aaakeya,

接下來我們就把我們匹配的式子傳進id就好了

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章