1. 程式人生 > >phpcms2008遠端程式碼執行漏洞

phpcms2008遠端程式碼執行漏洞

phpcms2008遠端程式碼執行漏洞

描述:

近日,網際網路爆出PHPCMS2008程式碼注入漏洞(CVE-2018-19127)。攻擊者利用該漏洞,可在未授權的情況下實現對網站檔案的寫入。該漏洞危害程度為高危(High)。目前,漏洞利用原理已公開,廠商已釋出新版本修復此漏洞。

影響範圍:

PHPCMS2008 sp4及以下版本

POC github地址:

https://github.com/ab1gale/phpcms-2008-CVE-2018-19127

漏洞分析:

在type.php中:
包含/include/common.inc.php 其作用是對$_GET,$_POST等全域性變數進行註冊。

image.png

extract函式大家都明白,將陣列的項註冊為變數。可以對任意變數進行註冊。
在type.php第30行呼叫template函式

image.png

template函式定義在global.func.php

image.png

image.pngimage.png

$template變數在這裡是完全可控的,且預設開啟模版快取自動重新整理。當template變數輸入為template=tag_(){};@unlink(FILE);assert($_POST[1]);{//../rss時,$compiledtplfile=”data/cache_template/phpcmstag(){};@unlink(FILE);assert($_POST[1]);{//../rss.tpl.php” .此時,可自然進入判斷 ,呼叫template_compile函式,次函式定義在include/template.func.php

image.png

在templatecompile函式中,$template變數是我們可控的,而$content變數當我們的輸入為”template=tag(){};@unlink(FILE);assert($_POST[1]);{//../rss”自然會選擇前者,而content內容中$template變數可控,最後file_put_contents函式寫入任意程式碼,需要注意的是,file_put_contents路徑為data/cache_template/phpcmstag(){};@unlink(FILE);assert($_POST[1]);
{//../rss.tpl.php時,php會將其路徑解析為data/cache_template/rss.tpl.php。

image.png

總結一下:

type.php 包含common.inc.php 任意變數註冊-》$template變數可控->template函式變數$template可控->template_compile函式變數$template可控-》file_put_contents函式由$template影響兩個引數變數可控,藉助php此函式解析檔案特性,將一句話寫入檔案。

漏洞修復:

升級至最新版本

REFERECE:

https://github.com/ab1gale/phpcms-2008-CVE-2018-19127

http://cve.mitre.org/cgi-bin/cvename.cgi?name=2018-19127