admin
123456
这段函数中对提交的参数进行处理,然后判断是否POST数据上来,如果有就进行保存等,如果没有POST数据,将跳过这段代码继续向下执行。
我们可以通过GET传入fname,跳过前面的保存文件过程,进入文件读取状态。
对fname进行base64解码,判断fname参数是否为空,拼接成完整的文件路径,然后判断这个文件是否存在,读取文件内容。
对fname未进行任何限制,导致程序在实现上存在任意文件读取漏洞。
漏洞复现
登录网站后台,数据库配置文件路径:\App\Common\Conf\db.php
我们将这段组成相对路径,..\..\..\App\Common\Conf\db.php,然后进行base64编码,Li5cXC4uXFwuLlxcQXBwXFxDb21tb25cXENvbmZcXGRiLnBocA==
最后构造的链接形式如下:
http://127.0.0.1/xyhai.php?s=/Templets/edit/fname/Li5cXC4uXFwuLlxcQXBwXFxDb21tb25cXENvbmZcXGRiLnBocA==
通过url访问,成功获取到数据库敏感信息.
修复建议
1、取消base64解码,过滤.(点)等可能的恶意字符
2、正则判断用户输入的参数的格式,看输入的格式是否合法:这个方法的匹配最为准确和细致,但是有很大难度,需要大量时间配置规则。
不仅在某些cms里存在这样的漏洞,在windows和mysql里也一样存在。