Discuz!x3.4后台文件任意删除漏洞分析

Mr.Wu 477 1

前言

这个漏洞是晏师傅发现的,该漏洞为后台任意文件删除,需要有管理员的权限,所以说危害非常小。晏师傅说,让我用这个洞的分析发个文章活跃下先知的账号,每天发发文章,比打游戏好多了。我觉得非常有道理,所以有了这篇文章。

项目地址

https://gitee.com/ComsenzDiscuz/DiscuzX/tree/master

直接用最新版测试。(discuz!x3.4)

代码分析

漏洞位置在\source\admincp\admincp_forums.php第1793-1799行。用正则搜索,往unlink函数中直接传入通过GET方法获取的变量,直接可以搜到。

存在漏洞的代码:

if(!$multiset) {

   if($_GET['delreplybg']) {
      $valueparse = parse_url($_GET['replybgnew']);
      if(!isset($valueparse['host']) && file_exists($_G['setting']['attachurl'].'common/'.$_GET['replybgnew'])) {
         @unlink($_G['setting']['attachurl'].'common/'.$_GET['replybgnew']);
      }
      $_GET['replybgnew'] = '';
   }

首先我们也要进入第一个if语句,查看代码可知,当$multiset为假或者为0时即可。

查找下$multiset赋值的位置,发现其默认为0,只要让GET参数multi为空或者不存在即可。

再看第二个和第三个if语句:

第二个if语句,只要设置GET参数delreplybg;

第二个if语句,开发者做了下检测,通过检测parse_url函数返回的结果中有没有host这个变量,来确保GET参数replybgnew不是url,但是这个检测并不影响我们传入文件路径。

接下来再看一下$_G['setting']['attachurl']变量的内容是什么就可以构造exp了。

打个断点, 然后登陆后台,进入后台->模块管理,点击提交,这是发现已经断下了,看下它的值:

它的值为data/attachment/,再拼接上common/,也就是说我们可控的删除路径前缀为data/attachment/common/。

至此,我们就可以构造exp了。

漏洞复现

下个最新版的Discuz!x3.4,安装一下。

设置好burp的代理,然后登陆后台,进入论坛->模块管理,点击提交。

因为discuz!x3.4安装成功之后,登陆进后台,就会把安装脚本删除(这也许是官方的修复方式?),所以没法进行重装,那就删除个主页吧。

修改请求包,加入 &replybgnew=../../../index.php&delreplybg=1 。

点击Forward,这样就会把主页删除了。

文件管理器里也查看一下,确定是不是真的删除了。

后话

向往晏师傅那样健康绿色、积极向上的生活。

原文地址:https://xz.aliyun.com/t/4725

广告

打赏
发表评论 取消回复
表情 图片 链接 代码

  1. ty1451
    ty1451 Lv 1

    想知道你说的晏师傅的博客或者关注方式有吗

分享
微信
微博
QQ