Bugku web——字符?正则?

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值