正则表达式匹配题

正则表达式匹配题

 

靶场地址:http://**.**.***.**:8010/re/?id=1

 

<?php   

$key='flag{********************************}';  

$Regular=preg_match("/zkaq.*key.{2,9}:\/.*\/(key*key)/i", trim($_GET["id"]), $match);  

if( $Regular ){   

  die('key: '.$key);  

}

 

代码解释:

preg_match(正则表达式,匹配的字符串)

匹配第一个匹配正则的子字符串,未找到返回0,找到返回1

trim($_GET["id"]) 接受ID传参过来的字符串

 

 

 

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

if (1){}执行;

if(0){}不执行;

die();输出一条消息,并退出当前脚本。

该函数是 exit() 函数的别名。

 

解题思路:本题需要匹配的字符串的字符串符合正则表达式才会返回flag

 

正则表达式解释:

PHP的正则表达式要写在/ /之间。

.:匹配除换行符 \n 之外的任何单字符。

*:匹配前面的子表达式零次或多次。

{n,m}: m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooood" 中的前三个o。请注意在逗号和两个数之间不能有空格。

\: 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。

i:标记指定不区分大小写。

  

/zkaq.*key.{2,9}:\/.*\/(key*key)/i

拆分讲解这个正则表达式

1.

/zkaq.*/:表示”zkaq”后面有0-N个除换行符 \n 之外的任何单字符(N为非负整数)。

zkaq(我可以理解为后面可以没跟着字符)

2.

/key.{2,9}/:表示”key”后面有2-9个除换行符 \n 之外的任何单字符。

keyhello(我可以在”key”后添加2-9个字符)

3.

/ :\/.*\/ /:第一个”:”为字符冒号,”\/”为斜杠”/”的转译,”.*”表示后面有0-N个除换行符 \n 之外的任何单字符(N为非负整数)。

://(没什么可说的,我可以不添加字符)

4.

/(key*key)/:表示”ke”和”key”之间有0-N个字符”y”(N为非负整数)。

keykey(我可以不添加字符)

组合:

zkaqkeyhello://keykey

Unicode编码一下: 

zkaqkeyhello%3A//keykey

 

 

转载于:https://www.cnblogs.com/sx2960/p/11371898.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值