又遇到了无法打开或者是flag坏掉的题目,那么只能打开这道题了。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBHL0FWby9mZvwVZnFWbp1zczV2YvJHctM3cv1Ce-EEROJDO5pVSGdVYJFTRVhkRXFmTaVUVupVbkRzYG5EVChkWNp0VThkQG1UNNpnYy8GSPBTMXJFaohVWwhWRiJFZYd1caFjU0E1RipXQWdFNBh0TEpkeV9UNFJVNRZlW0EVMZhkSFFWVk1WWvZFRiJEZsJlNkR1UPxmaT9WO5pVdCNDW2wWbZRXMywUdO1GTqx2RjhXNpVGcKdlY0lTeMZTTINGMShUYvwlbj5yZtlmbkN3YuQnclZnbvN2Ztl2Lc9CX6MHc0RHaiojIsJye.jpg)
打开之后发现几行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 可以被设置为以下标记值:
- PREG_OFFSET_CAPTURE: 如果传递了这个标记,对于每一个出现的匹配返回时会附加字符串偏移量(相对于目标字符串的)。注意:这会改变填充到matches参数的数组,使其每个元素成为一个由 第0个元素是匹配到的字符串,第1个元素是该匹配字符串 在目标字符串subject中的偏移量。
- offset: 通常,搜索从目标字符串的开始位置开始。可选参数 offset 用于 指定从目标字符串的某个位置开始搜索(单位是字节)。
trim(string,charlist):移除字符串两侧的字符。
string | 必需。规定要检查的字符串。 |
charlist | 可选。规定从字符串中删除哪些字符。如果省略该参数,则移除下列所有字符:
|
die(status):输出一条消息,并退出当前脚本。
正则表达式:
. 匹配除 "\n" 之外的任何单个字符
* 匹配它前面的表达式0次或多次,等价于{0,}
{4,7} 最少匹配 4 次且最多匹配 7 次,结合前面的 . 也就是匹配 4 到 7 个任意字符
\/ 匹配 / ,这里的 \ 是为了转义
[a-z] 匹配所有小写字母
[:punct:] 匹配任何标点符号
/i 表示不分大小写
最后终于写出正则表达式,很不容易啊!!~~
来吧,关注我一下,就能够一起学习网络安全,共同进步~~
更新频率挺高哦!!