metinfo5.0 文件包含漏洞分析
漏洞存在于metinfo5.0版本中
漏洞出现在message/index.php
文件中
位于第12行处,代码如下
在metinfo中,通过url中获取的参数变量是通过使用$_COOKIE
,$_GET
,$_POST
超全局变量然后再注册成变量的,注册的过程在include/common.inc.php文件下
继续回到漏洞触发点,使用require_once()函数来包含php文件,防御措施不当就有可能触发文件包含漏洞
下面就是寻找看是否对metid变量进行过滤
在该文件下先包含了两个php文件,一个是common.inc.php,
另一个是module.php
在common.inc.php
中主要是获取url参数以及一个全局功能的实现,对metid的处理在module.php
文件中
在module.php文件中,对metid参数的处理仅仅是使用了is_numeric()
函数判断参数metid是否为数字,然后根据metid是整型或者字符型对不同的变量赋值,如果是整型就赋值给id,如果是字符型就赋值给filename
并没有对危险的输入进行处理
回到message/index.php
,此处就存在文件包含漏洞了
在实验环境中的php.ini
文件中打开远程文件包含
这里构造payload为metid=http://localhost/phpinfo
,就会包含本地的名为phpinfo的文件,由于漏洞处自动添加了php后缀,包含文件时就不需要了,执行后的结果如下
最终执行了包含文件中的phpinfo()
, 输出了实验环境的phpinfo信息