这是一个简单题,不过可以用来练练正项表达,小白所写,大佬见谅
进入链接
由代码知这是可以通过GET传参得到Flag(就是在地址栏操作),我们来看看题目的问题
/key.*key.{4,7}key:/./(.*key)[a-z][[:punct:]]/i
典型的正则表达式,显然问题的解决方案就是在地址栏传参,使得id符合正则表达式,即可得到flag
由于我这篇是新手食用篇,所以,我在此介绍一下正则表达式的基础相关知识
^:匹配一行字符串的开头
. : 匹配任意字符,除了换行符
[…]:匹配括号中的任一个,[amk] 匹配 ‘a’,‘m’或’k’
[^…]: 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符
*:匹配0个或多个的表达式
+:匹配1个或多个的表达式
?:匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
开始看题
/key.*key.{4,7}key:/./(.key)[a-z][[:punct:]]/i
我们将正则表达式拆开
/key
.
key
.{4,7}
key:
/
.
/
(.*key)
[a-z]
[[:punct:]]
/i
这样看的话是不是就清晰多了,开始匹配吧,/key,‘/’代表所有正项匹配的开始,key为固定不变的字符串
第一段匹配为 key
.是可以任意匹配一个字符,*是匹配前边的字母0次或者多次,所有.*就是可以输入任意个字符,这里我输入aaaa,接上面的匹配的字符串为 keyaaaa
key为字符串,匹配的就是key,接上面就是 keyaaakey
.{4,7}是匹配任意4—7个字符,我这里就就写为aaaaa,接上面就是 keyaaakeyaaaaa
“key:”也和key一样,就是多了:,接上面 keyaaakeyaaaaakey:
/中的“\”,是转义字符,因为“/”是代表所有正项匹配的开始,我们需要将它变成普通的“/”,所以就用“\”,接上面就是 keyaaakeyaaaaakey:/
.是代表任意一个字符,我这就用a,接上面keyaaakeyaaaaakey:/a
又有一个“/",接上面 keyaaakeyaaaaakey:/a/
(.*key)是代表任意个字符后加key,括号的的意义就是这个.*key优先组合,接上面 keyaaakeyaaaaakey:/a/aaakey
[a-z]代表任意在a到z一个小写字母,这里我就用a,接上面 keyaaakeyaaaaakey:/a/aaakeya
[[:punct:]]表达任意一个ASCLL标点字符,这里我用逗号“,”,接上面 keyaaakeyaaaaakey:/a/aaakeya,(,为英文状态下的逗号)
/i表示不分大小写
这里我匹配对应的正项式为 keyaaakeyaaaaakey:/a/aaakeya,
接下来我们就把我们匹配的式子传进id
此题结束