攻防世界WEB高手进阶之blgdel

CISCN final

打开页面

 

 

 

扫描目录

 

 

 Robots.txt

 

 

 Config.txt

代码审计

<?php

class master
{
    private $path;
    private $name;
    
    function __construct()
    {
        
    }
    
    function stream_open($path)
    {
        if(!preg_match('/(.*)\/(.*)$/s',$path,$array,0,9))
            return 1;
        $a=$array[1];
        parse_str($array[2],$array);
        
        if(isset($array['path']))
        {
            $this->path=$array['path'];
        }
        else
            return 1;
        if(isset($array['name']))
        {
            $this->name=$array['name'];
        }
        else
            return 1;
        
        if($a==='upload')
        {
            return $this->upload($this->path,$this->name);
        }
        elseif($a==='search')
        {
            return $this->search($this->path,$this->name);
        }
        else 
            return 1;
    }
    function upload($path,$name)
    {
        if(!preg_match('/^uploads\/[a-z]{10}\/$/is',$path)||empty($_FILES[$name]['tmp_name']))
            return 1;
        
        $filename=$_FILES[$name]['name'];
        echo $filename;
        
        $file=file_get_contents($_FILES[$name]['tmp_name']);
        
        $file=str_replace('<','!',$file);
        $file=str_replace(urldecode('%03'),'!',$file);
        $file=str_replace('"','!',$file);
        $file=str_replace("'",'!',$file);
        $file=str_replace('.','!',$file);
        if(preg_match('/file:|http|pre|etc/is',$file))
        {
            echo 'illegalbbbbbb!';
            return 1;
        }
        
        file_put_contents($path.$filename,$file);
        file_put_contents($path.'user.jpg',$file);
        
        
        echo 'upload success!';
        return 1;
    }
    function search($path,$name)
    {
        if(!is_dir($path))
        {
            echo 'illegal!';
            return 1;
        }
        $files=scandir($path);
        echo '</br>';
        foreach($files as $k=>$v)
        {
            if(str_ireplace($name,'',$v)!==$v)
            {
                echo $v.'</br>';
            }
        }
        
        return 1;
    }
    
    function stream_eof()
    {
        return true;
    }
    function stream_read()
    {
        return '';
    }
    function stream_stat()
    {
        return '';
    }
    
}

stream_wrapper_unregister('php');
stream_wrapper_unregister('phar');
stream_wrapper_unregister('zip');
stream_wrapper_register('master','master');

?>

 

还发现有sql.txt

 

 

 给出了数据库名,数据表,列名,字段名

访问User.php

 

 

 

发现有文件上传点

访问发现等级过低

 

 

 估计要拿一个高分的账户

后面注意到注册页面有个推荐人,试了一下,注册一个新账户给10个积分

 

 

 

到达一百个积分的时候可以上传文件

 

 

 上传一个图片马

上传失败,回头看看代码config.php

 

 

 

这里过滤了尖括号,代码尽管上传成功,但是无法执行

 

 

 代码被替换了

 

 

无法上传php马,但是在尝试过程中发现.htaccess可以被上传,意味着我们可以包含文件

.htaccess相关介绍,在这里

链接:

https://www.cnblogs.com/adforce/archive/2012/11/23/2784664.html

https://blog.csdn.net/cmzhuang/article/details/53537591

后面实在看不出东西,无奈WP大法

 

 

说的比较详细,大概意思是可以通过构造这个master协议来搜索文件,包含成功的话,这个文件的内容会映射到test.php里面

 

构造

php_value auto_append_file master://search/path={}&name={}

wp说的要把正斜杠编码传入才行,试了一下,确实不行,原因未知

 

 

 

编码一下

php_value auto_append_file master://search/path=%2fhome%2f&name=flag

然后放进.htaccess里面,上传

访问1.php

 

直接包含进来

php_value auto_append_file /home/hiahiahia_flag

 

 

 Flag拿到了

posted @ 2019-09-22 23:14  Mke2fs  阅读(1576)  评论(2编辑  收藏  举报