国外某cms审计之文件删除漏洞
2019-12-29 12:23:26 Author: xz.aliyun.com(查看原文) 阅读量:177 收藏

为什么不是任意文件删除,文中有对install.lock的特殊照顾~

该漏洞存在在\admin\modules\forum\attachements.php页面的242行的unlink函数:

可以看下这条语句if(!@unlink(MYBB_ROOT.$mybb->settings['uploadspath']."/".$file))
通过对mybb根目录和mybb的settings表中的数据uploadpath的值进行拼接,最后拼接file变量的值,其中MYBB_ROOT为网站根目录,setting变量为全局调用的数据库表名。
我们首先看一下该页面中的file变量来源,同时在该页面中的228行,由控制器接收input变量orphaned_files,其类型必须为数组,该请求变量由post请求提供,230行然后赋值给file变量,往上分析,221行该变量通过delete_orphan控制器进入,同时请求方式必须为post请求,有次数据来源分析完毕,往下分析,232行str_replace函数对接收的file变量进行过滤..字符转,避免目录穿越,通过234行的realpath函数对目录进行验证其有效性,继续往下分析:

通过236行的str_pos函数检测拼接的目录是否包含网站根目录,防止对网站以外的文件进行操作,最后面还有对 install.lock的专门照顾~~~

现在我们可以控制file变量,查看页面来源,发现在16行,数据由index.php页面下的forum模块下的attachments进行传入:链接为以下形式:
http://localhost/mybb/admin/index.php?module=forum-attachments&action=delete_orphan
由于该页面为删除孤立异常附件,需要构建,本次漏洞按照正常附件进行删除,然后通过改包进行操作可以成功实现,则正常附件删除链接,具体操作看漏洞浮现步骤
http://localhost/mybb/admin/index.php?module=forum-attachments&action=delete

剩下对$mybb->settings['uploadspath']变量的控制就需要对文件进行修改进行查询,针对关键函数进行搜索:$db->update_query("settings"发现在\mybb\inc\settings.php文件下1101行:

通过value和name变量进行更新,其中value变量是从post请求中的upsetting数组中进行获取其name变量的值:

我们跟踪uploadspath变量,进行搜索,有1042行定义数组,而uploadspath为数组中的参数,同时也有post请求的upsetting数组进行输入:

现在寻找数据传入方式,发现action方法为change,请求方式为post:

通过该页面17行,发现页面在index页面下调用的模板为config下的setting模板:

因此我们构建的页面就可以为这样,从该页面进行传入数据
http://localhost/mybb/admin/index.php?module=config-settings&action=change

发表帖子,同时上传附件
通过修改setting中的uploadspath值为删除的文件的目录

首先通过发布论坛帖子进行写帖子,并上传一个附件(txt后缀即可):

上传附件为1111.txt:

然后修改uploadspath选项,即上传文件的路径,通过http://localhost/mybb/admin/index.php?module=config-settings页面修改现在改为配置文件inc文件:

现在通过删除附件模块进行操作,先到forums模块,进行附件查询操作:
发现附件,进行删除抓包:

现在修改数据包,主要有action和添加post参数&orphaned_files[]=///config.php

修改后,action=delete_orphans,&orphaned_files[]=///config1.php,然后发包,发送前目录文件如下:

发送后:


审计完毕,唯一的瑕疵就是不能对install.lock进行删除,通过分析完这套程序,发现删除的接口最终都会经历这道坎,可算是硬性白名单了。


文章来源: http://xz.aliyun.com/t/6999
如有侵权请联系:admin#unsafe.sh