【web安全】DolphinPHP RCE漏洞分析

DolphinPHP

DolphinPHP(海豚PHP)是一個基于ThinkPHP5.1.41LTS開發(fā)的一套開源PHP快速開發(fā)框架,DolphinPHP秉承極簡、極速、極致的開發(fā)理念,為開發(fā)集成了基于數(shù)據(jù)-角色的權(quán)限管理機制,集成多種靈活快速構(gòu)建工具,可方便快速擴展的模塊、插件、鉤子、數(shù)據(jù)包。統(tǒng)一了模塊、插件、鉤子、數(shù)據(jù)包之間的版本和依賴關(guān)系,進一步降低了代碼和數(shù)據(jù)的冗余,以方便開發(fā)者快速構(gòu)建自己的應(yīng)用。

漏洞分析

看到application\common.php#action_log函數(shù)

image.png

觀察到有一處call_user_func,向上回溯一下兩個參數(shù)看是否可控

分別為param[1]和log[$param[0]]

【查看相關(guān)資料】
1、網(wǎng)絡(luò)安全學(xué)習(xí)路線
2、電子書籍(白帽子)
3、安全大廠內(nèi)部視頻
4、100份src文檔
5、常見安全面試題
6、ctf大賽經(jīng)典題目解析
7、全套工具包
8、應(yīng)急響應(yīng)筆記

首先param為value以|為間隔分開的值,而value實際上就是match[1]的遍歷,match是通過正則匹配action_info['log']得到,這個正則就是匹配中括號內(nèi)的值,最終的$action_info是數(shù)據(jù)庫查詢得來,如下圖

image.png

先看一下這個查詢操作

image.png

對應(yīng)的模型為

image.png

對應(yīng)表的內(nèi)容為

image.png

所以這里的查詢操作就是通過module和name為條件查詢dp_admin_action這一表,然后用log數(shù)據(jù)去正則匹配

$action_info = model('admin/action')->where('module', $module)->getByName($action);

而這里的log是可以自己修改的

image.png
image.png

也就是說現(xiàn)在可以控制log內(nèi)的值,也就表示call_user_func的第一個參數(shù)也可控

至于log[param[0]],需要從log中尋找可控的value,這里目前可能可以控制的就是model或$details

image.png

所以需要找調(diào)用action_log并且model或details可控的地方

這里找了Attachment.php#delete

image.png

可以看到$ids完全可控,但是有一處if判斷

if (AttachmentModel::where('id', 'in', $ids)->delete())

操作肯定就是根據(jù)$ids刪附件了,所以這里還需要隨便上傳一個附件讓他刪,隨便傳個頭像就行了

image.png
image.png

這里的ids對應(yīng)call_user_func的第二個參數(shù),假設(shè)傳入calc,這個where('id', 'in',ids)->delete()會找不到文件刪,所以每訪問一次就需要刪一個已存在的附件
經(jīng)過測試可以用數(shù)組的形式,如ids[]=calc%26&ids[]=9這樣,能正常找到id=9的圖片

然后經(jīng)過

$ids = is_array($ids) ? implode(',', $ids) : $ids;

變成calc&,9

兩個參數(shù)都可控

漏洞利用

系統(tǒng)->行為管理->刪除附件->編輯

image.png

將所屬模塊改為系統(tǒng)

image.png

將日志規(guī)則改為[details|system] test ([details])

image.png

然后隨便傳一張圖片看它的id,之前傳的圖片id是9,所以

image.png

因為這里默認(rèn)$module是admin,所以上面要把所屬模塊改為系統(tǒng)

image.png

此時match = 'details|system',param[1]='system',log[param[0]]=$log['details']='calc&,9'

image.png

執(zhí)行calc

image.png

最后

這里通過IDE的find usages應(yīng)該還能找到其他觸發(fā)action_log的地方,就不往下看了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容