我們可以利用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的包都開啟爆破,即可得到目錄,
可以看到有fl0g.php,只要把ls改為 cat fl0g.php即可,修改如下:
爆破即可得到flag