BUUCTF | [SUCTF 2019]CheckIn


 

感覺這題師傅們已經寫得很詳細了,我就做一個思路梳理吧,順道學一波.user.ini


 

步驟:

1.上傳一個“.user.ini”文件

 

 

 2.上傳自己的馬“a.jpg”

 

 

 3.菜刀連接 "http://b302f16c-6762-4496-be93-e544912aaf0d.node3.buuoj.cn/uploads/f4e7685fe689f675c85caeefaedcf40c/index.php",密碼“pass”

 

 

 解析:

<?php
// error_reporting(0);
$userdir = "uploads/" . md5($_SERVER["REMOTE_ADDR"]);
if (!file_exists($userdir)) 
{
    mkdir($userdir, 0777, true);
}
/*

這里創建的目錄是777的權限,很nice~

*/
file_put_contents($userdir . "/index.php", "");

if (isset($_POST["upload"]))
 {
    $tmp_name = $_FILES["fileUpload"]["tmp_name"];
    $name = $_FILES["fileUpload"]["name"];
    if (!$tmp_name) 
   {
        die("filesize too big!");
    }
    if (!$name) 
   {
        die("filename cannot be empty!");
    }

    $extension = substr($name, strrpos($name, ".") + 1);
    /*
      得到后綴
    */
    if (preg_match("/ph|htacess/i", $extension)) 
   {
        die("illegal suffix!");
    }
    /*
        正則過濾 .htacess ,各種php類型,有了一個“i”連大小寫繞過都不行
    */
    if (mb_strpos(file_get_contents($tmp_name), "<?") !== FALSE) 
   {
        die("<? in contents!");
    }
    /*
        過濾了 " <? " ,這個加上上面一條過濾,htacess的圖片馬和一句話基本都掛了
    */
    $image_type = exif_imagetype($tmp_name);
    if (!$image_type) 
  {
        die("exif_imagetype:not image!");
    }
    /*
        要修改一下 “Content-Type”的值
   */
    $upload_file_path = $userdir . "/" . $name;
    move_uploaded_file($tmp_name, $upload_file_path);
    echo "Your dir " . $userdir. ' <br>';
    echo 'Your files : <br>';
    var_dump(scandir($userdir));
}                    
  • .user.ini 類似.htaccess文件
    • 它比.htaccess用的更廣,不管是nginx/apache/IIS,只要是以fastcgi運行的php都可以用這個方法
    • .user.ini實際上就是一個可以由用戶“自定義”的php.ini 
    • 我修改了.user.ini后,不需要重啟服務器中間件,只需要等待user_ini.cache_ttl所設置的時間(默認為300秒),即可被重新加載 
  • .user.ini 利用條件如下:
    • 服務器腳本語言為PHP
    • 服務器使用CGI/FastCGI模式
    • 上傳目錄下要有可執行的php文件
  • auto_prepend_file,auto_append_file 

    • 類似於在文件前調用了require()函數
    • 是一個php配置項
    • 該配置項會讓php文件在執行前先包含一個指定的文件,通過這個配置項,我們就可以來隱藏自己的后門

    • auto_prepend_file 表示在php程序加載第一個php代碼前加載的php文件,auto_append_file 是在php代碼執行完畢后加載的文件

 


參考:

https://blog.csdn.net/weixin_42499640/article/details/99764087

 

https://xz.aliyun.com/t/6091

https://blog.csdn.net/weixin_33694172/article/details/87981584

 


免責聲明!

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



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