XDebug 遠程調試漏洞(代碼執行)
Path php/xdebug-rce
XDebug是PHP的一個擴展,用于調試PHP代碼。如果目標開啟了遠程調試模式,并設置remote_connect_back = 1:
xdebug.remote_connect_back = 1
xdebug.remote_enable = 1
這個配置下,我們訪問http://target/index.php?XDEBUG_SESSION_START=phpstorm,目標服務器的XDebug將會連接訪問者的IP(或X-Forwarded-For頭指定的地址)并通過dbgp協議與其通信,我們通過dbgp中提供的eval方法即可在目標服務器上執行任意PHP代碼。
更多說明可參考:
測試環境
編譯及啟動測試環境
docker-compose build
docker-compose up -d
啟動完成后,訪問http://your-ip:8080/即可發現主頁是一個簡單的phpinfo,在其中可以找到xdebug的配置,可見開啟了遠程調試。
漏洞利用
因為需要使用dbgp協議與目標服務器通信,所以無法用http協議復現漏洞。
我編寫了一個漏洞復現腳本,指定目標web地址、待執行的php代碼即可:
# 要求用python3并安裝requests庫
python3 exp.py -t http://127.0.0.1:8080/index.php -c 'shell_exec('id');'

重要說明:因為該通信是一個反向連接的過程,exp.py啟動后其實是會監聽本地的9000端口(可通過-l參數指定)并等待XDebug前來連接,所以執行該腳本的服務器必須有外網IP(或者與目標服務器處于同一內網)。
Vulhub 文檔
推薦文章: