天天看点

Bugku:web 字符?正则?

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

Bugku:web 字符?正则?

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

Bugku:web 字符?正则?

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

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

代码里面有正则表达式的匹配,所以依据函数定义,就是要构造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                                表示不分大小写

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

Bugku:web 字符?正则?

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

更新频率挺高哦!!

Bugku:web 字符?正则?
上一篇: bugku_love

继续阅读