CTF [極客大挑戰 2019]Secret File 復現


[極客大挑戰 2019]Secret File 復現

知識點

  • 前端中背景可以覆蓋內容,頁面源代碼可以查看完整的html
  • 在php文件中可以寫入html代碼,html可在前端展示出來,php代碼主要是處理數據,通常不會展示。
  • 文件包含漏洞,PHP偽協議獲取文件

php://filter 是一種元封裝器, 設計用於數據流打開時的篩選過濾應用。 這對於一體式(all-in-one)的文件函數非常有用,類似 readfile()、 file() 和 file_get_contents(), 在數據流內容讀取之前沒有機會應用其他過濾器。

環境概要:
PHP.ini:
allow_url_fopen :on 默認開啟 該選項為on便是激活了 URL 形式的 fopen 封裝協議使得可以訪問 URL 對象文件等。
allow_url_include:off 默認關閉,該選項為on便是允許 包含URL 對象文件等。

復現

  • 初次相遇
    打開題目連接(https://buuoj.cn/challenges#[極客大挑戰 2019]Secret File )我們可以看到一頁背景為黑色,字體為紅色的頁面,這里已經給出了一個提示:想要的話可以給你,去找吧!把一切都放在那里了!我們可以猜測這個頁面是隱藏了一些信息的。

  • 步步逼近
      通過查看頁面源代碼或者按主鼠標左鍵一直拖動,我們可以發現隱藏的./Archive_room.php。

  訪問Archive_room.php,發現又給出了提示:我把他們都放在這里了,去看看吧。還有一個類似button一樣的東西,查看審查元素可知是action.php,我們點進去。

  訪問action.php立即跳轉到了end.php,並且頁面顯示的是:查閱結束 沒看清么?回去再仔細看看吧。

  我們可以猜測action.php訪問時間很短,時間一到立即跳轉到end.php。為了攔截action.php,我們可以使用BrupSuite來抓包。

  在攔截的action.php中我們看到一處提示代碼:

<!DOCTYPE html>

<html>
<!--
   secr3t.php        
-->
</html>

  訪問secr3t.php,頁面顯示了php代碼:

<?php
    highlight_file(__FILE__);
    error_reporting(0);
    $file=$_GET['file'];
    if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
        echo "Oh no!";
        exit();
    }
    include($file); 
//flag放在了flag.php里
?>

  發現這里有一個文件包含漏洞,但是在這里好像沒什么用,因為我們還不確定存在flag的文件。根據代碼的注釋內容,訪問flag.php。又出現提示:啊哈!你找到我了!可是你看不到我QAQ~~~ 我就在這里。

  剛開始我們以為還是像之前一樣用背景把flag給覆蓋掉了,但是通過查看頁面源代碼發現並沒有將flag寫出來。根據提示我們可以肯定flag確實是在這里,但是前端卻看不到,我們猜測flag是寫在了php代碼里面。那么怎樣來獲取完整的flag.php文件呢?我們立馬想到了secr3t.php的文件包含漏洞

<?php
    highlight_file(__FILE__);
    error_reporting(0);
    $file=$_GET['file'];
    if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
        echo "Oh no!";
        exit();
    }
    include($file); 
//flag放在了flag.php里
?>

  傳入的file經過了一些過濾,但是沒有過濾filter,我們可以用php://fileter來獲取文件。構造url:http://00b5c733-809a-4aed-a498-27d306b09452.node3.buuoj.cn/secr3t.php?file=php://filter/convert.base64-encode/resource=flag.php
(前面請使用自己的題目鏈接)

  • 到達終點
    獲取到了flag.php的base64加密,復制加密內容到解密網站去即可得到flag

總結

  這道題難度不是很大,每一步都有提示,主要需要掌握文件包含漏洞與php偽協議結合


免責聲明!

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



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