Dedecms include\dialog\select_soft_post.php Upload Any Files To The Specified Directory Via Variable Not Initial Flaw Bypass Extension Defence

目录

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

1. 漏洞描述

综合来说,这个漏洞的根源是"register_globals = on",在这个漏洞的前提下,攻击者可以发动这样的攻击向量

1. 当前网站的"register_globals = on"已开启
2. 在代码中没有显式声明、初始化的变量
3. 在用户提交的HTML表单中提交了相同名字的字段
4. 在以上的前提下,黑客可以任意控制代码中变量的值

大体来说,黑客可以有两种利用、及入侵方式

1. 通过注入、覆盖变量$cfg_basedir,导致可以饶过身份认证和系统变量初始化文件,导致可以上传任意文件到指定目录
2. 通过注入、覆盖变量$cfg_not_allowall、$newname等字段,绕过文件扩展名检查防御代码,向目标文件夹直接上传WEBSHELL

这两种攻击向量的最终目的都是向服务端上传WEBSHELL(.PHP、.ASP、.htaccess)等文件

Relevant Link:

http://huaidan.org/archives/3386.html
http://sebug.net/vuldb/ssvid-12518
http://4byte.cn/learning/51122.html
https://code.google.com/p/webfiles/source/browse/files/localhost/htdocs/cxtx/include/dialog/select_soft_post.php?spec=svn40&r=17

2. 漏洞触发条件

1. register_globals = on: 网站本身的安全设置
2. 攻击者可以通过自定义表单为相关的变量赋值: 伪造HTTP数据包

3. 漏洞影响范围

1. Dedecms 5.5
2. DEDECMS v5.5 Final 

4. 漏洞代码分析

/include/dialog/select_soft_post.php

Relevant Link:

http://www.verydemo.com/demo_c116_i56826.html

5. 防御方法

0x1: 升级到最新的DEDECMS版本

0x2: Patch Code

我们知道,这个漏洞的根源是因为PHP变量覆盖导致的恶意文件上传,没法直接针对性的防御,要进行代码级的防御,可以从堵住入侵GETSHELL的最终目的这个角度入手

1. 在代码流的相对末尾位置布置文件名检测
2. 采取正则匹配文件名中是否有".php、.asp"等特征,来达到防止WEBSHELL上传的目的

/include/dialog/select_soft_post.php

defence code

....
if (preg_match(‘#\.(php|pl|cgi|asp|aspx|jsp|php5|php4|php3|shtm|shtml)$#i‘, trim($filename)))
{
    ShowMsg("你指定的文件名被系统禁止!",‘javascript:;‘);
    exit();
}
$fullfilename = $cfg_basedir.$activepath.‘/‘.$filename;
$fullfileurl = $activepath.‘/‘.$filename;
....

6. 攻防思考

0x1: 官方修复方案

文件上传属于WEB系统通用的功能,最佳的防御实践是将防御代码做成通用的代码模块,放置在WEB系统的关键节点位置,使用面向对象OO的思想对所有的文件上传进行防御

DEDECMS本身已经做了这方面的工作了

1. include/common.inc.php
//检查和注册外部提交的变量
function CheckRequest(&$val)
{
    if (is_array($val))
    {
        foreach ($val as $_k=>$_v)
        {
            CheckRequest($_k);
            CheckRequest($val[$_k]);
        }
    }
    else
    {
        if( strlen($val)>0 && preg_match(‘#^(cfg_|GLOBALS)#‘,$val) )
        {
            exit(‘Request var not allow!‘);
        }
    }
}

2. /include/uploadsafe.inc.php
//为了防止用户通过注入的可能性改动了数据库
//这里强制限定的某些文件类型禁止上传
$cfg_not_allowall = "php|pl|cgi|asp|aspx|jsp|php3|shtm|shtml";
...
if(!empty(${$_key.‘_name‘}) && (eregi("\.(".$cfg_not_allowall.")$",${$_key.‘_name‘}) || !ereg("\.",${$_key.‘_name‘})) )
{
    if(!defined(‘DEDEADMIN‘))
    {
        exit(‘Upload filetype not allow !‘);
    }
}

0x2: 针对select_soft_post.php文件的修复方案

....
if (preg_match(‘#\.(php|pl|cgi|asp|aspx|jsp|php5|php4|php3|shtm|shtml)$#i‘, trim($filename)))
{
    ShowMsg("你指定的文件名被系统禁止!",‘javascript:;‘);
    exit();
}
$fullfilename = $cfg_basedir.$activepath.‘/‘.$filename;
$fullfileurl = $activepath.‘/‘.$filename;
....

Copyright (c) 2014 LittleHann All rights reserved

时间: 2024-08-26 00:19:10

Dedecms include\dialog\select_soft_post.php Upload Any Files To The Specified Directory Via Variable Not Initial Flaw Bypass Extension Defence的相关文章

Maximum number of WAL files in the pg_xlog directory (1)

Guillaume Lelarge: Hi, As part of our monitoring work for our customers, we stumbled upon an issue with our customers' servers who have a wal_keep_segments setting higher than 0. We have a monitoring script that checks the number of WAL files in the

Maximum number of WAL files in the pg_xlog directory (2)

Jeff Janes: Hi, As part of our monitoring work for our customers, we stumbled upon an issue with our customers' servers who have a wal_keep_segments setting higher than 0. We have a monitoring script that checks the number of WAL files in the pg_xlog

dedecms /include/uploadsafe.inc.php SQL Injection Via Local Variable Overriding Vul

catalog 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述 1. dedecms原生提供一个"本地变量注册"的模拟实现,原则上允许黑客覆盖任意变量 2. dedecms在实现本地变量注册的时候,会对$_GET.$_POST.$_COOKIE等的value值进行addslash转移过滤处理 //$key值注入不在本文讨论范围内,详情参阅:http://www.cnblogs.com/LittleHann/p/

Asp.net core 学习笔记 ( upload/download files 文件上传与下载 )

2017-09-25 refer : https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads https://www.codeproject.com/Articles/1203408/Upload-Download-Files-in-ASP-NET-Core 这里只说说小文件上传. 先看看前端 js 代码 <input id="inputFile" type="file" /&g

dedecms /include/helpers/archive.helper.php SQL Injection Vul

catalog 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述 Dedecms会员中心注入漏洞 Relevant Link: http://www.wooyun.org/bugs/wooyun-2010-048892 2. 漏洞触发条件 1. 打开http://127.0.0.1/dedecms5.7/member/soft_add.php 2. 添加软件 3. 打开BURP抓包 1) 将picnum改成typeid2

DedeCMS V5.7 SP2前台文件上传漏洞(CVE-2018-20129)

一.漏洞描述 织梦内容管理系统(Dedecms)是一款PHP开源网站管理系统.Dedecms V5.7 SP2版本中的uploads/include/dialog/select_images_post.php文件存在文件上传漏洞,远程攻击者可以利用该漏洞上传并执行任意PHP代码. 该漏洞利用条件:1.需要开发会员注册功能 2.权限必须是管理员,普通用户无法写入文件 二.漏洞环境搭建 1.官方下载DeDeCMS V5.7 SP2(UTF-8),下载地址: http://www.dedecms.co

ELK 日志管理系统,初次尝试记录

简介: ELK 是一套开源的日志管理平台,主要包括三个组件,可以用于日志的收集.分析.存储和展示工作. ELK 成员:Elasticsearch .Logstash .Kibana( K4 ) ELK 平台特性: 1.处理方式灵活,Elasticsearch 采用实时全文索引,不需要像 storm 一样预先编程才能使用 2.配置简单.易上手,Elasticsearch 全部采用 Json 接口:Logstash 是 Ruby DSL 设计,都是业界最通用的配置语法设计 3.检索性能高效,虽然每次

dede上传文件乱码问题解决

修改下列两个文件: /include/dialog/select_soft_post.php/include/dialog/select_soft.php 改: select_soft.php文件第108行后面添加一句话: $file = mb_convert_encoding($file,'UTF-8','GBK'); select_soft_post.php文件第73行后面添加一句话: $fullfilename = mb_convert_encoding($fullfilename,'GB

Linux -- sudoers文件

ASUDOERS(5)                                                    BSD File Formats Manual                                                    SUDOERS(5) NAME     sudoers — default sudo security policy plugin DESCRIPTION     The sudoers policy plugin dete