1. 程式人生 > 實用技巧 >利用PHP_SESSION_UPLOAD_PROGRESS進行檔案包含

利用PHP_SESSION_UPLOAD_PROGRESS進行檔案包含

我們可以利用session.upload_progress將木馬寫入session檔案,然後包含這個session檔案。不過前提是我們需要船家女一個session檔案,並且知道session檔案的存放位置。

session裡有一個預設選項,session.use_strict_mode預設值為off。

此時使用者是可以自己定義Session ID的。比如,我們在Cookie裡設定PHPSESSID=flag,PHP將會在伺服器上建立一個檔案:/tmp/sess_flag”。即使此時使用者沒有初始化Session,PHP也會自動初始化Session,併產生一個鍵值.

注:在Linux系統中,session檔案一般的預設儲存位置為 /tmp 或 /var/lib/php/session

但是session.upload_progress.cleanup預設是開啟的

框著的這句話意思就是說在預設情況下,session.upload_progress.cleanup是開啟的,一旦讀取了所有POST資料,它就會清除進度資訊

這裡我們可以利用條件競爭來進行檔案上傳

下面講個例題來實踐一下:

CTFshow 裡web入門裡的一個檔案包含題

通過觀察程式碼,可以看到過濾了大部分的檔案包含函式,這裡我們利用PHP_SESSION_UPLOAD_PROGRESS加條件競爭進行檔案包含

以POST的形式發包,傳的檔案隨意

<!DOCTYPE html>
<html>
<body>
<form action="http://e113b1bc-28b8-4f08-9e60-b74fe3a96ef3.chall.ctf.show/" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="123" />
    <input type="file" name="file" />
    <input type="submit" value="submit" />
</form>
</body>
</html>

抓包,這裡我們新增一個 Cookie :PHPSESSID=flag ,PHP將會在伺服器上建立一個檔案:/tmp/sess_flag” (這裡我們猜測session檔案預設儲存位置為/tmp),並在PHP_SESSION_UPLOAD_PROGRESS下新增一句話木馬,修改如下

因為我們在上面這個頁面新增的ID值是flag,所以傳參?file=/tmp/sess_flag

修改如下:這個a是隨便加的,主要是為了方便爆破

條件競爭,將POST和GET的包都開啟爆破,即可得到flag