环境搭建:
首先我们来分析该系统的路由信息,以及如何进行参数的构造。
路由分析:
该系统有两个路由,一是前台功能点路由,二后台功能点路由,但两个路由代码类似只不过后台路由添
加了session校验,我们先来看看前台路由是怎么构造的。
前台路由放在api.php文件中。
在common.php中22行代码处中调用__autoload() 魔术方法来加载 Model 文件夹下的功能代码,方便后续路由的调用。在代码30行去除 get_magic_quotes_gpc() 方法对特殊字符加载的反斜杠,这可能是为了代码的兼容性。
代码5、6两行传入两个参数 ctrl 、 action ,第7行代码其实就是将 action 传过来的参数首字母转换为
大写,因为类名首字母都是大写的,第8行判断该类是否为 Api 或 Comment。
后台路由代码 admin.php 文件与前台路由代码基本类似,只是在上面添加了session校验,检测是否为
登录状态。
漏洞审计
1.任意文件读取/下载
通过上面的路由信息我们知道功能点文件存放在Model文件夹下,我们去翻找Model文件夹发现
file.php 文件也就是File这个类下存在一个 download() 方法。
在这个类中的第85行代码处,我们一目了然的看到了 file_get_contents() 函数,看到这个函数想要
利用,我们会下意思的想到两个点:第一该函数的参数是否可控;第二该函数是没有回显的,如果想要
利用是需要使用 echo 等函数配合。我们只需要查看这里file_get_contents() 中参数是否可控就可以了。
漏洞复现:
由于在上面我们已经分析过路由的构造,所以我们可以不用特意去找功能点就能构造出利用路由。
在路由中 action 传入的是我们要实例化的类名 file , ctrl 则对应我们需要调用的方法 download 。
2.任意文件上传
首先我们去创建一个.php后缀的文件
暂无评论内容