封神台正则表达式题目

一、原理

  1. 正则表达式,又称规则表达式。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
  2. PHP中的相关函数:
    preg_match_all();——匹配字符串中所有的符合正则表达式的字符串,返回匹配次数。
    preg_replace();——将符合正则表达式的字符串转换成新的字符串。返回替换后的结果。
    preg_match();——匹配字符串中所有的符合正则表达式的字符串,第一次匹配成功后返回。
  3. 要熟悉并掌握正则表达式的字符、关键字、限定符、修饰符。



二、作业

(一)题目

在靶场中,找到正则表达式题目,并得到题目中的flag
题目代码:

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

(二)分析

  1. 题目最终目的是得到对应的flag。由$key='flag{********************************}'die('key: '.$key);; 可知我们可以通过控制程序,使程序运行die('key: '.$key);,从而得到flag。
  2. 然后我们看到if语句的判定条件是 R e g u l a r , 因 此 , 需 要 控 制 程 序 使 得 Regular,因此,需要控制程序使得 Regular使Regular为真。
  3. 分析$Regular= preg_match("/zkaq.*key.{2,9}:\/.*\/(key*key)/i", trim($_GET["id"]), $match);,若使 R e g u l a r 为 真 , 需 要 使 得 p r e g m a t c h 函 数 返 回 为 1 , 即 传 递 的 i d 参 数 ‘ t r i m ( Regular为真,需要使得preg_match函数返回为1,即传递的id参数`trim( Regular使pregmatch1idtrim(_GET[“id”])中含有符合正则表达式/zkaq.key.{2,9}😕./(key*key)/i`的子串。
  4. 分析/zkaq.*key.{2,9}:\/.*\/(key*key)/i,设计符合条件的id参数字符串。
  • 修饰符\i规定匹配时不区分大小写;
  • zkaq是正常的字符,因此设计的id参数字符串中首先可以是zkaq;
  • .*是匹配任意字符任意次,因此设计为空字符;
  • key为固定的字符串;
  • .{2,9}是匹配任意字符串2-9次,可以设计为yy
  • :为固定字符;
  • \/为转义匹配/;
  • (key*key)是一个整体,前面匹配字符串ke,后面匹配字符串key,中间匹配任意次y,我们可以简单的设计为keykey
  • 经过上面分析,我们得出字符串zkaqkeyyy://keykey

(三)结果

  1. 将页面URL中的id参数修改为设计好的字符串zkaqkeyyy://keykey,请求页面,我们就可以得到flag了。

    将key对应的值提交,显示成功。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值