打开环境如下
是一个正则匹配的题目,要求我们通过get传进id的值要符合正则匹配的要求
下面是这一题里面遇到的字符意思
/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i
,我们先一步步拆开看
key
:没有意义,普通字符
.*key:对key进行贪婪匹配,如aaakey,abcdkey都会被匹配成key
.{4,7}:最少匹配 4次且最多匹配 7 次,但是前面有了“.”,所以完整意义是最少匹配 4次且最多匹配 7 次任意字符。
key::都是普通字符
\/:标记/为原意字符
.:匹配任意字符除换行符\n
\/:同上
():
标记一个子表达式的开始和结束位置
.*key:同上
[a-z]:匹配所有小写字母中的一个
[[:punct:]]:匹配任意标点符号
/i:不区分大小写
下面是常见的字符的正规说明
[ABC] |
匹配 [...] 中的所有字符,例如 [aeiou] 匹配字符串 "google runoob taobao" 中所有的 e o u a 字母。 |
[^ABC] |
匹配除了 [...] 中字符的所有字符,例如 [^aeiou] 匹配字符串 "google runoob taobao" 中除了 e o u a 字母的所有字母。 |
[A-Z] |
[A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母。 |
. |
匹配除换行符(\n、\r)之外的任何单个字符,相等于 [^\n\r]。 |
[\s\S] |
匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。 |
\w |
匹配字母、数字、下划线。等价于 [A-Za-z0-9_] |
那么对照上面的分析,我们就可以一步步来构造符合它匹配规则的payload
/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i
可以是
?id=key
abcd
key
aaaa
key:/a/
abcd
key
a
;
?id=keyabddkeyaaaaakey:/a/abckeya;
等等
提交任意一个
得到flag