Bugku web——字符?正则?

谁说我不能喝 提交于 2019-11-30 00:26:58

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

<?php 
highlight_file('2.php');
$key='KEY{********************************}';
$IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
if( $IM ){ 
  die('key is: '.$key);
}
?>

函数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
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!