Bugku:web 字符?正则?

本文深入解析了一段复杂的PHP代码,通过解读preg_match函数和正则表达式的使用,详细解释了如何构造符合特定模式的payload,以解决网络安全领域的难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

又遇到了无法打开或者是flag坏掉的题目,那么只能打开这道题了。

 

 

打开之后发现几行php代码。

 

查看源代码也没有任何线索。

 

 

<?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);}?>

 

代码里面有正则表达式的匹配,所以依据函数定义,就是要构造payload,key=符合正则表达式的要求即可。

 

学习一下正则表达式:

 

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
  • $pattern: 要搜索的模式,字符串形式。

  • $subject: 输入字符串。

  • $matches: 如果提供了参数matches,它将被填充为搜索结果。$matches[0]将包含完整模式匹配到的文本, $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推。

  • $flags:flags 可以被设置为以下标记值:

    1. PREG_OFFSET_CAPTURE: 如果传递了这个标记,对于每一个出现的匹配返回时会附加字符串偏移量(相对于目标字符串的)。注意:这会改变填充到matches参数的数组,使其每个元素成为一个由 第0个元素是匹配到的字符串,第1个元素是该匹配字符串 在目标字符串subject中的偏移量。

  • offset: 通常,搜索从目标字符串的开始位置开始。可选参数 offset 用于 指定从目标字符串的某个位置开始搜索(单位是字节)。

trim(string,charlist):移除字符串两侧的字符。

string必需。规定要检查的字符串。
charlist可选。规定从字符串中删除哪些字符。如果省略该参数,则移除下列所有字符:
  • "\0" - NULL

  • "\t" - 制表符

  • "\n" - 换行

  • "\x0B" - 垂直制表符

  • "\r" - 回车

  • " " - 空格

 

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

 

正则表达式:
 

.                                 匹配除 "\n" 之外的任何单个字符

 

*                                 匹配它前面的表达式0次或多次,等价于{0,}

 

{4,7}                           最少匹配 4 次且最多匹配 7 次,结合前面的 . 也就是匹配 4 到 7 个任意字符

 

\/                                匹配 / ,这里的 \ 是为了转义

 

[a-z]                           匹配所有小写字母

 

[:punct:]                     匹配任何标点符号

 

/i                                表示不分大小写

最后终于写出正则表达式,很不容易啊!!~~

 

来吧,关注我一下,就能够一起学习网络安全,共同进步~~

更新频率挺高哦!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酥酥糖学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值