正则表达式题目(ctf题)

题目:

<?php  
$key='flag{********************************}'; 
$Regular= preg_match("/zkaq.*key.{2,9}:\/.*\/(key*key)/i", trim($_GET["id"]), $match); 
if( $Regular ){  
  die('key: '.$key); 

求Flag

解答:

key里面有想要的Flag,因为

if( $Regular ){  
  die('key: '.$key); 

所以要得到key需要$Regular大于0,

$Regular变量中用了”preg_match()”函数,这个函数用来进行正则表达式匹配,成功则返回 1 ,否则返回 0 。
即,想要得到Flag,需要正则表达式成立。

下面来看正则表达式:
trim($_GET[“id”])是通过GET方法传参,参数是id。
id必须符合前面正则表达式/zkaq.key.{2,9}:\/.\/(key*key)/i

精简/zkaq.key.{2,9}:\/.\/(keykey)/i:
/ /i意思是正则表达式+不区分大小写,正则表达式可替代为 zkaq.
key.{2,9}:\/.\/(keykey)

“.*” 意思是任意字符多次或0次,可替代为 1或者11或者2甚至不写

.{2,9}意思是任意字符出现2到9次,可替换成12或者123或者11111等

:就是:

\/就是/

()表示一个整体

y*意思是y出现0次或者多次,可以替换成 y或者yyy甚至不写

综上,id的其中一种方式可以为:

zkaq1key12://kekey

打开靶场,id=后面输入zkaq1key12://kekey,得到:
key: flag{regular_god_code}

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值