Bugku web——字符?正则?

打开题目链接,有如下代码


函数preg_match功能为用正则表达式匹配字符串,如果匹配成功,返回值1,并把匹配到的值赋值给match,否则返回0。函数trim功能为去掉字符串开头和结尾的空格。


因此此题的目标为构造一个满足正则表达式/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i的字符串id
对其进行分析:

  • 结尾的i表示忽略大小写
  • 多次出现的key表示匹配字符串key
  • .表示匹配除换行符 \n 之外的任何单字符
  • *表示匹配前一个字符0次或多次
  • {4,7}表示匹配前一个字符串至少4次,至多7次
  • :匹配字符:
  • \/匹配字符/
  • (.*key)表示一个子表达式,功能和上文相同
  • [a-z]表示表示匹配小写a-z中的任意一个
  • [:punct:]表示匹配 !"#$%&’()*+,-./:;<=>?@[]^_`{|}~.中的任意一个

根据上面的分析,可以构造id为keyakeyaaaaakey:/a/akeya?,满足上面正则表达式,得到flag
Bugku web——字符?正则?_第1张图片

你可能感兴趣的:(ctf总结)