源码
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-10-13 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-10-13 05:19:40
*/
error_reporting(0);
highlight_file(__FILE__);
include("flag.php");
if(isset($_POST['f'])){
$f = $_POST['f'];
if(preg_match('/.+?ctfshow/is', $f)){
die('bye!');
}
if(stripos($f, 'ctfshow') === FALSE){
die('bye!!');
}
echo $flag;
}
思路
第一层我们看到 .+?
这是一个懒惰匹配, is表示不区分大小写和换行符也会匹配到, .
就没法绕过了,不过.+是除了换行符以外的任何字符匹配1次或一次以上, s模式的话 .+就是任何字符匹配一次或一次以上了,我们就用空来绕过
第二层的话 stripos会匹配到的话返回一个 int 始终不(===)强等于 FALSE
所以什么都不加就可以绕过
题解
`?f=ctfshow`总结
水题