Tag - 代码审计

信息安全 代码审计    2017-01-05 11:42:10    157    0    0

漏洞描述

xiaocms后台文章发布存在缩略图上传. 该处并没有对文件类型进行校验. 导致可以上传任意文件, 直接getshell.

漏洞分析

通过xiaocms后台的文件上传URL可以得知URL是c=uploadfile&a=uploadify_upload&type=gif,jpg,jpeg,png

根据core/xiaocms.php中的parse_request()可以知道c参数是控制器,a参数是方法名, 可以定位到admin/contronller/uploadfile.php

而后根据a参数找到uploadify_upload方法定义的位置:

/** 
* uploadify_upload 
*/ 
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->upload完成的, 对$this->upload传入了三个参数, 一个字符串常量'file' , 一个$type参数从URL中获取的, 然后一个文件大小$size, 其中$type是我们可以控制的, 这里没有对$type做任何处理.

我们继续跟入$this->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'))) {