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:]]:匹配除空格外的所有可打印字符